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

DataWorks:MaxCompute SQL タスクを開発する

最終更新日:May 13, 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 の結果データを返すことができます

注意事項

  • MaxCompute SQL タスクを実行するために使用するアカウントに、関連する MaxCompute プロジェクトに対する権限があることを確認する必要があります。 詳細については、「DataWorks での MaxCompute タスクの開発に関する使用上の注意」および「MaxCompute の権限」をご参照ください。

  • MaxCompute SQL タスクを実行するには、計算リソースクォータが必要です。 MaxCompute SQL タスクが長時間実行される場合は、MaxCompute コンソールにログインして、クォータのリソース消費量を確認できます。 MaxCompute SQL タスクを実行するために十分なリソースが使用可能であることを確認する必要があります。 詳細については、「MaxCompute コンソールで計算リソースのクォータを管理する」をご参照ください。

  • OSS エンドポイントを指定するために使用されるパラメーターなど、特別なパラメーターが関係するタスクを ODPS SQL ノードに基づいて開発する場合は、パラメーターを二重引用符 (") で囲む必要があります。そうしないと、解析エラーが発生し、ODPS SQL ノードのタスクが失敗します。

  • 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 の追加機能に新しいデータ型を使用する場合は、関数の前に SET odps.sql.type.system.odps2=true; を追加し、SET 文と SQL 文をまとめてコミットして実行する必要があります。 MaxCompute V2.0 のデータ型の詳細については、「MaxCompute V2.0 データ型エディション」をご参照ください。

  • DataWorks はスケジューリングパラメーターを提供します。 ODPS SQL ノードのコードでパラメーターを動的に渡せるようにするには、${変数名} 形式でノードコードに変数を定義し、ODPS SQL ノードの構成タブにある [プロパティ] タブの [スケジューリングパラメーター] セクションで、変数にパラメーターを値として割り当てます。 サポートされているスケジューリングパラメーターの形式については、「サポートされているスケジューリングパラメーターの形式」をご参照ください。

  • テーブルを作成する

    CREATE TABLE 文を実行して、非パーティションテーブル、パーティションテーブル、外部テーブル、またはクラスタテーブルを作成できます。 詳細については、「CREATE TABLE」をご参照ください。 SQL 文の例:

    -- 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 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 文の例:

    -- 全表スキャン機能を有効にします。これは現在のセッションでのみ有効です。
    SET odps.sql.allow.fullscan=true; 
    
    -- すべての男子生徒に関する情報をクエリし、ID で昇順にソートします。
    SELECT * FROM students WHERE gender='boy' ORDER BY id;
    説明

    デフォルトでは、RAM ユーザーには、本番環境で MaxCompute テーブルをクエリするために必要な権限がありません。 本番環境で RAM ユーザーとして MaxCompute テーブルをクエリする場合は、DataWorks コンソールのセキュリティセンターで RAM ユーザーに必要な権限をリクエストする必要があります。 ビルトインのワークスペースレベルのロールの MaxCompute データに対する権限と、権限の管理方法については、「MaxCompute コンピュートエンジンインスタンスのデータに対する権限を管理する」をご参照ください。 コマンドを実行してユーザーに権限を付与する方法については、「コマンドを使用してユーザー権限を管理する」をご参照ください。

SQL 関数

MaxCompute では、データの開発と分析にビルトイン関数とユーザー定義関数 (UDF) を使用できます。 ビルトイン関数の詳細については、「ビルトイン関数の概要」をご参照ください。 UDF の詳細については、「UDF の概要」をご参照ください。 次の例は、SQL 関数を使用する方法を示しています。

  • ビルトイン関数

    MaxCompute は多数のビルトイン関数を提供しています。 ビルトイン関数は直接呼び出すことができます。 前のセクションの例に基づいて、dateadd 関数を使用して、birth 列のデータを指定された単位と指定された間隔で変更できます。 SQL 文の例:

    -- 全表スキャン機能を有効にします。これは現在のセッションでのみ有効です。
    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 + 08:00 タイムゾーンの調整のため、DataWorks で関連 SQL 文を実行すると、実際の時刻と出力時刻に差が生じます。 1900 年から 1928 年までは、時差は 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        |
      +------------+------------+------------+------------+------------+
    • 手順

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

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

高度なコード編集例

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

よくある質問

  • Q: MaxCompute SQL タスクが長時間実行されるのはなぜですか?

    A: MaxCompute SQL タスクを実行するには、計算リソースクォータが必要です。 MaxCompute SQL タスクが長時間実行される場合は、MaxCompute コンソールにログインして、クォータのリソース消費量を確認できます。 MaxCompute SQL タスクを実行するために十分なリソースが使用可能であることを確認する必要があります。 詳細については、「MaxCompute コンソールで計算リソースのクォータを管理する」をご参照ください。

  • Q: MaxCompute SQL タスクを実行すると、「xxxx に対する権限 'odps:xxxx' がありません」というエラーメッセージが表示されます。 どうすればよいですか?

  • A: MaxCompute SQL タスクを実行するために使用するアカウントに、関連する MaxCompute プロジェクトに対する権限があることを確認する必要があります。 詳細については、「MaxCompute の権限」をご参照ください。