このトピックでは、インターネット経由でGoogle Cloud Platform (GCP) のBigQueryからAlibaba Cloud MaxComputeにデータを移行する方法について説明します。
前提条件
カテゴリ | プラットフォーム | 要件 | 参照 |
環境とデータ | Google Cloudプラットフォーム |
| 関連する環境とデータセットがない場合は、次の準備参照を参照してください。
|
Alibaba Cloud |
| 関連する環境がない場合は、準備のために次のリファレンスを参照してください。
| |
アカウント | Google Cloudプラットフォーム | Identity and Access Management (IAM) ユーザーが作成され、Google Cloud Storageにアクセスする権限が付与されます。 | |
Alibaba Cloud | RAM (Resource Access Management) ユーザーとRAMロールが作成されます。 RAMユーザーには、OSSバケットの読み取りおよび書き込み権限とオンライン移行権限が付与されています。 | ||
リージョン | Google Cloudプラットフォーム | 非該当 | 非該当 |
Alibaba Cloud | OSSバケットとMaxComputeプロジェクトは同じリージョンにあります。 | 非該当 |
背景情報
次の図は、BigQueryからAlibaba Cloud MaxComputeにデータセットを移行するプロセスを示しています。
いいえ | 説明 |
1 | BigQueryからGoogle Cloud Storageにデータセットをエクスポートします。 |
2 | OSSのデータオンライン移行サービスを使用して、Google Cloud StorageからOSSバケットにデータを移行します。 |
3 | OSSバケットから同じリージョンのMaxComputeプロジェクトにデータを移行し、移行されたデータの整合性と正確性を検証します。 |
ステップ1: BigQueryからGoogle Cloud Storageへのデータセットのエクスポート
bqコマンドラインツールを使用してbq extractコマンドを実行し、BigQueryからGoogle Cloud Storageにデータセットをエクスポートします。
Google Cloud Platformにログインし、移行するデータのバケットを作成します。 詳細については、「ストレージバケットの作成」をご参照ください。

bqコマンドラインツールを使用して、TPC-DSデータセット内のテーブルのデータ定義言語 (DDL) スクリプトを照会し、そのスクリプトをオンプレミスのデバイスにダウンロードします。 詳細については、「information_SCHEMAを使用したテーブルメタデータの取得」をご参照ください。
BigQueryは、テーブルのDDLスクリプトを照会する
show create tableなどのコマンドをサポートしていません。 BigQueryでは、組み込みのユーザー定義関数 (UDF) を使用して、データセット内のテーブルのDDLスクリプトをクエリできます。 次のコードは、DDLスクリプトの例を示しています。
bqコマンドラインツールを使用して、
bq extractコマンドを実行し、BigQueryデータセットのテーブルをGoogle Cloud Storageのターゲットバケットにエクスポートします。 操作、エクスポートされたデータの形式、および圧縮タイプの詳細については、「テーブルデータのエクスポート」をご参照ください。次のコードは、exportコマンドのサンプルを示しています。
bq extract --destination_format AVRO --compression SNAPPY tpcds_100gb.web_site gs://bucket_name/web_site/web_site-*.avro.snappy;バケットを表示し、データのエクスポート結果を確認します。
ステップ2: エクスポートされたデータをGoogle Cloud StorageからOSSに移行する
データオンライン移行サービスを使用して、Google Cloud StorageからOSSにデータを移行できます。 詳細については、「Google Cloud PlatformからOSSへのデータ移行」をご参照ください。 Data Online Migrationサービスはパブリックプレビュー中です。 サービスを使用する前に、カスタマーサービスに連絡してサービスを有効化する必要があります。
移行するファイルのサイズと数を見積もります。 gsutilツールを使用するか、ストレージログを確認して、Google Cloud Storageのバケット内のデータサイズを照会できます。 詳細については、「バケット情報の取得」をご参照ください。
オプション: OSSにバケットがない場合は、OSSコンソールにログインし、移行したデータを保存するバケットを作成します。 詳細については、「バケットの作成」をご参照ください。

オプション: RAMユーザーがいない場合は、RAMユーザーを作成し、そのRAMユーザーに関連する権限を付与します。
RAMコンソールにログインし、RAMユーザーを作成します。 詳細については、「RAMユーザーの作成」をご参照ください。
新しく作成したRAMユーザーを検索し、[操作] 列の [権限の追加] をクリックします。 表示されるページで、AliyunOSSFullAccessおよびAliyunMGWFullAccessを選択し、 をクリックします。 権限付与プロセスが完了したら、[閉じる] をクリックします。 AliyunOSSFullAccess権限は、RAMユーザーがOSSバケットの読み取りと書き込みを許可します。 AliyunMGWFullAccess権限は、RAMユーザーにオンライン移行ジョブの実行を許可します。
左側のナビゲーションウィンドウで、[概要] をクリックします。 [概要] ページの [基本情報] セクションで、[ログインURL] リンクをクリックし、RAMユーザーの資格情報を使用してAlibaba Cloud管理コンソールにログインします。
Google Cloud Platformで、プログラムによるアクセス方法を使用してGoogle Cloud Storageにアクセスするユーザーを作成します。 詳細については、「JSONメソッドのIAM権限」をご参照ください。
IAM&管理コンソールにログインし、BigQueryにアクセスする権限を持つユーザーを見つけます。 [操作] 列で、 をクリックします。
表示されるダイアログボックスで、[JSON] を選択し、[作成] をクリックします。 JSONファイルをオンプレミスのデバイスに保存し、[閉じる] をクリックします。
[サービスアカウントの作成] ウィザードで、[ロールの選択] をクリックし、 を選択して、IAMユーザーにGoogle Cloud Storageへのアクセスを許可します。
オンライン移行用のソースデータアドレスと宛先データアドレスを作成します。
Alibaba Cloud Data Transportコンソールにログインします。 左側のナビゲーションウィンドウで、[データオンライン移行] > [データアドレス] をクリックします。
[データアドレス] ページで、[データアドレスの作成] をクリックします。 [データアドレスの作成] パネルで、必要なパラメーターを設定し、[OK] をクリックします。 必要なパラメーターの詳細については、「データの移行」をご参照ください。
データソース
説明[キーファイル] フィールドに、手順4でダウンロードしたJSONファイルをアップロードします。
宛先データアドレス
説明[Access Key Id] および [Access Key Secret] フィールドに、RAMユーザーのAccessKey IDとAccessKey secretを入力します。
オンライン移行ジョブを作成します。
左側のナビゲーションウィンドウで、[移行ジョブ] をクリックします。
[ファイル同期管理] ページで、[ジョブの作成] をクリックします。 ジョブの作成ウィザードで、必要なパラメーターを設定し、[作成] をクリックします。 必要なパラメーターの詳細については、「データの移行」をご参照ください。
ジョブ設定

パフォーマンスのチューニング
説明[データサイズ] および [ファイル数] フィールドに、Google Cloud Platformから移行されたファイルのサイズと数を入力します。
作成した移行ジョブは自動的に実行されます。 [ジョブステータス] 列に [完了] が表示されている場合、移行ジョブは完了しています。
移行ジョブの [操作] 列で、[管理] をクリックして移行レポートを表示し、すべてのデータが移行されたことを確認します。
にログインします。OSSコンソール.
左側のナビゲーションウィンドウで、[バケット] をクリックします。 [バケット] ページで、作成したバケットをクリックします。 バケットの詳細ページの左側のナビゲーションウィンドウで、[ファイル]> [ファイル] を選択して移行結果を表示します。
ステップ3: OSSバケットから同じリージョンのMaxComputeプロジェクトにデータを移行する
MaxComputeのLOADステートメントを実行して、OSSバケットから同じリージョンのMaxComputeプロジェクトにデータを移行できます。
LOADステートメントは、認証用のSecurity Token Service (STS) とAccessKeyをサポートしています。 認証にAccessKeyを使用する場合は、アカウントのAccessKey IDとAccessKey secretを平文で指定する必要があります。 STS認証は、AccessKey情報を公開しないため、非常に安全です。 このセクションでは、STS認証を例として使用して、データを移行する方法を示します。
DataWorksまたはMaxComputeクライアントodpscmdの [アドホッククエリ] タブで、BigQueryデータセットのテーブルのDDLスクリプトを変更し、MaxComputeデータ型を指定して、移行されたデータをMaxComputeに格納する宛先テーブルを作成します。
アドホッククエリの詳細については、「アドホッククエリ機能を使用したSQL文の実行 (オプション) 」をご参照ください。 次のコードは、設定例を示しています。
CREATE OR REPLACE TABLE `****.tpcds_100gb.web_site` ( web_site_sk INT64, web_site_id STRING, web_rec_start_date STRING, web_rec_end_date STRING, web_name STRING, web_open_date_sk INT64, web_close_date_sk INT64, web_class STRING, web_manager STRING, web_mkt_id INT64, web_mkt_class STRING, web_mkt_desc STRING, web_market_manager STRING, web_company_id INT64, web_company_name STRING, web_street_number STRING, web_street_name STRING, web_street_type STRING, web_suite_number STRING, web_city STRING, web_county STRING, web_state STRING, web_zip STRING, web_country STRING, web_gmt_offset FLOAT64, web_tax_percentage FLOAT64 ) Modify the INT64 and FLOAT64 fields to obtain the following DDL script: CREATE TABLE IF NOT EXISTS <your_maxcompute_project>.web_site_load ( web_site_sk BIGINT, web_site_id STRING, web_rec_start_date STRING, web_rec_end_date STRING, web_name STRING, web_open_date_sk BIGINT, web_close_date_sk BIGINT, web_class STRING, web_manager STRING, web_mkt_id BIGINT, web_mkt_class STRING, web_mkt_desc STRING, web_market_manager STRING, web_company_id BIGINT, web_company_name STRING, web_street_number STRING, web_street_name STRING,` web_street_type STRING, web_suite_number STRING, web_city STRING, web_county STRING, web_state STRING, web_zip STRING, web_country STRING, web_gmt_offset DOUBLE, web_tax_percentage DOUBLE );次の表に、BigQueryデータ型とMaxComputeデータ型の間のマッピングを示します。
BigQueryデータ型
MaxComputeデータ型
INT64
BIGINT
FLOAT64
DOUBLE
NUMERIC
デシマルとダブル
BOOL
BOOLEAN
STRING
STRING
BYTES
VARCHAR
日付
日付
日付時刻
日付時刻
時間
日付時刻
TIMESTAMP
TIMESTAMP
STRUCT
STRUCT
地理
STRING
オプション: RAMロールがない場合は、OSSアクセス権限を持つRAMロールを作成し、そのロールをRAMユーザーに割り当てます。 詳細については、「STS権限付与」をご参照ください。
LOADステートメントを実行してOSSバケットからMaxComputeテーブルにすべてのデータをロードし、SELECTステートメントを実行してインポートされたデータを照会および検証します。 一度にロードできるテーブルは1つだけです。 複数のテーブルを読み込むには、loadステートメントを複数回実行する必要があります。 LOADステートメントの詳細については、「LOAD」をご参照ください。
LOAD OVERWRITE TABLE web_site FROM LOCATION 'oss://oss-<your_region_id>-internal.aliyuncs.com/bucket_name/tpc_ds_100gb/web_site/' --The endpoint of the OSS bucket ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' WITH SERDEPROPERTIES ('odps.properties.rolearn'='<Your_RoleARN>','mcfed.parquet.compression'='SNAPPY') STORED AS AVRO;次のステートメントを実行して、インポートされたデータを照会および検証します。
SELECT * FROM web_site;次の結果が返されます。

MaxComputeに移行されたデータがBigQueryのデータと同じであることを確認します。 この検証は、テーブルの数、行の数、および一般的なジョブのクエリ結果に基づいて行われます。