Open3

Bigquery -> Snowflakeを試してみる

HYHY

BQ->Snowflakeへのデータ転送を勉強兼ねて。
SnowflakeにはGCS/S3/Azure(+ローカル)からデータインポートする形になっているが、外部ストレージからの一括ロードについては機能に大差なさそうなので、GCSからのインポートをしてみる。

まずは適当にバケットを作って以下のクエリでGCSへデータのエクスポート

EXPORT DATA
  OPTIONS (
    uri = 'gs://XXX/data/*.parquet',
    format = 'PARQUET',
    overwrite = true)
AS (
  SELECT *
  FROM datasets.table_name
);
HYHY

次はsnowflake側からGCSの内容を読み取る作業。
まずはSnowflakeストレージ統合というのを使って読み取れる様にするらしい。

snowsqlで

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://XXX/data/');

これでgcs接続用のservice accountが作成される様なので確認

DESCRIBE STORAGE INTEGRATION gcs_int;

こちらで作成された権限に対しGCSのバケットの権限を渡す

テスト用なのでcreate/get/list/delete辺りを与えたカスタムロールを作成し、先ほど作成されたサービスアカウントに割り当てる。

HYHY

snowflake側で外部ステージを作成。

CREATE STAGE my_gcs_stage
  URL = 'gcs://XXX/data/'
  STORAGE_INTEGRATION = gcs_int
  FILE_FORMAT = (TYPE = PARQUET);

先ほどアップしたデータがstageに存在することが確認できる。

LIST @my_gcs_stage;