🌱
DuckDBからGCS(Google Cloud Storage)のParquetファイルを読む
DuckDBはS3やS3と互換のあるAPIを持つオブジェクトストレージへアクセスする機能を持っています。
同様にGCS(Google Cloud Storage)に保存されたオブジェクト(CSV、Parquet形式など)にもアクセスすることができます。ほとんどはS3のサンプルコードを見ながらパスを読み替える程度でうまくいくのですが、Secretの設定だけは特有の設定が必要で、その情報にたどり着くのに苦労したのでここに書き記しておきます。
前提
DuckDB 1.1.3
DuckDB CLI
サービスアカウントを作成
適切な権限を持つサービスアカウントを作成します。
今回はStorageへの読み書きを行うので、これらのロールを付与しておきました。
- Storage オブジェクト閲覧者
- Storage オブジェクト作成者
- Storage オブジェクト管理者(必要な場合)
HMAC Key を作成
Google Cloud コンソールにログイン後、[Storage] > [設定] と進むと、HMAC Keyの作成画面があります。
https://console.cloud.google.com/storage/settings;tab=interoperability
サービスアカウントHMAC の項目で、サービスアカウントのキーを作成 からキーを作成します。
シークレットは無くさないように安全な場所へ文字列を保存しておいてください。
Secretの作成
S3のサンプルではIAM Userのアクセスキーとシークレットになっています。
GCSへアクセスしたい場合は、 TYPE GCS
、 KEY_ID
と SECRET
には、HMAC Key をそれぞれ設定します。ここで設定したTypeに応じたエンドポイントが自動的に使われていました。
D CREATE SECRET シークレット名 (
TYPE GCS,
KEY_ID 'アクセスキー',
SECRET 'シークレット');
Extentionの準備
これはS3互換のAPIを読み書きするために必要になります。
D INSTALL httpfs;
D LOAD httpfs;
クエリ実行
SELECT * FROM read_parquet('gs://バケット名/path/to/object/sample.parquet');
┌──────────┬──────────────────────────┬──────────────────────────┐
│ sample │ created_at │ updated_at │
│ varchar │ timestamp with time zone │ timestamp with time zone │
├──────────┼──────────────────────────┼──────────────────────────┤
│ sample │ 2024-12-23 15:24:13.9+09 │ 2024-12-23 15:24:13.9+09 │
└──────────┴──────────────────────────┴──────────────────────────┘
※出力結果はイメージです
Discussion