🌱

DuckDBからGCS(Google Cloud Storage)のParquetファイルを読む

2024/12/23に公開

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 GCSKEY_IDSECRET には、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        │
│ varchartimestamp with time zone │ timestamp with time zone │
├──────────┼──────────────────────────┼──────────────────────────┤
│ sample   │ 2024-12-23 15:24:13.9+092024-12-23 15:24:13.9+09 │
└──────────┴──────────────────────────┴──────────────────────────┘

※出力結果はイメージです

株式会社ゆめみ

Discussion