DataWorks の MaxCompute SQL ノードを使用すると、MaxCompute SQL タスクを定期的にスケジューリングし、他のノードタイプと統合できます。MaxCompute SQL タスクは、使い慣れた SQL ライクな構文を使用し、リアルタイム性の高い要件がないシナリオでの大規模 (テラバイト規模) データの分散処理に最適です。このトピックでは、DataWorks で MaxCompute SQL ノードタスクを開発する方法について説明します。
はじめに
MaxCompute SQL は、MaxCompute 内のデータを処理およびクエリします。その SQL ライクなステートメントにより、複雑なコードを記述することなく、データのクエリと処理が可能です。SQL 構文の詳細については、「SQL の概要」をご参照ください。
前提条件
MaxCompute コンピューティングリソースが DataWorks ワークスペースにバインドされていること。
(オプション) RAM ユーザーを使用してタスク開発を行う場合、そのユーザーはワークスペースのメンバーであり、Development ロールまたは スペース管理者 ロールのいずれかを有している必要があります。ワークスペース管理者ロールには広範な権限が含まれているため、慎重に付与してください。ワークスペースにメンバーを追加する方法の詳細については、「ワークスペースにメンバーを追加する」をご参照ください。
説明Alibaba Cloud アカウントを使用している場合は、このステップをスキップできます。
制限事項
MaxCompute SQL ノードを使用して SQL タスクを開発する場合、以下の制限が適用されます。
カテゴリ | 説明 |
コメント |
詳細については、「MaxCompute SQL のコメント」をご参照ください。 コメントには以下の制限も適用されます。
|
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 SQL ノードの作成
手順については、「MaxCompute SQL ノードの作成」をご参照ください。
MaxCompute SQL ノードの開発
SQL コードの開発
DataWorks は、コード内の変数に動的に値を渡すためのスケジューリングパラメーターを提供します。MaxCompute SQL ノードでは、${variable_name} フォーマットを使用して変数を定義できます。その後、Scheduling Settings 構成ペインの Scheduling Parameters セクションで、それらの変数に値を割り当てることができます。スケジューリングパラメーターでサポートされているフォーマットの詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。MaxCompute SQL コマンドは標準 SQL 構文に似ており、データ定義言語 (DDL)、データ操作言語 (DML)、データクエリ言語 (DQL) 文、および MaxCompute 固有の構文をサポートしています。詳細な構文と例については、「SQL の概要」をご参照ください。
以下のセクションでは、さまざまなユースケースの例を示します。
MaxCompute 2.0 拡張関数で新しいデータ型を使用する場合は、SQL ステートメントの前に
SET odps.sql.type.system.odps2=true;を追加し、SQL ステートメントと一緒に実行のために送信する必要があります。これにより、新しいデータ型が正しく処理されるようになります。2.0 データ型の詳細については、「2.0 データ型バージョン」をご参照ください。MaxCompute SQL ステートメントの実行順序は、Data Studio とオペレーションセンターで異なります。詳細については、「付録:異なる環境での SQL 実行順序」をご参照ください。
テーブルの作成
CREATE TABLE ステートメントを使用して、非パーティションテーブル、パーティションテーブル、外部テーブル、およびクラスター化テーブルを作成できます。詳細については、「CREATE TABLE」をご参照ください。以下は SQL の例です。
-- 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ステートメントの使用を推奨します。詳細については、「データの挿入または上書き」をご参照ください。
以下の SQL コードは一例です。
-- データを挿入します。
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (1,'ZhangSan',15,DATE '2008-05-15') ;INSERT ステートメントは、DDL フィールドの比較機能をトリガーできます。これは、SELECT サブ句とターゲットテーブルのフィールド間の DDL 比較をチェックするために使用されます。
この機能は、MaxCompute プロジェクトで3層スキーマモデルが有効になっているが、テナントレベルモデルが有効になっていないシナリオではサポートされていません。

データのクエリ
SELECT ステートメントを使用して、ネストされたクエリ、グループ化クエリ、ソートなどの操作を実行できます。詳細については、「SELECT 構文」をご参照ください。以下は SQL の例です。
-- (オプション) プロジェクトレベルでフルテーブルスキャンを有効にします。この操作には高い権限が必要です。
-- 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 は、組み込み関数とユーザー定義関数 (UDF) を使用したデータ開発と分析をサポートしています。ビジネス要件に合わせて SQL 関数を作成して使用できます。組み込み関数の詳細については、「組み込み関数の概要」をご参照ください。UDF の詳細については、「MaxCompute UDF の概要」をご参照ください。以下の例では、SQL 関数の使用方法について説明します。
組み込み関数:組み込み関数は MaxCompute にプリインストールされており、直接呼び出すことができます。テーブルの作成、データの挿入、データのクエリの前の例に基づいて、
dateadd関数を使用して、birth列を指定された単位と量で変更できます。コマンドの例は次のとおりです。-- セッションレベルでフルテーブルスキャンを有効にします。これは現在のセッションでのみ有効です。 SET odps.sql.allow.fullscan=true; SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;ユーザー定義関数 (UDF):UDF を使用するには、関数コードを記述し、コードをリソースとしてアップロードし、関数を登録する必要があります。詳細については、「リソースの管理」をご参照ください。
MaxCompute SQL ノードのデバッグ
ノードエディターの右側にあるRun Configurationペインでパラメーターを設定します。
パラメーター
説明
コンピューティングリソース
バインドした MaxCompute コンピューティングリソースを選択します。
コンピューティングクォータ
作成したコンピューティングクォータを選択します。クォータは、コンピューティングジョブに必要な CPU やメモリなどのコンピューティングリソースを提供します。
使用可能なコンピューティングクォータがない場合は、ドロップダウンリストで[コンピューティングクォータの作成]をクリックしてMaxCompute コンソールに移動し、クォータを設定します。
リソースグループ
コンピューティングリソースとの接続テストに合格したスケジューリングリソースグループを選択します。詳細については、「ネットワーク接続ソリューション」をご参照ください。
ツールバーで、MaxCompute データソースを選択し、Run をクリックしてタスクを実行します。
結果の表示
DataWorks は実行結果をワークブックに表示します。そこから、結果をスプレッドシートで開いたり、コンテンツをローカルの Excel ファイルにコピーして貼り付けたりできます。
説明国際標準化機構 (ISO) がリリースした中国のタイムゾーン情報の調整により、DataWorks で関連する SQL ステートメントを実行すると、特定の期間で時刻の差が生じる場合があります。この差は、1900年から1928年までの日付と時刻で5分52秒、1900年より前の日付と時刻で9秒です。
実行ログを表示するには、実行結果の
タブで [LogView] リンクをクリックします。詳細については、「Logview 2.0 を使用してジョブ実行情報を表示する」をご参照ください。結果をソートするには、結果ページのフィールドのドロップダウン矢印をクリックし、Sort リストから昇順または降順を選択して、OK をクリックします。
次のステップ
ノードのスケジューリングを設定する:プロジェクト内のノードを定期的に実行するには、ノードエディターの右側にあるScheduling Settings ペインで Scheduling Policy を設定し、関連するスケジューリングプロパティを設定します。
ノードを公開する:本番環境でタスクを実行するには、
アイコンをクリックして公開プロセスを開始します。このプロセスにより、タスクが本番環境にデプロイされます。ノードは、本番環境に公開された後にのみ定期的に実行されるようにスケジューリングされます。
付録:異なる環境での SQL 実行順序
MaxCompute SQL ノード内の SET や USE などのキーワードを含むステートメントの実行順序は、DataWorks の環境によって異なります。
Data Studio で実行する場合:現在のタスクコード内の SET や USE などのすべてのキーワードステートメントがマージされ、他のすべての SQL ステートメントの前に実行されます。
スケジューリング環境で実行する場合:ステートメントは記述された順序で実行されます。
ノードで以下のコードが定義されていると仮定します。
SET a=b;
CREATE TABLE name1(id string);
SET c=d;
CREATE TABLE name2(id string);異なる環境での実行順序は次のとおりです。
SQL ステートメント | Data Studio | スケジューリングと運用保守 (O&M) |
最初の SQL ステートメント | | |
2番目の SQL ステートメント | | |
関連ドキュメント
MaxCompute SQL タスクのその他の例については、以下のトピックをご参照ください。