MaxCompute は、ほとんどのデータ処理要件を満たすさまざまな関数を提供しています。このトピックでは、MaxCompute で使用可能な関数の種類と使用方法について説明します。
関数の種類
関数の種類 | 説明 |
日付時刻関数は、DATE、DATETIME、TIMESTAMP などの日付型のデータを処理するために呼び出されます。これらの関数を使用して、日付値の加算と減算、日付値の差の計算、日付フィールドの抽出、現在時刻の取得、および日付形式の変換を行うことができます。 | |
数学関数は、BIGINT、DOUBLE、DECIMAL、FLOAT などの数値型のデータを処理するために呼び出されます。これらの関数を使用して、基底変換、算術演算、丸め、乱数の取得を行うことができます。 | |
ウィンドウ関数は、ウィンドウ内の列のデータを処理するために呼び出されます。これらの関数を使用して、列データの合計、最大値、最小値、平均値、中央値を計算できます。また、列データのソート、特定のオフセットでの列データの取得、列データのサンプリングを行うこともできます。 | |
集約関数は、複数の入力レコードを単一の出力値に集約するために呼び出されます。これらの関数を使用して、合計、平均値、最大値、最小値、パラメーターの集約、文字列の連結を計算できます。 | |
文字列関数は、STRING 型のデータを処理するために呼び出されます。これらの関数を使用して、文字列の切り捨て、文字列の置換、文字列の検索、大文字と小文字の変換、文字列形式の変換を行うことができます。 | |
複合型関数は、MAP、ARRAY、STRUCT、JSON 型のデータを処理するために呼び出されます。これらの関数を使用して、要素の重複除去、集約、ソート、マージを行うことができます。詳細については、「JSON 関数の使用制限」をご参照ください。 | |
暗号化関数は、STRING 型と BINARY 型のテーブルデータを処理するために呼び出されます。これらの関数を使用して、データの暗号化と復号を行うことができます。 | |
上記の関数に加えて、他のビジネスシナリオをサポートするためのその他の関数が提供されています。 |
各関数の種類とオープンソースプラットフォームでの対応する関数との相関関係の詳細については、「MaxCompute のビルトイン関数と Hive、MySQL、Oracle のビルトイン関数のマッピング」をご参照ください。
注意事項
ビルトイン関数を使用する場合は、次の点を考慮してください。
入力パラメーターの型と数、および関数フォーマットが関数の構文要件に準拠していることを確認してください。準拠していない場合、ビルトイン関数が含まれる SQL 文を実行すると、解析エラーまたは実行エラーが発生する可能性があります。
MaxCompute V2.0 データ型エディションでサポートされている入力パラメーターを持つビルトイン関数を使用するには、このエディションを有効にする必要があります。サポートされているデータ型には、TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY が含まれます。このエディションを有効にしないと、これらの関数を含む SQL 文を実行するとエラーが発生する可能性があります。アクティブ化は、セッションレベルまたはプロジェクトレベルで行うことができます。
セッションレベル:現在の SQL 文に構成を適用するには、
set odps.sql.type.system.odps2=true;
を前に付けて、一緒に実行のために送信します。プロジェクトレベル:プロジェクトオーナーは、プロジェクトのニーズに基づいて MaxCompute V2.0 データ型エディションを有効にすることができます。設定は 10 ~ 15 分後に有効になり、後続のすべての SQL 文に適用されます。
setproject odps.sql.type.system.odps2=true;
プロジェクトで MaxCompute V2.0 データ型エディションを有効にすると、STRING から BIGINT、STRING から DATETIME、DOUBLE から BIGINT、DECIMAL から DOUBLE、DECIMAL から BIGINT など、一部の暗黙の型変換が無効になり、精度の低下またはエラーが発生する可能性があります。これを解決するには、CAST 関数を使用して明示的な型変換を行うか、MaxCompute V2.0 データ型エディションを無効にします。
UDF の名前がビルトイン関数の名前と同じである場合、UDF が優先的に呼び出されます。たとえば、MaxCompute に UDF CONCAT とビルトイン関数 CONCAT の両方が存在する場合、システムはビルトイン関数 CONCAT ではなく UDF CONCAT を自動的に呼び出します。ビルトイン関数を呼び出す場合は、ビルトイン関数の前に記号
::
を追加する必要があります。たとえば、select ::concat('ab', 'c');
を使用できます。MaxCompute プロジェクトのグローバルプロパティの違いにより、ビルトイン関数から矛盾した結果が生じる可能性があります。プロジェクトのグローバルプロパティを表示するには、
setproject;
コマンドを実行します。
JSON 関数の使用制限
サポートされている開発ツールには、MaxCompute クライアント (odpscmd)、MaxCompute Studio、DataWorks が含まれます。Dataphin などの外部エコシステムはサポートされていません。外部エコシステムで MaxCompute でサポートされている JSON データ型を使用する必要がある場合は、外部エコシステムが JSON データ型をサポートしているかどうかを確認する必要があります。次の表に、MaxCompute クライアント (odpscmd) または MaxCompute Studio を JSON 型のデータの開発ツールとして使用する場合に注意する必要がある項目を示します。
MaxCompute クライアント (odpscmd)
MaxCompute Studio
MaxCompute クライアントを V0.46.5 以降にアップグレードする必要があります。そうしないと、
desc json_table
文を実行したり、Tunnel を使用して JSON 型のデータをダウンロードしたりすることはできません。use_instance_tunnel
パラメーターを false に設定する必要があります。このパラメーターは、クライアントのインストールパスの conf フォルダーにある odps_config.ini ファイルに含まれています。そうしないと、クエリを実行するとエラーが報告されます。
MaxCompute Studio では JSON データをクエリできます。MaxCompute Studio では、JSON データをアップロードまたはダウンロードすることはできません。
Hologres などの別のエンジンを使用して MaxCompute テーブルからデータを読み取る場合、テーブル内の JSON データを読み取ることはできません。
JSON 型の列を MaxCompute テーブルに追加することはできません。
JSON 型のデータを他の型のデータと比較したり、JSON 型のデータに対して
ORDER BY
句またはGROUP BY
句を含む SQL 文を実行したり、JSON 型の列をjoin
キーとして使用したりすることはできません。JSON NUMBER 型のデータの場合、整数部分は BIGINT 型を使用して格納され、小数部分は DOUBLE 型を使用して格納されます。整数部分が BIGINT 型でサポートされている範囲を超えると、整数オーバーフローが発生します。小数部分が DOUBLE 型に変換されると、精度の低下が発生します。
JSON データを生成するために使用される文字列には、Unicode のヌル文字である
\u0000
を含めることはできません。Java UDF と Python UDF は JSON データ型をサポートしていません。
クラスター化テーブルは JSON データを格納できません。
V0.44.0 より前のバージョンの Java 用 SDK と V0.11.4.1 より前のバージョンの PyODPS は JSON データ型をサポートしていません。
デルタテーブルは JSON データ型をサポートしていません。
JSON データ型はネストして使用でき、最大 20 レベルのネストがサポートされます。
文字列関数の制限
次の関数は英字のみをサポートしています。
TRIM、RTRIM、LTRIM:trimChars パラメーターの値には英字のみを含めることができます。
REVERSE:この関数は、Hive 互換データ型エディションの英字のみをサポートしています。
SOUNDEX:この関数は英字のみをサポートしています。
TOLOWER:この関数は、文字列内の英字を小文字に変換するために使用されます。
TOUPPER:この関数は、文字列内の英字を大文字に変換するために使用されます。
INITCAP:この関数は、文字列内の英語の各単語の最初の文字を大文字に、各単語の他の文字を小文字に変換するために使用されます。