3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DynamoDB の S3 エクスポートにフィルターが来た!特定データだけ切り出して新テーブルを作る

3
Posted at

はじめに

2026 年 10 月 1 日に、Amazon DynamoDB の Amazon S3 へのエクスポートでフィルターが使えるようになりました!

これまでの S3 エクスポートは、テーブル全体か指定期間の増分を丸ごと出すしかありませんでしたが、今回のアップデートで、エクスポート時に項目と属性を絞り込めます。

「特定のデータだけ別テーブルに切り出したい」と思ったことがあり、今回のアップデートで実現できそうだったので検証してみました。

前提条件・制約

  • この機能を使う場合、S3 エクスポート全般と同じく、ポイントインタイムリカバリ(PITR)の有効化が必須です。提供リージョンは AWS GovCloud(米国)を除く全リージョンです
  • 2026/10/16に東京リージョンで動作確認しました

フィルター付きエクスポートとは?

この機能は名前の通り、エクスポート対象データをフィルタリングできる機能です。

フィルターはフルエクスポート(full)と増分エクスポート(incremental)のどちらでも使えます。

絞り込みには 3 種類の式があり、1 つだけでも組み合わせても指定できます。

式 役割 構文の出どころ データ読み取り量への影響
key condition expression パーティションキー(PK)で項目を選ぶ。ソートキー(SK)の条件は任意 Query のキー条件式 減る(読み取り対象が 1 つの PK 値に限定される)
filter expression キー属性・非キー属性に条件を付ける Scan のフィルター式 減らない(読み取り後に適用)
projection expression 出力する属性を選ぶ 他の操作の射影式 -

今回はライトに検証したので、使ったのは key condition expression だけです。
filter expression と projection expression は試していないので、上記の簡単な紹介にとどめます。

料金

フィルターを付けてもレートは通常のエクスポートと同じで、フィルタリング自体の追加料金はありません。

フルエクスポートはその時点のテーブルサイズ(テーブルデータ + LSI)、増分エクスポートは対象期間の継続バックアップから処理したデータサイズで課金されます。

key condition で単一の PK 値に絞った場合、読み取るデータが減り、マッチしたデータ分だけの課金になります(1 エクスポートあたり最小 10 MB)。

filter expression は読み取り後に適用されるので、課金は減りません。

やってみた

検証シナリオ

では、マルチテナントSaaS基盤での利用を想定し、早速触ってみます。

PK がテナント ID のプール型のテーブルに、3 テナントのデータが混在しています。

このうち tenant-a のデータだけをエクスポートし、そのデータだけで新しいテーブルを作ります。

1 テナントだけを選ぶので、key condition expression で tenantId = tenant-a を指定します。

ただ、エクスポートはあくまで S3 への出力で、元のテーブルに書き戻す(リストアする)機能ではありません。
エクスポートしたデータを使うには、別途 Import from S3 で新しいテーブルを作ります。

つまり、filtered export → S3 → Import from S3 → 新テーブルという流れです。

検証用テーブルの準備

検証用テーブル filtered-export-poc を作成しました。
PK は tenantId(String)、SK は itemId(String)、PITR を有効にしています。

以下のような3 テナント分のデータを各 2 件、計 6 件入れました。

tenantId itemId name amount status
tenant-a item-001 Alice 100 active
tenant-a item-002 Bob 250 inactive
tenant-b item-001 Carol 300 active
tenant-b item-002 Dave 420 active
tenant-c item-001 Eve 500 inactive
tenant-c item-002 Frank 640 active

フィルター付きエクスポートを実行する

テーブル filtered-export-poc の「Exports and streams」タブを開き、「Export to S3」をクリックします。

CleanShot 2026-10-14 at 05.36.32@2x.png

Export 画面に「Filter table data - optional」というセクションが増えていました。
Partition key、Sort key、Filter conditions、Attribute projections の入力欄が並んでいます。

Destination S3 bucket は s3://filtered-export-poc-<アカウントID>-apne1、Partition key は tenantId (String) に tenant-a を指定します。

Sort key は Attribute が itemId (String) に自動補完されますが、Value は未入力のまま(絞り込みなし)です。

Filter conditions は指定せず、Attribute projections は All attributes、
Export settings は Point-in-time export(Current time)、Exported file format は DynamoDB JSON、暗号化は Amazon S3 key(SSE-S3)にしました。

CleanShot 2026-10-14 at 05.42.59@2x.png

「Export」をクリックすると、エクスポートジョブが始まります。Status は「Exporting」になっています。

CleanShot 2026-10-14 at 05.43.26@2x.png

処理には5分程度かかりました。

S3 に出力された中身を確認する

エクスポート先のバケットを見ると、AWSDynamoDB/01791924196046-4c52c674/ の配下に 6 つのオブジェクトができていました。

CleanShot 2026-10-14 at 05.50.40@2x.png

Import from S3 で新テーブルを作る

Import from S3 は CSV、DynamoDB JSON、Amazon Ion を受け付け、インポート時に新しいテーブルを作成します。

エクスポートの出力形式(DynamoDB JSON)がそのまま Import の入力として使えるので、間に変換を挟まずに済みます。

DynamoDB コンソールの左メニューから「Imports from S3」を開きます。

CleanShot 2026-10-14 at 05.58.01@2x.png

「Import from S3」をクリックし、「Browse S3」でインポート元を選びます。

ここで指定するのはエクスポート先プレフィックス直下ではなく、実データが入っている data/ フォルダです。

DynamoDB のエクスポートデータファイルは .json.gz として出力されるため、Source S3 URL を s3://filtered-export-poc-<アカウントID>-apne1/AWSDynamoDB/01791924196046-4c52c674/data/ に、Import file compression を GZIP に合わせます。

CleanShot 2026-10-14 at 06.21.10@2x.png

Specify table details では、新テーブル名を filtered-export-poc-imported にしました。キーは元テーブルと同じく、PK tenantId(String)、SK itemId(String)です。

CleanShot 2026-10-14 at 06.15.21@2x.png

Default settings のまま進めて、インポートを開始します。

CleanShot 2026-10-14 at 06.25.34@2x.png

新テーブルの中身を確認する

インポート後、「Explore items」で filtered-export-poc-imported を Scan してみます。

結果は「Items returned: 2」で、tenant-a の 2 件だけが入っていました。

tenantId itemId amount name status
tenant-a item-001 100 Alice active
tenant-a item-002 250 Bob inactive

Arc 2026-10-14 06.26.38.png

tenant-b と tenant-c は含まれていません。無事、1 テナント分だけ切り出せました。

まとめ

DynamoDB のフィルター付きエクスポートで、特定のテナントだけを切り出して新しいテーブルを作る流れを試してみました。

  • key condition expression でパーティションキーを 1 つに絞ると、読み取るデータが減りマッチした分だけの課金になる(filter expression は読み取り後に適用されるので課金は減らない)
  • エクスポートはリストアではないので、データを使うには Import from S3 で新しいテーブルを作る
  • エクスポートの出力形式(DynamoDB JSON)はそのまま Import の入力に使えるので、間に変換を挟まずに済む
  • Import 時に指定するのはプレフィックス直下ではなく、実データが入っている data/ フォルダ(.json.gz 出力)

複数種類のデータが混在するテーブルから、移行や検査で特定のテナントだけを切り出して別テーブルに残す、といった使い方に早速使えそうだと感じました。

コスト削減にもなりそうですので、なかなか便利機能ですねー

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?