Snowflake から BigQuery への移行チュートリアル
このドキュメントでは、Snowflake から BigQuery への移行パイプラインを設定するさまざまな方法について、エンドツーエンドの例とチュートリアルを提供します。
Snowflake 移行パイプラインの例
Snowflake から BigQuery にデータを移行するには、ELT、ETL、パートナー ツールという 3 つの異なるプロセスを使用できます。
抽出、読み込み、変換
抽出、読み込み、変換(ELT)プロセスは、次の 2 つの方法で設定できます。
- パイプラインを使用して Snowflake からデータを抽出し、BigQuery にデータを読み込む
- 他の Google Cloud プロダクトを使用して Snowflake からデータを抽出する
パイプラインを使用して Snowflake からデータを抽出する
Snowflake からデータを抽出し、Cloud Storage に直接読み込むには、snowflake2bq ツールを使用します。
その後、次のいずれかのツールを使用して、Cloud Storage から BigQuery にデータを読み込むことができます。
- BigQuery Data Transfer Service for Cloud Storage コネクタ
- bq コマンドライン ツールを使用する
LOADコマンド - BigQuery API クライアント ライブラリ
Snowflake からデータを抽出するその他のツール
次のツールを使用して、Snowflake からデータを抽出することもできます。
- Dataflow
- Cloud Data Fusion
- Dataproc
- Apache Spark BigQuery コネクタ
- Apache Spark 用の Snowflake コネクタ
- Hadoop BigQuery コネクタ
- Snowflake と Sqoop の JDBC ドライバ。Snowflake から Cloud Storage にデータを抽出します。
BigQuery にデータを読み込むその他のツール
次のツールを使用して、BigQuery にデータを読み込むこともできます。
- Dataflow
- Cloud Data Fusion
- Dataproc
- Dataprep by Trifacta
抽出、変換、読み込み
BigQuery にデータを読み込む前にデータを変換する場合は、次のツールを検討してください。
- Dataflow
- JDBC to BigQuery テンプレート コードのクローンを作成し、このテンプレートを変更して Apache Beam 変換を追加します。
- Cloud Data Fusion
- 再利用可能なパイプラインを作成し、CDAP プラグインを使用してデータを変換します。
- Dataproc
- サポートされている Spark 言語(Scala、Java、Python、R)のいずれかで Spark SQL またはカスタムコードを使用してデータを変換します。
移行用のパートナー ツール
EDW 移行空間を専門とする複数のベンダーがあります。主要なパートナーと、パートナーが提供するソリューションの一覧については、BigQuery パートナーをご覧ください。
Snowflake エクスポートのチュートリアル
以下のチュートリアルでは、Snowflake の COPY INTO <location> コマンドを使用して Snowflake から BigQuery へサンプルデータをエクスポートする方法について説明します。コードサンプルを含む詳細な手順については、Google Cloud プロフェッショナル サービスの Snowflake から BigQuery への移行ツールをご覧ください。
エクスポートの準備を行う
次の手順で、Snowflake データを Cloud Storage または Amazon Simple Storage Service(Amazon S3)バケットに抽出して、エクスポートの準備をすることができます。
Cloud Storage
このチュートリアルでは、PARQUET 形式でファイルを準備します。
Snowflake SQL ステートメントを使用して、名前付きファイル形式の仕様を作成します。
create or replace file format NAMED_FILE_FORMAT type = 'PARQUET'
NAMED_FILE_FORMATは、ファイル形式の名前に置き換えます。例:my_parquet_unload_formatCREATE STORAGE INTEGRATIONコマンドで統合を作成します。create storage integration INTEGRATION_NAME type = external_stage storage_provider = gcs enabled = true storage_allowed_locations = ('BUCKET_NAME')
次のように置き換えます。
INTEGRATION_NAME: ストレージ統合の名前。例:gcs_intBUCKET_NAME: Cloud Storage バケットのパス。例:gcs://mybucket/extract/
DESCRIBE INTEGRATIONコマンドを使用して、Snowflake の Cloud Storage サービス アカウントを取得します。desc storage integration INTEGRATION_NAME;
出力は次のようになります。
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+ | property | property_type | property_value | property_default | +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | gcs://mybucket1/path1/,gcs://mybucket2/path2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/ | [] | | STORAGE_GCP_SERVICE_ACCOUNT | String | service-account-id@iam.gserviceaccount.com | | +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
STORAGE_GCP_SERVICE_ACCOUNTとしてリストされているサービス アカウントに、ストレージ統合コマンドで指定されたバケットに対する読み取り / 書き込みアクセス権を付与します。この例では、service-account-id@サービス アカウントに<var>UNLOAD_BUCKET</var>バケットに対する読み取り / 書き込みアクセス権を付与します。以前に作成した統合を参照する外部 Cloud Storage ステージを作成します。
create or replace stage STAGE_NAME url='UNLOAD_BUCKET' storage_integration = INTEGRATION_NAME file_format = NAMED_FILE_FORMAT;
次のように置き換えます。
STAGE_NAME: Cloud Storage ステージ オブジェクトの名前。例:my_ext_unload_stage
Amazon S3
次の例は、Snowflake テーブルから Amazon S3 バケットにデータを移行する方法を示しています。
Snowflake で、ストレージ統合オブジェクトを構成して、外部の Cloud Storage ステージで参照される Amazon S3 バケットに Snowflake が書き込めるようにします。
この手順には、Amazon S3 バケットへのアクセス権限の構成、アマゾン ウェブ サービス(AWS)IAM ロールの作成、
CREATE STORAGE INTEGRATIONコマンドによる Snowflake でのストレージ統合の作成が含まれます。create storage integration INTEGRATION_NAME type = external_stage storage_provider = s3 enabled = true storage_aws_role_arn = 'arn:aws:iam::001234567890:role/myrole' storage_allowed_locations = ('BUCKET_NAME')
次のように置き換えます。
INTEGRATION_NAME: ストレージ統合の名前。例:s3_intBUCKET_NAME: ファイルを読み込む Amazon S3 バケットのパス。例:s3://unload/files/
DESCRIBE INTEGRATIONコマンドを使用して、AWS IAM ユーザーを取得します。desc integration INTEGRATION_NAME;
出力は次のようになります。
+---------------------------+---------------+================================================================================+------------------+ | property | property_type | property_value | property_default | +---------------------------+---------------+================================================================================+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/ | [] | | STORAGE_AWS_IAM_USER_ARN | String | arn:aws:iam::123456789001:user/abc1-b-self1234 | | | STORAGE_AWS_ROLE_ARN | String | arn:aws:iam::001234567890:role/myrole | | | STORAGE_AWS_EXTERNAL_ID | String | MYACCOUNT_SFCRole=
| | +---------------------------+---------------+================================================================================+------------------+ スキーマに対する
CREATE STAGE権限と、ストレージ統合に対するUSAGE権限を含むロールを作成します。CREATE role ROLE_NAME; GRANT CREATE STAGE ON SCHEMA public TO ROLE ROLE_NAME; GRANT USAGE ON INTEGRATION s3_int TO ROLE ROLE_NAME;
ROLE_NAMEは、ロールの名前に置き換えます。例:myroleAWS IAM ユーザーに Amazon S3 バケットにアクセスするための権限を付与し、
CREATE STAGEコマンドを使用して外部ステージを作成します。USE SCHEMA mydb.public; create or replace stage STAGE_NAME url='BUCKET_NAME' storage_integration = INTEGRATION_NAMEt file_format = NAMED_FILE_FORMAT;
次のように置き換えます。
STAGE_NAME: Cloud Storage ステージ オブジェクトの名前。例:my_ext_unload_stage
Snowflake データをエクスポートする
データを準備したら、 Google Cloudにデータを移動できます。COPY INTO コマンドを使用して、外部ステージ オブジェクト STAGE_NAME を指定し、Snowflake データベース テーブルから Cloud Storage または Amazon S3 バケットにデータをコピーします。
copy into @STAGE_NAME/d1 from TABLE_NAME;
TABLE_NAME は、Snowflake データベース テーブルの名前に置き換えます。
このコマンドの結果、テーブルデータは Cloud Storage または Amazon S3 バケットにリンクされているステージ オブジェクトにコピーされます。ファイルには d1 という接頭辞が付きます。
その他のエクスポート方法
データのエクスポートに Azure Blob Storage を使用するには、Microsoft Azure へのアンロードの説明に従います。次に、Storage Transfer Service を使用して、エクスポートされたファイルを Cloud Storage に転送します。