Open3
Bigquery -> Snowflakeを試してみる
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
);
次は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辺りを与えたカスタムロールを作成し、先ほど作成されたサービスアカウントに割り当てる。
snowflake側で外部ステージを作成。
CREATE STAGE my_gcs_stage
URL = 'gcs://XXX/data/'
STORAGE_INTEGRATION = gcs_int
FILE_FORMAT = (TYPE = PARQUET);
先ほどアップしたデータがstageに存在することが確認できる。
LIST @my_gcs_stage;