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

MaxCompute:ODPS SQL ノードの開発

最終更新日:Mar 26, 2026

ODPS SQL ノードを使用すると、DataWorks 内で MaxCompute SQL タスクをスケジュール実行でき、同一ワークフロー内の他のノードタイプと連携して処理を構成できます。MaxCompute SQL は、SQL に類似した構文を用いて、分散環境における非リアルタイムのテラバイト規模データ処理を実現します。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

制限事項

制約上限値
ノードコードサイズ128 KB
ノードあたりの SQL ステートメント数200
表示されるクエリ結果の行数10,000
返却されたクエリ結果データ10 MB

コメントに関する制限:

  • SET 文または USE 文を単独でコメント化しないでください。

  • コメント内にセミコロン (;) を使用しないでください。

  • 完全な SQL ステートメントの末尾にコメントを追加しないでください。セミコロンはステートメントの終了を示します。

SET 文および USE 文に関する制限:

  • ODPS SQL ノード内で SET 文または USE 文を単独で使用しないでください。他の SQL ステートメントとともに実行してください。

  • フォーマットされた結果セットを返すのは、SELECT 文または WITH 文のみです。

SET 文および USE 文の実行方法

SET 文および USE 文の動作は、実行環境によって異なります。

サンプルノードコード:

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

次の表は、各環境におけるこれらのステートメントのグループ化および実行順序を示しています。

SQL ステートメントDataStudioスケジューリング環境
最初SET a=b; SET c=d; CREATE TABLE name1(id STRING);SET a=b; CREATE TABLE name1(id STRING);
第2SET a=b; SET c=d; CREATE TABLE name2(id STRING);SET c=d; CREATE TABLE name2(id STRING);
  • DataStudio:ノード内のすべての SET 文および USE 文が、他の任意の SQL ステートメントより先にまとめて実行されます。

  • スケジューリング環境:すべてのステートメントが記述順に逐次実行されます。

SQL ステートメントの記述

MaxCompute SQL では、DDL、DML、DQL ステートメントに加え、MaxCompute 固有の構文がサポートされています。SELECT、INSERT、UPDATE、DELETE などの一般的な SQL ステートメントも利用可能です。構文の全般については、「MaxCompute SQL の概要」をご参照ください。

テーブルの作成

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

-- パーティションテーブルを作成します。
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 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 OVERWRITE を使用すると、既存のパーティションデータを置き換えることができます。

データのクエリ

SELECT を使用して、ネストクエリ、ソート、集計クエリを実行できます。構文の詳細については、「SELECT 構文」をご参照ください。

-- このセッションで全表スキャンを有効化します。
SET odps.sql.allow.fullscan=true;

-- 'boy' パーティション内のすべての学生を ID 順にクエリします。
SELECT * FROM students WHERE gender='boy' ORDER BY id;
RAM ユーザーはデフォルトで、本番環境の MaxCompute テーブルをクエリする権限を持っていません。アクセス権限を付与するには、DataWorks コンソールの Security Center(セキュリティセンター)で必要な権限をリクエストしてください。詳細については、「MaxCompute コンピュートエンジンインスタンスにおけるデータの権限管理」および「コマンドによるユーザー権限の管理」をご参照ください。

スケジューリングパラメーターの使用

ノードコードにランタイム時に動的な値を渡すには、${変数名} の形式で変数を定義し、その後、スケジューリングパラメーター セクションの プロパティ タブで値を割り当てます。サポートされる形式については、「スケジューリングパラメーターのサポート形式」をご参照ください。

MaxCompute V2.0 データ型の使用

SQL で MaxCompute V2.0 データ型に依存する関数を使用する場合は、それらのステートメントの前に SET odps.sql.type.system.odps2=true; を追加し、両方をまとめて送信してください。詳細については、「MaxCompute V2.0 データ型エディション」をご参照ください。

SQL 関数の使用

MaxCompute では、データ処理および分析向けにビルトイン関数およびユーザー定義関数(UDF)がサポートされています。

ビルトイン関数

ビルトイン関数は、特別な設定なしに直接呼び出すことができます。次の例では、dateadd 関数を使用して、birth 列の各値に 1 ヶ月を加算しています。

-- このセッションで全表スキャンを有効化します。
SET odps.sql.allow.fullscan=true;

SELECT id, name, age, birth, dateadd(birth, 1, 'mm') AS birth_dateadd
FROM students;

ビルトイン関数の一覧については、「ビルトイン関数の概要」をご参照ください。

ユーザー定義関数(UDF)

UDF を使用するには、関数コードを作成し、リソースとしてアップロードした後、関数を登録します。手順については、「MaxCompute UDF の作成と使用」をご参照ください。

実行結果およびログの表示

クエリを実行した後、結果はワークブックに表示されます。最大で 10,000 行および 10 MB の結果データが返されます。

サンプル出力 — ID 順にソートされた 'boy' パーティション内の学生:

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

サンプル出力 — `dateadd` を適用した 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    |
+----+-------+-----+------------+---------------+

結果 タブでは、列ごとに結果を並べ替えたり、ダウンロードしたりできます。詳細については、「クエリ結果の処理」をご参照ください。

操作ログを表示するには、実行時ログ タブをクリックします。ログは LogView で開きます。詳細については、「LogView V2.0 を使用したジョブ情報の表示」をご参照ください。

国際標準化機構(ISO)による UTC + 08:00 タイムゾーンの調整により、1900 年から 1928 年までの年份のタイムスタンプは実際の時刻より 352 秒ずれ、1900 年以前のタイムスタンプは 9 秒ずれます。

次のステップ

ODPS SQL ノードを活用した、さらに高度なユースケースについて探求してください。