MaxCompute は、ほとんどのデータ処理要件をカバーする幅広いビルトイン関数を提供します。このページでは、利用可能な関数タイプと、すべてのビルトイン関数に適用される注意事項について説明します。
関数タイプ
MaxCompute のビルトイン関数は、大きく分けて 3 つのカテゴリに分類されます。
スカラー関数 — 単一の行に対して操作を行い、呼び出しごとに 1 つの値を返します。これには、日付と時刻、数学、文字列、暗号化、ネットワーク、ARRAY、MAP、STRUCT、JSON、および非構造化データ処理関数が含まれます。
集計関数 — 複数の入力行を受け取り、単一の出力値を返します。
ウィンドウ関数 — 定義されたウィンドウ列内の行のサブセットに対して操作を行い、行ごとに 1 つの値を返します。
MaxCompute のビルトイン関数と、同等のオープンソース関数とのマッピングについては、「MaxCompute、Hive、MySQL、Oracle のビルトイン関数のマッピング」をご参照ください。
関数タイプ | 説明 |
DATE、DATETIME、TIMESTAMP データを操作します。日付の加算または減算、差の計算、フィールドの抽出、フォーマットの変換などを行います。 | |
BIGINT、DOUBLE、DECIMAL、FLOAT データに対して数値演算を実行します。基数変換、数値の丸め、乱数の生成などを行います。 | |
指定されたウィンドウ列内で、集約、ランキング、オフセット、サンプルの計算を行います。 | |
複数の入力レコードを単一の出力値に集約します。合計、平均、最小/最大、集約パラメーター、文字列連結などを行います。 | |
重複を削除し、最小限のメモリを使用して大規模なデータセットに対するクエリを高速化する、近似集計関数です。 | |
STRING データを操作します。切り捨て、置換、検索、大文字/小文字の変更、フォーマットの変換などを行います。詳細については、「文字列関数の使用制限」をご参照ください。 | |
ARRAY データを操作します。配列の構築、重複排除、集約、ソート、マージなどを行います。 | |
MAP データを操作します。キーと値のペアの抽出、マップの構築、マップのマージなどを行います。 | |
STRUCT データを操作します。STRUCT 配列の展開や構造体の構築などを行います。 | |
JSON データを操作します。フィールド値の抽出、オブジェクトや配列の生成、データの挿入や更新、複雑なデータ構造の処理などを行います。詳細については、「JSON 関数の使用制限」をご参照ください。 | |
STRING および BINARY 型のテーブルデータを暗号化および復号します。 | |
ネットワーク関連の STRING および BINARY データを処理します。IP アドレスのフォーマット変換、URL の解析、ネットワークマスクの取得などを行います。 | |
データウェアハウスやデータレイクに保存されている非構造化データとそのメタデータに、複数の方法で接続します。 | |
GEOGRAPHY 型の地理空間データを構築、変換、分析するために使用されます。これらの関数を使用すると、緯度/経度座標や WKT/WKB テキストからポイント、ライン、ポリゴンなどの地理オブジェクトを作成したり、座標やバウンディングボックスなどのプロパティを抽出したり、包含、交差、カバー率などの地理オブジェクト間の空間的関係を判断したり、地理オブジェクト間の距離を計算したりできます。 | |
その他のさまざまなビジネスシナリオに対応する追加の関数です。 | |
VECTOR データ型の処理をサポートし、ベクトル距離計算やベクトル検索を実行します。セマンティック検索、大規模言語モデル (LLM) の強化、生成 AI などのアプリケーションシナリオに適用できます。 |
注意事項
ビルトイン関数を使用する際は、次の点にご注意ください。
入力パラメーター: 入力パラメーターの型、数、フォーマットは、指定された構文に準拠する必要があります。準拠していない場合、MaxCompute は関数を解析できず、SQL ステートメントは失敗します。
データ型 2.0: ビルトイン関数がデータ型 2.0 (TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、または BINARY) を使用する場合、関数を実行する前にデータ型 2.0 を有効にする必要があります。そうしないと、エラーが報告されます。データ型 2.0 は、次のいずれかのレベルで有効にしてください。
セッションレベル (現在の SQL ステートメントにのみ適用): SQL ステートメントの前に次のステートメントを追加し、一緒に送信します。
SET odps.sql.type.system.odps2=true;プロジェクトレベル (後続のすべての SQL ステートメントに適用、10〜15 分で有効になります): プロジェクトオーナーが次のコマンドを実行します。
SETPROJECT odps.sql.type.system.odps2=true;
無効化された暗黙の型変換: データ型 2.0 が有効な場合、精度の損失やエラーを防ぐために、STRING から BIGINT、STRING から DATETIME、DOUBLE から BIGINT、DECIMAL から DOUBLE、DECIMAL から BIGINT への暗黙の型変換は無効になります。明示的な変換には CAST 関数を使用するか、データ型 2.0 を無効にしてください。
UDF とビルトイン関数の名前の競合: ユーザー定義関数 (UDF) がビルトイン関数と同じ名前を持つ場合、UDF が優先されます。たとえば、CONCAT という名前の UDF がプロジェクトに存在する場合、システムはビルトインの CONCAT 関数ではなく、その UDF を呼び出します。ビルトイン関数を呼び出すには、関数名の前に
::を付けます。SELECT ::CONCAT('ab', 'c');グローバルプロパティ: ビルトイン関数の結果は、MaxCompute プロジェクトに設定されたグローバルプロパティによって異なる場合があります。
SETPROJECT;を実行して、現在のグローバルプロパティを表示します。
JSON 関数の使用制限
SDK バージョンの要件
Java SDK V0.44.0 以降
PyODPS V0.11.4.1 以降
テーブル操作の制限
テーブルへの JSON 列の追加はサポートされていません。
クラスター化テーブルはサポートされていません。
Delta Table 型のテーブルはサポートされていません。
SQL 操作の制限
JSON 型に対する比較操作はサポートされていません。
ORDER BYおよびGROUP BY句は JSON 型では使用できません。JSON 型の列を
JOINキーとして使用することはできません。
データ精度
JSON NUMBER の整数部分は BIGINT として保存されます。値が BIGINT の範囲外の場合、オーバーフローが発生します。
JSON NUMBER の小数部分は DOUBLE として保存されます。変換中に精度の損失が発生する可能性があります。
文字の制限
JSON データを生成するために使用される文字列では、Unicode 文字 \u0000 はサポートされていません。
エンジンの互換性
他のエンジン (例:Hologres) は、MaxCompute テーブルから JSON データ型を読み取ることはできません。
UDF サポート
Java UDF および Python UDF は JSON 型をサポートしていません。
ネストの深さ
JSON データ型は最大 20 レベルまでネストできます。
サポートされる開発ツール
サポートされるツールには、MaxCompute クライアント (odpscmd)、MaxCompute Studio、DataWorks が含まれます。Dataphin などの外部エコシステムはサポートされていません。外部システムで JSON データ型を使用する前に、互換性を確認してください。
odpscmd を使用する場合は、次の点にご注意ください。
クライアントを V0.46.5 以降にアップグレードしてください。それ以前のバージョンでは、
DESC json_tableコマンドの実行や、Tunnel を使用した JSON データのダウンロードができません。クライアントのインストールパスにある
conf\odps_config.iniで、use_instance_tunnelをfalseに設定してください。そうしないと、クエリが失敗します。
文字列関数の使用制限
以下の文字列関数は英字のみをサポートします。
TRIM / RTRIM / LTRIM:
trimCharsパラメーターは英字のみをサポートします。REVERSE: Hive モードでは英字のみをサポートします。
SOUNDEX: 英字のみを変換します。
TOLOWER: 英語の大文字を小文字に変換します。
TOUPPER: 英語の小文字を大文字に変換します。
INITCAP: 各単語の最初の英字を大文字に、残りを小文字に変換します。