MaxCompute は、ほとんどのデータ処理要件を満たす、幅広いビルトイン関数を提供します。このトピックでは、ビルトイン関数の種類とその使用方法について説明します。
関数の種類
関数の種類 | 説明 |
DATE、DATETIME、TIMESTAMP などの日付と時刻のデータ型を処理します。これらの関数を使用すると、日付の加算または減算、日付の差の計算、日付フィールドの抽出、現在時刻の取得、日付フォーマットの変換ができます。 | |
BIGINT、DOUBLE、DECIMAL、FLOAT などの数値データ型を処理します。これらの関数を使用すると、基数の変換、算術演算の実行、数値の四捨五入、乱数の取得ができます。 | |
指定されたウィンドウ列内で操作を実行します。これらの関数を使用すると、合計の計算、最大値と最小値の検索、平均値と中央値の計算、数値のソート、値のオフセット、サンプリングの実行ができます。 | |
複数の入力レコードを単一の出力値に集計します。これらの関数を使用すると、合計、平均値、最大値と最小値の計算、パラメーターの集計、文字列の連結ができます。 | |
これらは近似集計関数です。データ量が非常に大きい場合、HyperLogLog++ 関数は少量のメモリを使用して、重複を迅速に削除し、クエリを高速化できます。 | |
STRING データを処理します。これらの関数を使用すると、文字列の切り捨て、置き換え、検索、文字の大小文字の変更、文字列フォーマットの変換ができます。 文字列関数の制限事項については、「文字列関数の制限事項」をご参照ください。 | |
ARRAY データを処理します。これらの関数を使用すると、配列の構築、重複要素の削除、要素の集計、要素のソート、要素のマージができます。 | |
MAP データを処理します。これらの関数を使用すると、キーと値のペアの抽出、マップの構築、マップのマージができます。 | |
STRUCT データを処理します。これらの関数を使用すると、STRUCT 配列の展開、構造体の構築ができます。 | |
JSON データを処理します。これらの関数を使用すると、JSON フィールド値の抽出、JSON オブジェクトまたは配列の生成、JSON データの挿入または更新、複雑なデータ構造の処理ができます。 JSON 関数の制限事項については、「JSON 関数の制限事項」をご参照ください。 | |
STRING および BINARY テーブルデータを処理します。これらの関数を使用すると、データの暗号化と復号ができます。 | |
ネットワーク関連の STRING および BINARY データを処理します。これらの関数を使用すると、IP アドレス形式の変換、URL の解析、ネットワークマスクの取得ができます。 | |
データウェアハウスやデータレイクに保存されている非構造化データとそのメタデータに、複数の方法で接続します。 | |
MaxCompute は、さまざまなビジネスシナリオに対応するその他の関数も提供します。 |
MaxCompute 関数とオープンソース関数のマッピングに関する詳細については、「MaxCompute、Hive、MySQL、Oracle のビルトイン関数のマッピング」をご参照ください。
注意事項
ビルトイン関数を使用する際は、次の点にご注意ください:
ビルトイン関数の入力パラメーターの型、数、フォーマットは、指定された構文に準拠している必要があります。そうでない場合、MaxCompute は関数を解析できず、SQL 文の実行に失敗します。
ビルトイン関数の入力パラメーターが TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY などのデータ型 2.0 を使用する場合、データ型 2.0 を有効にする必要があります。そうでない場合、エラーが報告されます。データ型 2.0 を有効にするには:
セッションレベル:SQL 文の前に
SET odps.sql.type.system.odps2=true;を追加し、一緒に送信します。この構成は、現在の SQL 文に対してのみ有効です。プロジェクトレベル:プロジェクトオーナーは、プロジェクトに対してこの設定を有効にできます。この構成は 10〜15 分で有効になり、それ以降のすべての SQL 文に適用されます。
SETPROJECT odps.sql.type.system.odps2=true;
MaxCompute プロジェクトでデータ型 2.0 が有効になっている場合、潜在的な精度の低下やエラーを防ぐために、一部の暗黙の型変換が無効になります。無効になる変換には、STRING から BIGINT、STRING から DATETIME、DOUBLE から BIGINT、DECIMAL から DOUBLE、DECIMAL から BIGINT が含まれます。この問題を解決するには、CAST 関数を使用して明示的な変換を実行するか、データ型 2.0 を無効にします。
ユーザー定義関数 (UDF) がビルトイン関数と同じ名前を持つ場合、UDF はビルトイン関数を上書きします。たとえば、CONCAT という名前の UDF が MaxCompute プロジェクトに存在する場合、システムはデフォルトでビルトインの 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 型に対する比較演算はサポートされていません。
JSON 型に対して
ORDER BY句やGROUP BY句を使用することはできません。また、JSON 型の列をJOINキーとして使用することもできません。
データ精度
JSON NUMBER の整数部は BIGINT 型として格納されます。整数が BIGINT の範囲外の場合、オーバーフローが発生します。
JSON NUMBER の小数部は DOUBLE 型として格納されます。小数部を DOUBLE 型に変換する際に、精度の低下が発生する可能性があります。
文字の制限:JSON データを生成するために使用される文字列では、Unicode 文字
\u0000はサポートされていません。エンジンの互換性:Hologres などの別のエンジンを使用してテーブルからデータを読み取る場合、JSON データ型は読み取れません。
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:この関数は、文字列内の各英単語の先頭文字を大文字に、その他の文字を小文字に変換するために使用されます。