DataWorksはODPS SQLノードを提供するため、MaxCompute SQLタスクを定期的にスケジュールし、ODPS SQLノードを他のタイプのノードと統合して、ノードを共同でスケジュールできます。 MaxCompute SQLタスクは、SQLのような構文を使用して、リアルタイム処理を必要としない分散シナリオでテラバイトのデータを処理できます。 このトピックでは、DataWorksでのMaxCompute SQLタスクの開発に関する注意事項とガイダンスについて説明します。
前提条件
ODPS SQLノードが作成されます。 詳細については、「ODPSノードの作成と管理」をご参照ください。
背景情報
MaxCompute SQLは、MaxComputeのデータを処理およびクエリするために使用されます。 MaxCompute SQLは、SELECT、INSERT、UPDATE、DELETEステートメントなどの一般的なSQLステートメント、および特定のMaxCompute構文と関数をサポートしています。 MaxCompute SQLを使用すると、複雑なデータ処理ロジックを記述する必要なく、SQLのようなステートメントを記述してデータをクエリおよび処理できます。 SQL構文の詳細については、「MaxCompute SQLの概要」をご参照ください。
制限事項
次の表に、DataWorksでのMaxCompute SQLタスクの開発に関する制限を示します。
項目 | 説明 |
コメントの使用 | SETまたはUSEステートメントにコメントを個別に追加することはできません。 |
コメントにセミコロン (;) を使用することはできません。 | |
完全なステートメントの末尾にコメントを追加することはできません。 SQL文の最後にセミコロン (;) が追加された場合、SQL文は完了したと見なされます。 | |
SQL文の実行 | ODPS SQLノードのコードでSETステートメントまたはuseステートメントを個別に使用することはできません。 他のSQL文で実行する必要があります。 |
SQL開発 | ODPS SQLノードのコードは、128 KBを超えるか、200以上のSQL文を含むことはできません。 |
クエリ結果 | SELECTまたはwithで始まるステートメントのみを使用して、フォーマットされた結果セットを返すことができます。 最大10,000行の結果データを表示でき、最大10 MBの結果データを返すことができます。 |
注意事項
ODPS SQLノードのコードでSETステートメントとUSEステートメントが実行される順序は、DataWorksの環境によって異なります。
DataStudio: SETステートメントとUSEステートメントはノードコードで結合され、他のSQLステートメントを実行する前に実行されます。
スケジューリング環境: すべてのステートメントが順番に実行されます。
ODPS SQLノードで定義されているサンプルコード:
SET a=b;
CREATE TABLE name1(id string);
SET c=d;
CREATE TABLE name2(id string);次の表に、上記のステートメントをさまざまな環境で実行する手順を示します。
SQL文 | DataStudio | スケジューリング環境 |
最初のSQL文 | | |
2番目のSQL文 | | |
単純なコード編集の例
SQL文
MaxCompute SQL構文は、標準のSQL構文に似ています。 DDL、DML、およびDQLステートメントとMaxCompute固有のステートメントがサポートされています。 各SQL文の構文要件と使用例については、「MaxCompute SQLの概要」をご参照ください。 次の例は、SQL文の記述と実行方法を示しています。
MaxCompute V2.0の追加関数に新しいデータ型を使用する場合は、関数を使用するsql文の前に
SET odps. SQL. type.system.odps2=true;を追加し、SET文をSQL文と一緒にコミットして実行する必要があります。 MaxCompute V2.0のデータ型の詳細については、「MaxCompute V2.0データ型エディション」をご参照ください。DataWorksはスケジューリングパラメーターを提供します。 ODPS SQLノードのコードでパラメーターを動的に渡すことができるようにするには、
${Variable name}形式のノードコードで変数を定義し、ODPS SQLノードの設定タブの [プロパティ] タブの [スケジューリングパラメーター] セクションで変数にパラメーターを値として割り当てます。 サポートされているスケジューリングパラメーターの形式については、「サポートされているスケジューリングパラメーターの形式」をご参照ください。
テーブルの作成
CREATE TABLEステートメントを実行して、非パーティションテーブル、パーティションテーブル、外部テーブル、またはクラスタ化テーブルを作成できます。 詳細については、「CREATE TABLE」をご参照ください。 サンプルSQL文:-- Create a partitioned table named test1. 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) 」をご参照ください。 サンプルSQL文:-- Insert data. INSERT INTO students PARTITION(gender='boy') VALUES (1,'John',15,DATE '2008-05-15') ; INSERT INTO students PARTITION(gender='boy') VALUES (2,'Jack',17,DATE '2006-07-20') ; INSERT INTO students PARTITION(gender='girl') VALUES (3,'Alice',20,DATE '2003-04-20') ; INSERT INTO students PARTITION(gender='girl') VALUES (4,'Lily',21,DATE '2002-01-08') ; INSERT INTO students PARTITION(gender='boy') VALUES (5,'Bob',17,DATE '2006-09-12') ;重要INSERT INTO文により、予期しないデータの重複が発生する可能性があります。 INSERT INTOステートメントの代わりに、INSERT OVERWRITEステートメントを実行することを推奨します。 詳細については、「テーブルまたは静的パーティションにデータを挿入または上書きする (Insert intoおよびINSERT overwrite) 」をご参照ください。クエリデータ
SELECTステートメントを実行して、ネストされたクエリ、並べ替え、グループごとのクエリなどの操作を実行できます。 詳細については、「SELECT構文」をご参照ください。 サンプルSQL文:-- Enable the full table scan feature, which is valid only for the current session. SET odps.sql.allow.fullscan=true; -- Query the information about all boys and sort the information by ID in ascending order. SELECT * FROM students WHERE gender='boy' ORDER BY id;説明デフォルトでは、RAMユーザーは本番環境でMaxComputeテーブルを照会するために必要な権限を持っていません。 本番環境のMaxComputeテーブルをRAMユーザーとして照会する場合は、DataWorksコンソールのSecurity CenterでRAMユーザーに必要な権限を要求する必要があります。 MaxComputeデータに対する組み込みのワークスペースレベルのロールの権限と権限の管理方法については、「MaxCompute計算エンジンインスタンスのデータに対する権限の管理」をご参照ください。 コマンドを実行してユーザーに権限を付与する方法については、「コマンドを使用したユーザー権限の管理」をご参照ください。
SQL関数
MaxComputeでは、データの開発と分析に組み込み関数とユーザー定義関数 (UDF) を使用できます。 組み込み関数の詳細については、「組み込み関数の概要」をご参照ください。 UDFの詳細については、「UDFの概要」をご参照ください。 次の例は、SQL関数の使用方法を示しています。
組み込み関数
MaxComputeは、多数の組み込み関数を提供します。 組み込み関数を直接呼び出すことができます。
dateadd関数を使用して、前のセクションの例に基づいて、birth列のデータを指定された単位と指定された間隔で変更できます。 サンプルSQL文:-- Enable the full table scan feature, which is valid only for the current session. SET odps.sql.allow.fullscan=true; SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;UDF
UDFを使用するには、コードを記述し、コードをリソースとしてアップロードし、関数を登録する必要があります。 詳細については、「MaxCompute UDFの作成と使用」をご参照ください。
実行結果と返されるデータ
実行結果はワークブックに表示されます。 DataWorksで実行結果に対して操作を実行したり、ブックで実行結果を表示または管理したり、オンプレミスマシン上のExcelファイルに実行結果をコピーしたりできます。 詳細については、「デバッグ手順」をご参照ください。
説明国際標準化機構 (ISO) によるUTC + 8タイムゾーンの調整により、DataWorksで関連するSQL文を実行するときの実際の時間と出力時間には違いがあります。 1900年から1928年までの1年間で、時差は352秒です。 1900 年より前の時間差は 9 秒です。
操作ログ: [ランタイムログ] タブをクリックすると、LogViewで操作ログを表示できます。 詳細については、「LogView V2.0を使用したジョブ情報の表示」をご参照ください。
返されるデータ:
すべての男の子に関する情報を照会し、IDで昇順に情報を並べ替えます。
+------------+------------+------------+------------+------------+ | id | name | age | birth | gender | +------------+------------+------------+------------+------------+ | 1 | John | 15 | 2008-05-15 | boy | | 2 | Jack | 17 | 2006-07-20 | boy | | 5 | Bob | 17 | 2006-09-12 | boy | +------------+------------+------------+------------+------------+birth列のデータを指定した単位と間隔で変更します。
+------------+------------+------------+------------+---------------+ | id | name | age | birth | birth_dateadd | +------------+------------+------------+------------+---------------+ | 4 | Lily | 21 | 2002-01-08 | 2002-02-08 | | 3 | Alice | 20 | 2003-04-20 | 2003-05-20 | | 2 | Jack | 17 | 2006-07-20 | 2006-08-20 | | 1 | John | 15 | 2008-05-15 | 2008-06-15 | | 5 | Bob | 17 | 2006-09-12 | 2006-10-12 | +------------+------------+------------+------------+---------------+
[結果] タブでは、特定のフィールドで結果データを並べ替えたり、結果データのダウンロードなどの操作を実行したりできます。 詳細については、「プロセスクエリ結果」をご参照ください。
高度なコード編集の例
詳細については、以下のトピックをご参照ください。