workという名のprofileを使用している、データベースはPostgresSQLを使用していると想定する。
抽出したいスナップショットを特定する。
aws rds describe-db-snapshots --profile work | jq ".DBSnapshots.[].DBSnapshotArn"
- S3にエクスポート
コマンドやオプションについてはヘルプをみるなりリファレンスをみればよい。--export-onlyオプションで特定のテーブルに絞っているのがポイント。
aws rds start-export-task \
--export-task-identifier my-snapshot-export \
--source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \
--s3-bucket-name amzn-s3-demo-bucket \
--iam-role-arn iam-role \
--kms-key-id my-key \
--export-only '["データベース名.スキーマ.テーブル名"]' --profile work
- duckdbでS3の対象のファイルに対してクエリを投げる。
profileの設定周りについて詳しくはリファレンスをみる。
FROMにS3URIを指定してクエリがたたける。
AWS_PROFILE=work duckdb
v1.2.1 8e52ec4395
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
D CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain
);
┌─────────┐
│ Success │
│ boolean │
├─────────┤
│ true │
└─────────┘
D SELECT COUNT(*) FROM 'S3URI/1/*.parquet';
100% ▕████████████████████████████████████████████████████████████▏
┌─────────────────┐
│ count_star() │
│ int64 │
├─────────────────┤
│ 41275365 │
│ (41.28 million) │
└─────────────────┘
D