DataWorks のスケジューリングタスクを使用すると、データ転送の時間と頻度を設定できます。また、転送およびインポート中のデータ整合性と精度を確保します。MaxCompute から Hologres のパーティションテーブルにパーティションテーブルデータをインポートできます。このプロセスは、両プラットフォームの強みを組み合わせることで、データ処理効率と信頼性を向上させます。
前提条件
Hologres インスタンスを購入し、有効化済みであること。詳細については、「Hologres インスタンスの購入」をご参照ください。
MaxCompute を有効化し、プロジェクトを作成済みであること。詳細については、「MaxCompute の有効化」をご参照ください。
DataWorks を有効化し、DataWorks ワークスペースを作成済みであること。詳細については、「ワークスペースの作成」をご参照ください。
注意事項
MaxCompute で、テナントレベルまたはプロジェクトレベルで Schema サービスが有効になっていないことを確認してください。Schema の詳細については、「Schema 操作」をご参照ください。
データ準備
このトピックでは、MaxCompute の public_data データセットにあるパーティションテーブル dwd_product_movie_basic_info を例として使用します。以下に、dwd_product_movie_basic_info のテーブルスキーマを示します。
-- MaxCompute パーティションテーブルの DDL
CREATE TABLE IF NOT EXISTS public_data.dwd_product_movie_basic_info(
movie_name STRING COMMENT '映画名',
director STRING COMMENT '監督',
scriptwriter STRING COMMENT '脚本家',
area STRING COMMENT '制作地域または国',
actors STRING COMMENT '主演俳優',
`type` STRING COMMENT 'タイプ',
movie_length STRING COMMENT '映画の長さ',
movie_date STRING COMMENT '公開日',
movie_language STRING COMMENT '言語',
imdb_url STRING COMMENT 'IMDb ID'
)
PARTITIONED BY (ds STRING) STORED AS ALIORC;操作手順
MaxCompute データの準備。
DataWorks コンソールにログインします。 ターゲットリージョンで、左側のナビゲーションウィンドウからを選択します。 [データ分析に移動]をクリックします。 次に、左側のナビゲーションウィンドウで
アイコンをクリックして、SQL Query ページに移動します。SQL Query ページで、次の SQL 文を入力してパーティションテーブルの
20170112パーティションのデータを表示し、Run をクリックします。SELECT * FROM public_data.dwd_product_movie_basic_info WHERE ds = '20170112';クエリ結果は次の図に示されています。
Hologres で外部テーブルを作成します。
Hologres で外部テーブルを作成し、ソース MaxCompute テーブルからデータをマッピングします。外部テーブルのフィールド順序とフィールドタイプは、MaxCompute テーブルのものと一致する必要があります。
またはHoloWeb コンソール SQL エディターにログインします。
SQL Editor タブの下にある
アイコンをクリックして、Ad-hoc Query ウィンドウを開きます。 クエリウィンドウのツールバーで、お使いの Hologres インスタンスの Instance Name と データベース を選択します。「Ad-hoc Query」ウィンドウのエディターで、次の文を入力し、Run をクリックします。
次の文は、
IMPORT FOREIGN SCHEMAコマンドを使用して、dwd_product_movie_basic_info という名前の Hologres 外部テーブルを作成します。IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update');
Hologres でマネージドテーブル (内部テーブル) を作成します。
Hologres で内部テーブルを作成し、データを受信して保存します。
HoloWeb 開発ページで、Ad-hoc Query をクリックします。
新しい Ad-hoc Query ページで、Instance Name および データベース を選択します。次に、以下の文を SQL クエリエディターに入力し、Run をクリックします。
この例では、MaxCompute パーティションテーブルを Hologres にインポートします。したがって、Hologres で作成する内部テーブルはパーティションテーブルである必要があります。
説明次の CREATE TABLE 文は簡単な例です。必要に応じて、実際のデータ定義言語 (DDL) 文を作成してください。また、クエリパフォーマンスを最適化するために、テーブルに適切なインデックスを設定する必要があります。
BEGIN; CREATE TABLE "public"."holo_dwd_product_movie_basic_info" ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ) PARTITION BY LIST (ds); CALL SET_TABLE_PROPERTY('"public"."holo_dwd_product_movie_basic_info"', 'orientation', 'column'); COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_name" IS '映画名'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."director" IS '監督'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."scriptwriter" IS '脚本家'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."area" IS '制作地域または国'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."actors" IS '主演俳優'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."type" IS 'タイプ'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_length" IS '映画の長さ'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_date" IS '公開日'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_language" IS '言語'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."imdb_url" IS 'IMDb ID'; COMMIT;
パーティション子テーブルのデータ開発。
このステップは、パーティションテーブルをスケジュールする Hologres SQL モジュールです。
DataWorks コンソールにログインします。DataStudio ページに移動し、Hologres SQL ノードを作成します。詳細については、「Hologres SQL ノード」をご参照ください。
ノード編集ページで、次の文を入力します。
Hologres は、パーティションデータをパーティション親テーブルに直接書き込むことをサポートしていません。MaxCompute パーティションテーブルのパーティションキー値と一致するパーティション子テーブルを Hologres に作成する必要があります。次に、パーティションデータを対応するパーティション子テーブルにインポートします。パーティションキー値はパラメーター ${bizdate} によって制御されます。スケジューリングシステムは、定期的なスケジューリングを有効にするためにこのパラメーターを自動的に割り当てます。スケジューリングパラメーターの詳細については、「スケジューリングパラメーターのサポートされている形式」をご参照ください。
説明インポートされたパーティションデータはパーティションキー値と一致する必要があります。この例では、パーティションキーは ds です。そうでない場合、エラーが発生します。
次のセクションでは、パーティションデータをインポートするための2つのシナリオについて説明します。ご利用のビジネスロジックに適合するものを選択してください。
シナリオ 1:新しいパーティションデータのインポート。
-- 一時パーティション子テーブルの作成 BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ); COMMIT; -- 外部テーブルデータの更新 IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update'); -- Hologres メタデータの遅いキャッシュ更新によって引き起こされるデータ整合性の問題を防止するために、Hologres にデータをインポートする前に 30 秒間待機します SELECT pg_sleep(30); -- MaxCompute データを一時パーティション子テーブルにインポート INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; -- 新しいパーティションデータのインポート BEGIN; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; -- 一時パーティション子テーブルをパーティション親テーブルにアタッチ ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}'); COMMIT;シナリオ 2:履歴パーティションデータの更新。
-- 一時パーティション子テーブルの作成 BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ); COMMIT; -- 外部テーブルデータの更新 IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update'); -- Hologres メタデータの遅いキャッシュ更新によって引き起こされるデータ整合性の問題を防止するために、Hologres にデータをインポートする前に 30 秒間待機します SELECT pg_sleep(30); -- MaxCompute データを一時パーティション子テーブルにインポート INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; -- 履歴パーティションデータの更新 BEGIN; ALTER TABLE IF EXISTS holo_dwd_product_movie_basic_info DETACH PARTITION holo_dwd_product_movie_basic_info_${bizdate}; DROP TABLE IF EXISTS holo_dwd_product_movie_basic_info_${bizdate}; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; -- パーティション子テーブルをパーティション親テーブルにアタッチ ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}'); COMMIT;
スケジューリングの設定。
[Hologres SQL] ノード編集ページで、右側ペインの [スケジューリング設定] をクリックして、ノードのスケジューリングプロパティを設定します。
説明次のパラメーターのみを変更します。他のすべてのパラメーターはデフォルト値のままにします。
基本プロパティ
パラメーター
値
パラメーター
bizdate=${yyyymmdd}
時間プロパティ

パラメーター
値
インスタンス生成方法
公開後すぐに生成
再実行プロパティ
実行成功後は再実行できません。実行失敗後は再実行できます
スケジュールされた時間
00:05
スケジューリング依存関係
ルートノードをスケジューリング依存関係として設定します。ビジネスロジックに基づいて、既存の親ノードを選択することもできます。まず、[コード解析] を はい に設定します。次に、[コード解析] をクリックして、ルートノードを自動的に解析します。最後に、[コード解析] を いいえ に設定します。
スケジューリングタスクの公開。
「[Hologres SQL]」編集ページで、ツールバーの
アイコンをクリックして、ノードを保存します。ツールバーの
アイコンをクリックしてノードを送信します。[新バージョンの送信] ダイアログボックスで、[変更内容の説明] フィールドに変更内容の説明を入力します。
OK をクリックします。
オペレーションセンターでの公開。
「[Hologres SQL]」編集ページで、ツールバーの右端にある[O&M]をクリックします。
[オペレーションセンター] ページに移動します。左側のナビゲーションウィンドウで、[スケジュール済みタスクのO&M] > [スケジュール済みタスク] を選択します。
「スケジュール済みタスク」ページで、ノードを右クリックし、「データのバックフィル」>「現在のノード」を選択します。

左側のナビゲーションウィンドウで、[O&M アシスタント] > [データのバックフィル] を選択して、実行中のタスクとそのステータスを表示します。
データの表示。
タスクが正常に実行されると、Hologres は対応するパーティションデータに対してパーティション子テーブルを自動的に作成します。
DataStudio ページに移動し、Hologres SQL ノードを作成します。詳細については、「Hologres SQL ノード」をご参照ください。
ノード編集ページで、次の文を入力してデータをクエリします。
パーティション子テーブルのデータをクエリ。
SELECT * FROM holo_dwd_product_movie_basic_info_20170112;パーティション親テーブルの総行数をクエリ。
SELECT COUNT (*) FROM holo_dwd_product_movie_basic_info;