DataWorks の MaxCompute SQL ノードを使用すると、MaxCompute SQL タスクを定期的にスケジュールできます。このノードを他のノードタイプと統合して、複合的なスケジューリングを行うことができます。MaxCompute SQL タスクは SQL に似た構文を使用し、高いリアルタイム性能を必要としないシナリオでの大量データ (テラバイト規模) の分散処理に最適です。このトピックでは、DataWorks で MaxCompute SQL ノードタスクを開発する方法について説明します。
はじめに
MaxCompute SQL は、MaxCompute 内のデータを処理およびクエリするために使用されます。SELECT、INSERT、UPDATE、DELETE などの一般的な SQL 操作に加えて、MaxCompute 固有の構文と関数をサポートしています。これにより、複雑なデータ処理ロジックを記述することなく、SQL に似た文を記述してデータをクエリおよび処理できます。SQL 構文の詳細については、「SQL の概要」をご参照ください。
前提条件
MaxCompute コンピューティングリソースがDataWorks ワークスペースにアタッチされていること。
(オプション) Resource Access Management (RAM) ユーザーの場合、[開発] または [ワークスペース管理者] ロールを持つワークスペースのメンバーである必要があります。ワークスペース管理者ロールには広範な権限が含まれているため、慎重に付与する必要があります。ワークスペースへのメンバー追加の詳細については、「ワークスペースにメンバーを追加する」をご参照ください。
説明Alibaba Cloud アカウントを使用している場合は、このステップをスキップできます。
制限事項
MaxCompute SQL ノードを使用する場合、以下の制限が適用されます。
カテゴリ | 説明 |
コメント |
詳細については、「MaxCompute SQL のコメント」をご参照ください。 コメントには以下の制限も適用されます。
|
SQL の送信 | ODPS SQL では、SET または USE のみを含む文を実行することはできません。これらのキーワードは、特定の SQL 文と一緒に使用する必要があります。 |
SQL 開発 | SQL コードのサイズは 128 KB を超えることはできず、SQL コマンドの数は 200 を超えることはできません。 |
クエリ結果 | SELECT または WITH で始まる SQL 文のみが、フォーマットされた結果セットを出力できます。 クエリ結果には以下の制限が適用されます。
説明 これらの制限に遭遇した場合は、以下のいずれかの方法でクエリ結果をローカルコンピューターにダウンロードして表示できます。
|
注意事項
MaxCompute SQL タスクを実行するために使用するアカウントが、対応する MaxCompute プロジェクトに対して必要な権限を持っていることを確認してください。詳細については、「DataWorks on MaxCompute のアクセス制御」および「MaxCompute の権限」をご参照ください。
MaxCompute SQL タスクの実行はクォータリソースに依存します。タスクの実行時間が長い場合は、MaxCompute コンソールに移動してクォータの消費量を確認し、タスクを実行するための十分なリソースが利用可能であることを確認してください。詳細については、「コンピューティングリソース - クォータ管理」をご参照ください。
MaxCompute SQL ノードタスクを開発する際に、タスクに OSS アドレスなどの特殊なパラメーターが含まれる場合は、それらを二重引用符 ("") で囲む必要があります。そうしないと、タスクの解析と実行に失敗する可能性があります。
SET や USE などのキーワードを含む文の実行順序は、DataWorks の環境によって異なります。詳細については、「付録:異なる環境での SQL 実行順序」をご参照ください。
サーバーの異常な電源断やプライマリ/セカンダリの切り替えなど、一部の極端なケースでは、DataWorks が MaxCompute の関連タスクプロセスを完全に終了できない場合があります。この場合、目的の MaxCompute コンピューティングリソースに対応する MaxCompute プロジェクトに移動してタスクを終了してください。
MaxCompute SQL ノードの作成
MaxCompute SQL ノードの作成方法については、「MaxCompute SQL ノードの作成」をご参照ください。
MaxCompute SQL ノードの開発
ノード編集ページで、以下の手順に従ってノードを開発します。
SQL コードの開発
DataWorks は、コード内の変数に動的に値を渡すことができるスケジューリングパラメーターを提供します。MaxCompute SQL ノードでは、${variable_name} 形式で変数を定義できます。その後、スケジュール タブの スケジューリングパラメーター セクションで変数に値を割り当てることができます。サポートされているスケジューリングパラメーターのフォーマットの詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。MaxCompute SQL コマンドは標準の SQL 構文に似ています。データ定義言語 (DDL)、データ操作言語 (DML)、データクエリ言語 (DQL) の文、および MaxCompute 固有の構文をサポートしています。構文と例の詳細については、「SQL の概要」をご参照ください。
以下のセクションでは、さまざまなシナリオの例を示します。
MaxCompute V2.0 拡張関数で新しいデータ型を使用する場合は、関数の SQL 文の前に
SET odps.sql.type.system.odps2=true;を追加し、それらを一緒に実行する必要があります。これにより、新しいデータ型が使用できるようになります。MaxCompute V2.0 のデータ型の詳細については、「データ型のエディション」をご参照ください。MaxCompute SQL 文の実行順序は、
DataStudio とオペレーションセンターで異なります。詳細については、「付録:異なる環境での SQL 実行順序」をご参照ください。
テーブルの作成
CREATE TABLE 文を使用して、非パーティションテーブル、パーティションテーブル、外部テーブル、およびクラスター化テーブルを作成できます。詳細については、「CREATE TABLE」をご参照ください。以下のコードは例です。
-- students という名前のパーティションテーブルを作成します。
CREATE TABLE IF NOT EXISTS students
( id BIGINT,
name STRING,
age BIGINT,
birth DATE)
partitioned BY (gender STRING); データの挿入
INSERT INTO または INSERT OVERWRITE 文を使用して、宛先テーブルのデータを挿入または更新できます。詳細については、「データの挿入または上書き (INSERT INTO | INSERT OVERWRITE)」をご参照ください。
予期しないデータの重複を防ぐために、INSERT INTOの代わりにINSERT OVERWRITEを使用してください。詳細については、「データの挿入または上書き」をご参照ください。
以下のコードは例です。
-- データを挿入します。
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (1,'ZhangSan',15,DATE '2008-05-15') ;INSERT 文は、DDL フィールドの比較 機能をトリガーできます。この機能は、SELECT 句のフィールドと宛先テーブルのフィールドをチェックして比較します。
この機能は、MaxCompute プロジェクトでレイヤー 3 スキーマモデルが有効になっているが、テナントでは有効になっていない場合はサポートされません。

データのクエリ
SELECT 文を使用して、ネストされたクエリ、グループクエリ、ソートなどの操作を実行できます。詳細については、「SELECT 構文」をご参照ください。以下のコードは例です。
-- (任意) プロジェクトレベルで全表スキャンを有効にします。この操作には高い権限が必要です。
-- SETPROJECT odps.sql.allow.fullscan=true;
-- セッションレベルで全表スキャンを有効にします。これは現在のセッションでのみ有効です。
SET odps.sql.allow.fullscan=true;
-- すべての男子学生の情報をクエリし、ID の昇順でソートします。
SELECT * FROM students WHERE gender='boy' ORDER BY id;デフォルトでは、RAM ユーザーは本番テーブルからデータをクエリする権限を持っていません。本番テーブルからデータをクエリするには、セキュリティセンターで必要な権限を申請する必要があります。DataWorks における MaxCompute のプリセットデータ権限とアクセス制御の詳細については、「MaxCompute のデータ権限制御の詳細」をご参照ください。MaxCompute でコマンドを使用して権限を付与する方法の詳細については、「コマンドを使用したユーザー権限の管理」をご参照ください。
SQL 関数の使用
MaxCompute は、データ開発と分析のためのビルトイン関数とユーザー定義関数 (UDFs) をサポートしています。必要に応じて SQL 関数を作成して使用できます。ビルトイン関数の詳細については、「ビルトイン関数」をご参照ください。UDFs の詳細については、「MaxCompute UDFs」をご参照ください。以下の例では、SQL 関数の使用方法について説明します。
ビルトイン関数:MaxCompute は、直接呼び出すことができるビルトイン関数を提供します。上記の例に基づいて、次のコマンドは
dateadd関数を使用して、指定された時間間隔を追加することでbirth列の値を変更します。-- セッションレベルで全表スキャンを有効にします。現在のセッションでのみ有効です。 SET odps.sql.allow.fullscan=true; SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;ユーザー定義関数 (UDFs):UDF を使用するには、関数コードを記述し、コードをリソースとしてアップロードし、関数を登録する必要があります。詳細については、「Resource Management」をご参照ください。
MaxCompute SQL ノードのデバッグ
ノード編集ページの右側で、デバッグ設定 セクションでパラメーターを設定します。
パラメーター
説明
コンピューティングリソース
アタッチした MaxCompute コンピューティングリソースを選択します。
コンピューティングクォータ
作成したクォータを選択します。クォータは、コンピューティングジョブに必要なコンピューティングリソース (CPU とメモリ) を提供します。
利用可能なコンピューティングクォータがない場合は、ドロップダウンリストの コンピューティングクォータの作成 をクリックして MaxCompute コンソールに移動し、クォータを設定します。
リソースグループ
コンピューティングリソースとの接続性テストに合格したスケジューリングリソースグループを選択します。詳細については、「ネットワーク接続ソリューション」をご参照ください。
ツールバーのパラメーターダイアログボックスで、作成した MaxCompute データソースを選択し、実行 をクリックして MaxCompute SQL タスクを実行します。
結果の表示
実行結果はワークブックに表示されます。ワークブックで結果を開いたり、DataWorks で他の操作を実行したり、コンテンツをローカルの Excel ファイルにコピーして貼り付けたりできます。
説明国際標準化機構がリリースした中国のタイムゾーン情報の調整により、DataWorks で関連する SQL 文を実行すると、特定の期間で時刻の差が生じることがあります。この差は、1900 年から 1928 年までの日付と時刻で 5 分 52 秒、1900 年以前の日付と時刻で 9 秒です。
実行ログを表示するには、実行結果の
タブにある [LogView] リンクをクリックします。詳細については、「Logview V2.0 を使用してジョブ実行情報を表示する」をご参照ください。結果ページで結果をソートするには、フィールドのドロップダウン矢印をクリックし、ソート リストから昇順または降順を選択し、OK をクリックします。
次のステップ
ノードのスケジュール:プロジェクトフォルダ内のノードをスケジュールするには、スケジューリングポリシー を設定し、ノードの右側にある スケジュール セクションでそのスケジューリングプロパティを設定します。
ノードの公開:タスクを本番環境で実行する必要がある場合は、
アイコンをクリックしてタスクを本番環境に公開します。プロジェクトフォルダ内のノードは、本番環境に公開された後にのみスケジュールで実行できます。
付録:異なる環境での SQL 実行順序
MaxCompute SQL ノード内の SET や USE などのキーワードを含む文の実行順序は、DataWorks の実行環境によって異なります。
DataStudio の場合:現在のタスクコード内で SET や USE などのキーワードを含むすべての文がマージされ、他のすべての SQL 文の前に実行されます。
スケジューリング環境の場合:文は記述された順序で実行されます。
ノードに次のコードが定義されていると仮定します。
SET a=b;
CREATE TABLE name1(id string);
SET c=d;
CREATE TABLE name2(id string);異なる環境での実行順序は次のとおりです。
実行する SQL 文 | DataStudio | スケジューリング O&M |
最初の SQL 文 | | |
2 番目の SQL 文 | | |
参考
MaxCompute SQL タスクのその他の例については、次のトピックをご参照ください。