すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:MaxCompute SQLタスクの開発

最終更新日:Jan 08, 2025

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文

SET a=b;
SET c=d;
CREATE TABLE name1(id string);
SET a=b;
CREATE TABLE name1(id string);

2番目のSQL文

SET a=b;
SET c=d;
CREATE TABLE name2(id string);
SET c=d;
CREATE TABLE name2(id string);

単純なコード編集の例

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    |
      +------------+------------+------------+------------+---------------+

    [結果] タブでは、特定のフィールドで結果データを並べ替えたり、結果データのダウンロードなどの操作を実行したりできます。 詳細については、「プロセスクエリ結果」をご参照ください。

高度なコード編集の例

詳細については、以下のトピックをご参照ください。