ODPS SQL ノードを使用すると、DataWorks 内で MaxCompute SQL タスクをスケジュール実行でき、同一ワークフロー内の他のノードタイプと連携して処理を構成できます。MaxCompute SQL は、SQL に類似した構文を用いて、分散環境における非リアルタイムのテラバイト規模データ処理を実現します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ODPS SQL ノードを作成済みであること。詳細については、「ODPS ノードの作成と管理」をご参照ください。
制限事項
| 制約 | 上限値 |
|---|---|
| ノードコードサイズ | 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); |
| 第2 | SET 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 ノードを活用した、さらに高度なユースケースについて探求してください。