このトピックでは、MaxCompute ジョブを例に、Data Studio でスケジュールされたタスクを作成する方法を説明します。このガイドで、Data Studio の基本機能をすぐに使い始めることができます。
前提条件
-
必要なデータソースがバインドされていること。詳細については、「準備:コンピュートエンジンまたはクラスターのバインド」をご参照ください。
-
[Development] ロールのアクセス許可を持っていること。アクセス許可の付与方法の詳細については、「ワークスペースへのメンバーの追加とロールの管理」をご参照ください。
このトピックでは、ODPS SQL ノードを例として使用します。そのため、ワークスペースは MaxCompute データソースにバインドされている必要があります。
背景
DataWorks の Data Studio は、MaxCompute、Hologres、EMR、CDH などのさまざまなコンピューティングエンジン向けのビジュアル開発インターフェイスを提供します。インテリジェントなコード開発、データクレンジング、データ処理、標準化されたタスクのデプロイをサポートし、効率的で安定したデータ開発を実現します。詳細については、「Data Studio (レガシー)」をご参照ください。
通常、未加工のビジネスデータを DataWorks に書き込み、それを処理して最終的な結果テーブルを生成するプロセスには、次の手順が含まれます。
-
DataWorks で複数のデータテーブルを作成します。 例:
-
他のデータソースから同期したデータを格納するソーステーブル。
-
DataWorks でクレンジングおよび処理したデータを格納する結果テーブル。
-
-
同期タスクを作成して、ビジネスデータをソーステーブルに同期します。
-
コンピューティングノードを作成して、ソーステーブルのデータを階層的にクレンジングおよび処理し、各レイヤーの結果を対応する結果テーブルに書き込みます。
または、テーブルを作成した後、ローカルデータを DataWorks のソーステーブルに直接アップロードすることもできます。その後、コンピューティングノードを使用してデータをクレンジングおよび処理し、結果を結果テーブルに格納できます。このトピックの例では、ローカルデータをアップロードし、コンピューティングノードでクレンジングする手順を紹介します。
Data Studioへの移動
DataWorks コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[DataStudioに移動] をクリックします。
操作手順
-
データ開発はワークフローを中心に行います。コード開発を開始する前に、ワークフローを作成する必要があります。
-
DataWorks では、テーブルを視覚的に作成でき、作成したテーブルはディレクトリ構造で表示されます。データ開発を開始する前に、データクレンジング結果を格納するためのテーブルをコンピュートエンジンに作成する必要があります。
-
DataWorks は、異なるコンピュートエンジンのタスクを異なるノードタイプにカプセル化します。業務要件に基づいて適切なノードタイプを選択できます。
-
ノード編集ページで、ノードのデータベースエンジンの構文を使用して業務ロジックを記述します。
-
ノードを定期的に実行するために、ノードのスケジューリングプロパティを定義します。
-
DataWorks は、コードフラグメントのクイック実行、「Run」、高度な実行の 3 つの方法でコードをデバッグし、ロジックを検証できます。
-
ノードをデバッグした後、保存して送信する必要があります。
-
本番環境のタスクを効率的に実行し、コンピューティングリソースの無駄を防ぐために、デプロイ前に開発環境でタスクのスモークテストを実行して正しく動作することを確認します。
-
DataWorks は、スケジュール設定され、本番環境にデプロイされたタスクのみを実行します。スモークテストが成功した後、タスクを本番スケジューリングシステムにデプロイする必要があります。
ステップ 1:ワークフローの作成
DataWorks はワークフローを中心にデータ開発を構成します。ワークフローは、開発ノードにコンテナのようなパネルを使用し、関連するツール、最適化、管理アクションを中心となるオブジェクトにグループ化します。このアプローチにより、開発と管理が簡素化されます。要件を満たすために、関連するビジネスタスクを 1 つのワークフローにグループ化できます。
DataStudioページに移動します。
DataWorks コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[DataStudioに移動] をクリックします。
-
ワークフローを作成します。
次の 2 つの方法のいずれかでワークフローを作成できます:
-
方法 1:
アイコンにカーソルを合わせ、Create Workflow をクリックします。 -
方法 2: Data Studio の左側のナビゲーションツリーで、Workflow を右クリックし、Create Workflow を選択します。
-
-
ワークフローの名前と説明を入力し、Create をクリックします。
このチュートリアルでは、
Create your first scheduled taskという名前のワークフローを作成します。 実際のシナリオでは、ビジネス要件に基づいてワークフローを計画する必要があります。説明ワークフローの詳細については、「ワークフローの作成と管理」をご参照ください。
ステップ 2:テーブルの作成
Data Studio のノードはソースデータをクレンジングして処理します。そのため、まずコンピュートエンジンにテーブルを作成してデータクレンジングの結果を格納し、テーブル構造を定義する必要があります。
-
テーブルを作成します。
-
ステップ 1 で作成したワークフローで、サブディレクトリを展開し、 を右クリックして、[Create Table] を選択します。
-
テーブル名、エンジンインスタンス、その他の情報を設定します。
このチュートリアルでは、次の 2 つのテーブルが作成されます。
テーブル名
説明
bank_data生のビジネスデータを格納します。
result_tableクレンジング結果を格納します。
説明-
テーブル作成ステートメントについては、「テーブル作成ステートメント」をご参照ください。
-
MaxCompute や EMR テーブルの作成など、さまざまなエンジン用のテーブルを視覚的に作成する方法の詳細については、「テーブルの作成」をご参照ください。
-
-
テーブル構造を設定します。
テーブル編集ページに移動し、DDL モードに切り替え、DDL ステートメントを使用してテーブル構造を設定します。テーブル構造が生成されたら、[General] セクションでテーブルの [Display Name] を入力します。次に、開発環境と本番環境の両方に送信します。テーブルを送信すると、対応する環境のデータソースプロジェクトで表示できます。各環境にバインドされているデータソース情報を表示するには、「MaxCompute コンピューティングリソースのバインド」をご参照ください。
説明-
作成や更新などのテーブル操作は、対応する環境に送信して初めてコンピュートエンジンで有効になります。
-
ビジネスニーズや画面の指示に基づいて、テーブル構造を視覚的に設定することもできます。テーブルを視覚的に作成する方法の詳細については、「MaxCompute テーブルの作成と使用」をご参照ください。
bank_dataテーブル構造を生成するステートメントは次のとおりです。CREATE TABLE IF NOT EXISTS bank_data ( age BIGINT COMMENT '年齢', job STRING COMMENT '職種', marital STRING COMMENT '配偶者の有無', education STRING COMMENT '学歴', default STRING COMMENT 'クレジットカードの有無', housing STRING COMMENT '住宅ローン', loan STRING COMMENT '個人ローン', contact STRING COMMENT '連絡方法', month STRING COMMENT '月', day_of_week STRING COMMENT '曜日', duration STRING COMMENT '最後の連絡の持続時間 (秒)', campaign BIGINT COMMENT 'このキャンペーン中に行われた連絡の回数', pdays DOUBLE COMMENT '前回のキャンペーンからの最後の連絡以降の日数', previous DOUBLE COMMENT 'このキャンペーンの前に行われた連絡の回数', poutcome STRING COMMENT '前回のマーケティングキャンペーンの結果', emp_var_rate DOUBLE COMMENT '雇用変動率', cons_price_idx DOUBLE COMMENT '消費者物価指数', cons_conf_idx DOUBLE COMMENT '消費者信頼感指数', euribor3m DOUBLE COMMENT 'ユーロ圏銀行間貸出金利 (3か月)', nr_employed DOUBLE COMMENT '従業員数', y BIGINT COMMENT 'クライアントが定期預金を申し込んだかどうか' );result_tableテーブル構造を生成するステートメントは次のとおりです。CREATE TABLE IF NOT EXISTS result_table ( education STRING COMMENT '学歴', num BIGINT COMMENT '人数' ) PARTITIONED BY ( day STRING, hour STRING ); -
-
データをアップロードします。
未加工のビジネスデータを DataWorks テーブルに保存します。 この例では、ローカルファイル banking.txt を DataWorks の
bank_dataテーブルにアップロードして、実際のデータ書き込みシナリオをシミュレートします。 データインポートウィザードで、まずターゲットテーブルの [bank_data] を選択し、テーブルスキーマに age、job、marital、education、default、housing などのフィールドが含まれていることを確認してから、パーティションパラメータを設定します。 次に、ローカルファイルの banking.txt をアップロードし、ファイル形式を CSV、区切り文字をカンマ、文字セットを GBK、インポート開始行を 1 に設定して、[先頭行はヘッダー] チェックボックスを選択します。 最後に、フィールドマッピング方法として [名前でマッピング] を選択し、ソースフィールドとターゲットフィールド間のマッピングが正しいことを確認してから、[データをインポート] をクリックして操作を完了します。 データのアップロードの詳細については、「ローカルデータを bank_data テーブルにアップロードする」をご参照ください。
ステップ 3:ノードの作成
業務要件に基づいて、開発に適したノードタイプを選択します。
DataWorks のノードは、データ同期ノードとコンピュートノードに分類されます。一般的な開発プロセスでは、最初にバッチ同期タスクを使用して業務データベースからデータウェアハウスにデータを同期します。その後、DataWorks のコンピュートノードを使用して、ウェアハウス内のテーブルデータをクレンジングおよび処理します。
-
ノードを作成します。
ノードは、次の 2 つのメソッドのいずれかで作成できます:
-
メソッド 1:ナビゲーションツリーから作成
-
ナビゲーションツリーの Workflow 配下で、ステップ 1 で作成したワークフローを見つけます。
-
目的のエンジンを右クリックし、Create Node から適切なノードを選択します。
-
-
メソッド 2:ワークフローパネルから作成
-
ナビゲーションツリーの Workflow 配下で、ステップ 1 で作成したワークフローを見つけます。
-
ワークフローをダブルクリックして、パネルを開きます。
-
パネルの左側のナビゲーションペインで、目的のノードをクリックするか、キャンバスにドラッグします。
-
-
-
ノードのエンジンインスタンス、名前、その他の設定を構成します。
このチュートリアルでは、ステップ 2 で作成した結果テーブルと同じ名前 (
result_table) の ODPS SQL ノードを作成します。説明DataWorks のノードを使用してデータ開発を行う場合は、開発ノードでデータをクレンジングし、結果を結果テーブルに格納します。ノードが結果テーブルに書き込むデータを見つけやすくするため、ノードには、出力先の結果テーブルと同じ名前を付けてください。
Data Studio パネルの [Common Nodes] セクションで、[ODPS SQL] ノードを右側のキャンバスにドラッグして作成します。
ステップ 4:ノードの編集
ワークフローのナビゲーションツリーまたはワークフローパネルで、ステップ 3 で作成したノードを見つけます。ノードをダブルクリックしてエディターを開きます。ノードタイプに基づいて、対応するデータベースの構文を使用してビジネスロジックを記述します。
このチュートリアルでは、 result_table ノードは、 bank_data テーブルの特定のパーティションから result_table テーブルの対応するパーティションにデータを書き込みます。ターゲットパーティションは、変数 day と hour を使用して定義されます。
-
コード開発中に、スケジューリングコンテキストでパラメーターを動的に置き換える必要がある場合は、
${your_variable_name}フォーマットを使用してコード内で変数を定義できます。その後、ステップ 5 でスケジュール設定を構成するときに、この変数に値を割り当てることができます。 -
スケジューリングパラメーターの詳細については、「スケジューリングパラメーターでサポートされているフォーマット」をご参照ください。
-
さまざまなノードタイプの開発構文の詳細については、「ノードの作成と使用」をご参照ください。
--@exclude_output=xc_DPE_E2.result_table
--@exclude_input=bank_data
--odps sql
--***********************************************************--
--作成者:xxx
--作成日時:2022-08-11 14:33:23
--***********************************************************--
INSERT OVERWRITE TABLE result_table partition (day='${day}', hour='${hour}')
SELECT education
, COUNT(marital) AS num
FROM bank_data
WHERE day='${day}' and hour='${hour}'
GROUP BY education;
次のコードは参考用です。
INSERT OVERWRITE TABLE result_table partition (day='${day}', hour='${hour}')
SELECT education
, COUNT(marital) AS num
FROM bank_data
WHERE day='${day}' and hour='${hour}'
GROUP BY education;
ステップ 5: スケジュール設定の構成
ノードを定期的に実行するために、スケジューリングプロパティを構成します。ノードエディターページで、右側のナビゲーションペインの Scheduling をクリックし、ビジネス要件に基づいてプロパティを構成します。
|
パラメーター |
説明 |
|
DataWorks は、ノードの名前、ID、タイプ、所有者を自動的に表示します。これらのプロパティは別途設定する必要はありません。 説明
|
|
|
ノードのスケジューリングに使用するパラメーターを定義します。 DataWorks には、タスクのスケジューリング時に動的にパラメーターを割り当てるための、組み込みパラメーターとカスタムパラメーターが用意されています。ステップ 4 でコード内に変数を定義した場合は、ここでその変数に値を割り当てることができます。 このチュートリアルでは、ステップ 4 の変数に値を割り当て、前日 (営業日) の
[スケジューリング] ペインの [パラメーター] セクションでこれらの設定を構成すると、スケジュール実行中に |
|
|
時間プロパティは、ノードの実行方法と実行タイミングを定義します。これらの設定を使用して、定期的なインスタンス生成、スケジューリングサイクル、実行時間、再実行、およびタスクを自動終了するためのタイムアウト期間などを構成します。 説明
このチュートリアルでは、 |
|
|
タスクを本番環境にデプロイしてスケジューリングする際に使用するスケジューリングリソースグループを構成します。このチュートリアルでは、DataWorks のアクティベーション時に提供されるデフォルトのサーバーレスリソースグループを使用します。詳細については、「サーバーレスリソースグループの使用」をご参照ください。 |
|
|
ノードのスケジューリングにおける上流および下流の依存関係を定義します。データリネージに基づいて依存関係を設定します。これにより、現在のノードは、必要なデータを生成する上流タスクが正常に完了した後にのみ実行され、上流テーブルのデータを正しくクエリできるようになります。 説明
このチュートリアルでは、現在のワークフロー外のタスクが |
|
|
上流ノードと下流ノード間でパラメーターを渡す方法を定義します。下流ノードは、この機能を使用して上流ノードから値を取得できます。 説明
この機能は通常、代入ノードまたは代入パラメーターと組み合わせて使用されます。
|
ステップ 6:コードのデバッグ
次の方法でコードのロジックをデバッグし、正しく動作することを確認できます。
|
方法 |
説明 |
推奨 |
|
選択したコードスニペットをすばやく実行します。 |
コードの一部をすばやく実行する必要がある場合は、この方法を使用します。 |
|
|
ツールバー:[実行] ( |
テスト実行用に、変数に定数値を割り当てます。 説明
新しいノードで初めて [実行] をクリックする場合は、ダイアログボックスでコード内の変数に定数値を手動で割り当てる必要があります。この割り当ては保存され、以降の実行では繰り返す必要はありません。 |
コード全体を頻繁にデバッグする必要がある場合は、この方法を使用します。 |
|
ツールバー:[詳細実行] ( |
テスト実行のたびに、変数に定数値を割り当てる必要があります。 |
テスト実行用の変数の割り当てを変更する必要がある場合は、この方法を使用します。 |
このチュートリアルでは、[詳細実行] を使用して 2022.09.07 14:00 の実行結果をテストします。[パラメーター] ダイアログボックスで、[スケジューリングリソースグループ](例:パブリックスケジューリングリソースグループ)を選択します。[カスタムパラメーター] セクションで、パラメーター値(例: day=20220907 と hour=14)を設定します。[OK] をクリックしてコードを実行します。実行ログに、実行が成功したことが表示されます。
ステップ 7:ノードの保存と提出
ノードを設定してテストした後、設定を保存し、ノードを開発環境に提出する必要があります。
ステップ 5 で Rerun attribute と Parent Nodes を設定した後にのみ、ノードを送信できます。
-
ツールバーの
アイコンをクリックして、ノード設定を保存します。 -
ツールバーの
アイコンをクリックして、ノードを開発環境に提出します。
ステップ 8:スモークテストの実行
本番タスクを効率的に実行し、コンピューティングリソースの無駄を避けるために、タスクをデプロイする前にスモークテストを実行します。スモークテストは開発環境で実行されるため、まずノードをその環境に提出する必要があります。提出後:
-
ツールバーの
アイコンをクリックし、スモークテスト ダイアログボックスで業務日付を設定します。 -
スモークテストが完了したら、ツールバーの
アイコンをクリックして、テスト結果を表示します。
このチュートリアルでは、スケジューリングパラメーターの設定が期待通りかどうかをテストします。result_table ノードは、00:00 から 23:59 まで 1 時間ごとに実行されるようにスケジュールされています。したがって、次の図の設定では、スケジュール実行時刻がそれぞれ 00:00 と 01:00 の 2 つの時間単位のインスタンスが生成されます。
-
インスタンスとは、周期的タスクがスケジュールに従って実行されるときに生成されるタスクのスナップショットです。
-
result_tableノードは時間単位のタスクとして設定されているため、スモークテストの業務日付を設定するだけでなく、実行するインスタンスの時間範囲も選択する必要があります。 -
スモークテストの詳細については、「スモークテストの実行」をご参照ください。
上部のツールバーにある [スモークテスト] (☑) アイコンをクリックします。表示されるスモークテスト パネルで、[業務日付] (例: 2022-09-01)、[開始時刻] (00:00)、および [終了時刻] (01:00) を設定します。
ステップ9:タスクのデプロイ
基本モードのワークスペースでは、タスクは提出後に定期的にスケジュールされます。標準モードのワークスペースでは、提出されたタスクは「デプロイ待ち」の状態になります。その後、タスクを本番環境にデプロイして、定期的なスケジューリングを有効にする必要があります。
-
DataWorks は、本番環境にデプロイされたタスクの自動スケジューリングのみをサポートします。スモークテストが成功したら、タスクを本番環境のスケジューリングシステムにデプロイして、定期的なスケジューリングを有効にする必要があります。
-
ワークスペースモード間の違いの詳細については、「ワークスペースモード間の違い」をご参照ください。
標準モードのワークスペースでは、Data Studio で提出したすべての変更 (ノード、リソース、関数の作成、更新、削除など) は、タスクデプロイメントページに送信され、デプロイ待ちになります。これらの変更を適用するには、 に移動し、デプロイメントパッケージを作成して、本番環境にリリースする必要があります。変更は、デプロイメントが成功した後にのみ有効になります。詳細については、「タスクのデプロイ」をご参照ください。
デプロイメントプロセスについて、次の表で説明します。
|
デプロイメントトピック |
説明 |
|
デプロイメントプロセスの制御 |
ロール権限とプロセス制御により、デプロイメント操作が制約されます。デプロイメントを実行した後、デプロイメントパッケージのステータスが「成功」であることを確認してください。 説明
|
|
デプロイメント有効化時刻の制御 |
日次インスタンス生成ウィンドウ ( 説明
この制限は、[Next Day] と [Immediately After Deployment] の両方のインスタンス生成モードに影響します。これらのモードの詳細については、「インスタンス生成モード」をご参照ください。 |
次のステップ
に移動して、本番環境にデプロイされたバッチスケジューリングタスクを表示し、関連する運用保守操作を実行できます。 詳細については、「定期タスクの基本的な運用保守」をご参照ください。