445 Views
May 09, 25
スライド概要
名古屋 ①「データ利 活用研究会」 LT JAWS-UG DuckDB をS3 Tablesのクライアントとして動かしてみた Koji YASUDA 2025 05 08 年 月 日
アジェンダ 1. 背景: とは? DuckDB の S3 Tables サポートについて DuckDB 2. 実験 DuckDB 3. まとめ を S3 Tables のクライアントとして動かしてみた 2
1. 背景 ~ DuckDBとは? DuckDB とは? データ分析(OLAP)に適した組み込みデータベース 3
1. 背景 ~ DuckDBとは? DuckDB の位置付けを理解するための2つの分類軸 分類軸① アーキテクチャ 組み込みDB: ホストアプリのプロセスに組み込んで使われる クライアント-サーバー型DB: データベースがプロセスを占有し、アプリから通信を介して使われ る 4
1. 背景 ~ DuckDBとは? DuckDB の位置付けを理解するための2つの分類軸(Cont.d) 分類軸② ワークロード OLAP(OnLine Analytical Processing): データ分析処理。大量データへの複雑な読み取り操作 OLTP(OnLine Transaction Processing): 日常的な取引処理。多数の短時間・小規模な読み書き操作 5
1. 背景 ~ DuckDBとは? 縦軸を分類軸①アーキテクチャ、横軸を分類軸② ワークロードで分類 すると、DuckDBは以下の位置付けとなる OLAP 組み込みDB DuckDB クライアン ト Snowflake, RedShift , Google サーバー型 BigQuery OLTP SQLite PostgreSQL, MySQL, Aurora DB → DuckDBはデータ量が数百ギガバイトを超えない規模のデータ分析 に適用でき、小規模データの処理に適しているとされる 6
1. 背景 ~ DuckDBの S3 Tables サポート マネージドなIcebergサービスとして S3 Tables が登場 メタデータ管理やスキーマ進化の複雑性を解消 REST catalog による Iceberg テーブルへの標準アクセス 参考: #awsbasics / Apache IcebergとAmazon S3 Tables より これを受けて、DuckDBにも S3 Tables 対応が追加された 7
1. 背景 ~ DuckDBの S3 Tables サポート はExtensionにIceberg対応が入っており、その対応の中に S3 Tables が含まれる Extension: を利用することで、 DuckDB にコア機能に含まれない新しい 機能を追加することが可能 DuckDB 8
1. 背景 ~ DuckDBの S3 Tables サポート 拡張: Icebergテーブルへのアクセスを提供 HTTPFS 拡張 : バックエンドとして S3 の汎用バケット上の Iceberg にアクセ スできる模様(動作未確認) Amazon S3 Tables 拡張 : S3 Tables の Iceberg REST catalog のエンドポイ ント利用 Amazon SageMaker Lakehouse (AWS Glue) 拡張 : SageMaker Lakehouse の Iceberg REST catalog のエンドポイント利用 Iceberg 9
1. 背景 ~ DuckDBの S3 Tables サポート 実際に動かしてみたいため、使用例を探したところ、公式ソースとして以 下の2件がヒットした Amazon S3 Tables 拡張の使用例 DuckDB 公式より、 Preview: Amazon S3 Tables in DuckDB Amazon SageMaker Lakehouse (AWS Glue) 拡張の使用例 AWS Storage Blog より、 Streamlining access to tabular datasets stored in Amazon S3 Tables with DuckDB 10
2. 実験 DuckDB を S3 Tables のクライアントとして動かしてみた 発表者は、 SageMaker に詳しくないので、 S3 Tables のIceberg REST catalog のエンドポイント利用する方式で実験していきます。 ( 注 ): クリーンなアカウントでの動作確認はしていないため、環境によ っては追加の設定が必要となる場合があります。 11
2. 実験 実験は以下の4ステップで行います。 1. S3 Tables の準備 2. Athena でテーブルを作成 3. DuckDB を CloudShell 環境にインストール 4. DuckDB から SQL クエリを発行 12
1. S3 Tables の準備 # S3 Tables Bucketの作成 ~ $ aws s3tables create-table-bucket --name test-table { "arn": "arn:aws:s3tables:ap-northeast-1:123456789:bucket/test-table" } 13
1. S3 Tables
の準備
# Namespaceの作成
# S3_TABLE_ARNは作成したS3 Table BucketのARN
~ $ aws s3tables create-namespace \
> --table-bucket-arn $S3_TABLE_ARN \
> --namespace "test_namespace"
{
"tableBucketARN": "arn:aws:s3tables:ap-northeast-1:123456789:bucket/test-table",
"namespace": [
"test_namespace"
]
}
14
2. Athena でテーブルを作成 から実行しようと思ったが、できなかったのでマネコンから操作 先ほど作成したテーブルを選択し、「Athenaでテーブルを作成」 CLI 15
2. Athena でテーブルを作成 に画面遷移後、SQLクエリがセットされている。そのまま実行 途中の選択肢では、先ほど作成した名前空間を指定する。) Athena ( 16
3.DuckDB を CloudShell 環境にインストール # CloudShellでDuckDBのインストール ~ $ curl https://install.duckdb.org | sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3268 100 3268 0 0 8541 0 --:--:-- --:--:-- --:--:-- 8554 *** DuckDB Linux/MacOS installation script, version 1.2.2 *** .;odxdl, .xXXXXXXXXKc 0XXXXXXXXXXXd ,XXXXXXXXXXXXK 0XXXXXXXXXXXo .xXXXXXXXXKc .;odxdl, cooo: OXXXXd cooo: Destination binary /home/cloudshell-user/.duckdb/cli/1.2.2/duckdb already exists Hint: Append the following line to your shell profile: export PATH='/home/cloudshell-user/.duckdb/cli/latest':$PATH To launch DuckDB now, type /home/cloudshell-user/.duckdb/cli/latest/duckdb 17
4. DuckDB からSQLクエリを発行 # **DuckDB**の起動 ~ $ /home/cloudshell-user/.duckdb/cli/latest/duckdb v1.2.2 7c039464e4 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. D 18
4. DuckDB からSQLクエリを発行 ## Iceberg拡張機能をインストール D FORCE INSTALL iceberg FROM core_nightly; 100% ▕████████████████████████████████████████████████████████████▏ 19
4. DuckDB からSQLクエリを発行 ## AWSとの認証設定 D CREATE SECRET ( TYPE S3, PROVIDER credential_chain ); ┌─────────┐ │ Success │ │ boolean │ ├─────────┤ │ true │ └─────────┘ 20
4. DuckDB からSQLクエリを発行 ## S3 Tablesに接続 D ATTACH 'arn:aws:s3tables:ap-northeast-1:123456789:bucket/test-table' AS s3_tables_db ( TYPE iceberg, ENDPOINT_TYPE s3_tables ); ## 全てのテーブルを表示 D SHOW ALL TABLES; ┌──────────────┬────────────────┬─────────────┬──────────────┬──────────────┬───────────┐ │ database │ schema │ name │ column_names │ column_types │ temporary │ │ varchar │ varchar │ varchar │ varchar[] │ varchar[] │ boolean │ ├──────────────┼────────────────┼─────────────┼──────────────┼──────────────┼───────────┤ │ s3_tables_db │ test_namespace │ daily_sales │ [__] │ [INTEGER] │ false │ └──────────────┴────────────────┴─────────────┴──────────────┴──────────────┴───────────┘ DuckDB のSQLクエリから、Athenaで作成したテーブルが確認できた 21
4. DuckDB からSQLクエリを発行 ## daily_salesテーブル D FROM s3_tables_db.test_namespace.daily_sales; ┌───────────┬──────────────────┬──────────────┐ │ sale_date │ product_category │ sales_amount │ │ date │ varchar │ double │ ├───────────┴──────────────────┴──────────────┤ │ 0 rows │ └─────────────────────────────────────────────┘ 22
4. DuckDB からSQLクエリを発行 ## テーブルの新規作成 D CREATE TABLE s3_tables_db.space.t1 (id INTEGER); Not implemented Error: Create Table によると、 時点では、書き込みは制限事 Iceberg Extension 2025/5/8 -> https://duckdb.org/docs/stable/extensions/iceberg/overview#limitati ons 項 残念 23
3. まとめ の位置付けをざっくりと説明した DuckDB を S3 Tables のクライアントとしての使用方法を紹介した その中から一つの方法を選び、実際に動作を確認した DuckDB では書き込みは 2025 年 5 月時点では非サポートであることがわ かった DuckDB 24
ご清聴ありがとうございました 参考文献 DuckDB IN ACTION SQLite: Past, Present, and Future 25