| marp | theme | size | paginate |
|---|---|---|---|
true |
gaia |
58140 |
true |
Koji YASUDA
2025年05月08日
2025年05月08日
- 背景:
- DuckDBとは?
- DuckDBのS3 Tablesサポートについて
- 実験
- DuckDBをS3 Tablesのクライアントとして動かしてみた
- まとめ
DuckDBとは?
- データ分析(OLAP)に適した組み込みデータベース
DuckDBの位置付けを理解するための2つの分類軸
- 分類軸① アーキテクチャ
- 組み込みDB:
- ホストアプリのプロセスに組み込んで使われる
- クライアント-サーバー型DB:
- データベースがプロセスを占有し、アプリから通信を介して使われる
- 組み込みDB:
DuckDBの位置付けを理解するための2つの分類軸(Cont.d)
- 分類軸② ワークロード
- OLAP(OnLine Analytical Processing):
- データ分析処理。大量データへの複雑な読み取り操作
- OLTP(OnLine Transaction Processing):
- 日常的な取引処理。多数の短時間・小規模な読み書き操作
- OLAP(OnLine Analytical Processing):
縦軸を分類軸①アーキテクチャ、横軸を分類軸② ワークロードで分類すると、DuckDBは以下の位置付けとなる
| OLAP | OLTP | |
|---|---|---|
| 組み込みDB | DuckDB | SQLite |
| クライアント サーバー型DB |
Snowflake, RedShift, Google BigQuery | PostgreSQL, MySQL, Aurora |
→ DuckDBはデータ量が数百ギガバイトを超えない規模のデータ分析に適用でき、小規模データの処理に適しているとされる
- マネージドなIcebergサービスとしてS3 Tablesが登場
- メタデータ管理やスキーマ進化の複雑性を解消
- REST catalogによるIcebergテーブルへの標準アクセス
- 参考: #awsbasics / Apache IcebergとAmazon S3 Tables より
- これを受けて、DuckDBにもS3 Tables対応が追加された
- DuckDBはExtensionにIceberg対応が入っており、その対応の中にS3 Tablesが含まれる
- Extension: を利用することで、DuckDBにコア機能に含まれない新しい機能を追加することが可能
- Iceberg拡張: Icebergテーブルへのアクセスを提供
- HTTPFS拡張: バックエンドとしてS3の汎用バケット上のIcebergにアクセスできる模様(動作未確認)
- Amazon S3 Tables拡張: S3 TablesのIceberg REST catalogのエンドポイント利用
- Amazon SageMaker Lakehouse (AWS Glue)拡張: SageMaker LakehouseのIceberg REST catalogのエンドポイント利用
- 実際に動かしてみたいため、使用例を探したところ、公式ソースとして以下の2件がヒットした
- Amazon S3 Tables拡張の使用例
- DuckDB公式より、Preview: Amazon S3 Tables in DuckDB
- Amazon SageMaker Lakehouse (AWS Glue)拡張の使用例
- Amazon S3 Tables拡張の使用例
発表者は、SageMakerに詳しくないので、S3 TablesのIceberg REST catalogのエンドポイント利用する方式で実験していきます。
(注): クリーンなアカウントでの動作確認はしていないため、環境によっては追加の設定が必要となる場合があります。
実験は以下の4ステップで行います。
- S3 Tablesの準備
- Athenaでテーブルを作成
- DuckDBを CloudShell環境にインストール
- DuckDBからSQLクエリを発行
# S3 Tables Bucketの作成
~ $ aws s3tables create-table-bucket --name test-table
{
"arn": "arn:aws:s3tables:ap-northeast-1:123456789:bucket/test-table"
}# 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"
]
}CLIから実行しようと思ったが、できなかったのでマネコンから操作
先ほど作成したテーブルを選択し、「Athenaでテーブルを作成」
Athenaに画面遷移後、SQLクエリがセットされている。そのまま実行 (途中の選択肢では、先ほど作成した名前空間を指定する。)
# 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 cooo:
,XXXXXXXXXXXXK OXXXXd
0XXXXXXXXXXXo cooo:
.xXXXXXXXXKc
.;odxdl,
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
# **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 ## Iceberg拡張機能をインストール
D FORCE INSTALL iceberg FROM core_nightly;
100% ▕████████████████████████████████████████████████████████████▏
## AWSとの認証設定
D CREATE SECRET (
TYPE S3,
PROVIDER credential_chain
);
┌─────────┐
│ Success │
│ boolean │
├─────────┤
│ true │
└─────────┘
## 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で作成したテーブルが確認できた
## daily_salesテーブル
D FROM s3_tables_db.test_namespace.daily_sales;
┌───────────┬──────────────────┬──────────────┐
│ sale_date │ product_category │ sales_amount │
│ date │ varchar │ double │
├───────────┴──────────────────┴──────────────┤
│ 0 rows │
└─────────────────────────────────────────────┘
## テーブルの新規作成
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#limitations
- DuckDBの位置付けをざっくりと説明した
- DuckDBをS3 Tablesのクライアントとしての使用方法を紹介した
- その中から一つの方法を選び、実際に動作を確認した
- DuckDBでは書き込みは2025年5月時点では非サポートであることがわかった

