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

MaxCompute:文字列関数の概要

最終更新日:Sep 08, 2026

MaxCompute は、テーブル内の文字列データの切り捨て、連結、変換、比較、検索を行うための文字列関数を提供します。

MaxCompute SQL は、以下の文字列関数をサポートしています。

関数

説明

ASCII

文字列の最初の文字の ASCII コードを返します。

CHAR_MATCHCOUNT

文字列 A のうち、文字列 B に出現する文字数を計算します。

CHR

ASCII コードを文字に変換します。

CONCAT

文字列を連結します。

CONCAT_WS

指定されたデリミタを使用して、すべての入力文字列を連結します。

DECODE

指定されたエンコード形式を使用して文字列をデコードします。

ENCODE

指定されたエンコード形式を使用して文字列をエンコードします。

FIND_IN_SET

カンマ区切りの文字列内で、指定された文字列の位置を検索します。

FORMAT_NUMBER

数値を指定された形式の文字列に変換します。

FROM_CHARSET

指定されたエンコード形式のバイナリデータを UTF-8 文字列に変換します。

FROM_JSON

指定された JSON 文字列と出力形式に基づいて、ARRAY、MAP、または STRUCT 型のデータを返します。

GET_JSON_OBJECT

指定されたメソッドを使用して、標準の JSON 文字列から指定された文字列を抽出します。

INITCAP

各単語の先頭を大文字、それ以降を小文字にし、スペースで区切られたタイトルケースに文字列を変換します。

INSTR

文字列 B 内で文字列 A の位置を検索します。

IS_ENCODING

文字列が文字セット A から文字セット B に変換できるかどうかを判断します。

JSON_TUPLE

標準の JSON 文字列から、入力キーのセットに対応する文字列を抽出します。

KEYVALUE

文字列をキーと値のペアに分割し、ペアを分離して、指定されたキーに対応する値を返します。

KEYVALUE_TUPLE

文字列を複数のキーと値のペアに分割し、ペアを分離して、複数の指定されたキーに対応する値を返します。

LENGTH

文字列の長さを計算します。

LENGTHB

文字列のバイト長を計算します。

LOCATE

文字列内で指定された部分文字列の位置を検索します。

LPAD

文字列を指定された長さに左詰めします。

LTRIM

文字列の左端から文字を削除します。

MASK_HASH

文字列式から計算されたハッシュ値を返します。

MD5

文字列の MD5 ハッシュを計算します。

PARSE_URL

URL を解析し、指定された部分に関する情報を返します。

PARSE_URL_TUPLE

URL を解析し、複数の部分に関する情報を返します。

REGEXP_COUNT

指定された位置から、指定されたパターンに一致する部分文字列をカウントします。

REGEXP_EXTRACT

指定されたパターンに基づいて文字列をグループに分割し、指定されたグループから文字列を返します。

REGEXP_EXTRACT_ALL

文字列内で正規表現パターンに一致するすべての部分文字列を検索し、配列として返します。

REGEXP_INSTR

指定された位置から、指定された出現回数で、指定されたパターンに一致する部分文字列の開始位置または終了位置を返します。

REGEXP_REPLACE

指定された出現回数で、指定されたパターンに一致する部分文字列を別の文字列に置き換えます。

REGEXP_SUBSTR

指定された位置から、指定された出現回数で、指定されたパターンに一致する部分文字列を返します。

REPEAT

指定された回数だけ繰り返された文字列を返します。

REPLACE

指定された文字列に一致する部分文字列を別の文字列に置き換えます。

REVERSE

文字列の逆順を返します。

RPAD

文字列を指定された長さに右詰めします。

RTRIM

文字列の右端から文字を削除します。

SOUNDEX

標準の文字列を SOUNDEX 文字列に変換します。

SPACE

スペースの文字列を生成します。

SPLIT

デリミタを使用して文字列を分割し、配列を返します。

SPLIT_PART

デリミタを使用して文字列を分割し、指定された部分を返します。

SUBSTR

STRING 型の文字列の指定された位置から指定された長さの部分文字列を返します。

SUBSTRING

STRING または BINARY 型の文字列の指定された位置から指定された長さの部分文字列を返します。

SUBSTRING_INDEX

デリミタの指定された出現回数の前または後の部分文字列を抽出します。

TO_CHAR

BOOLEAN、BIGINT、DECIMAL、または DOUBLE の値をその STRING 表現に変換します。

TO_JSON

指定された複合型を JSON 文字列に変換します。

TOLOWER

文字列内の英語の大文字を小文字に変換します。

TOUPPER

文字列内の英語の小文字を大文字に変換します。

TRANSLATE

文字列 B 内の文字列 A のすべての出現を文字列 C に置き換えます。

TRIM

文字列の両端から文字を削除します。

URL_DECODE

文字列を application/x-www-form-urlencoded MIME 形式から標準文字に変換します。

URL_ENCODE

文字列を application/x-www-form-urlencoded MIME 形式でエンコードします。

注意事項

MaxCompute V2.0 は追加の関数を提供します。使用する関数に MaxCompute V2.0 データ型エディションでサポートされている新しいデータ型 (TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY など) が含まれる場合は、SET 文を実行して MaxCompute V2.0 データ型エディションを有効にする必要があります。

  • セッションレベル:MaxCompute V2.0 データ型エディションを使用するには、実行する SQL ステートメントの前に set odps.sql.type.system.odps2=true; を追加し、それらを一緒にコミットして実行する必要があります。

  • プロジェクトレベル:プロジェクトオーナーは、プロジェクトの要件に基づいてプロジェクトの MaxCompute V2.0 データ型エディションを有効にできます。この構成は 10〜15 分後に有効になります。プロジェクトレベルで MaxCompute V2.0 データ型エディションを有効にするには、次のコマンドを実行します:

    setproject odps.sql.type.system.odps2=true; 

    setproject の詳細については、「プロジェクト操作」をご参照ください。プロジェクトレベルで MaxCompute V2.0 データ型エディションを有効にする際の注意事項の詳細については、「データ型バージョンのガイド」をご参照ください。

制限事項

以下の関数は英語の文字のみをサポートします:

  • TRIM/RTRIM/LTRIM:trimChars パラメーターは英語の文字のみをサポートします。

  • REVERSE:Hive モードでは英語の文字のみをサポートします。

  • SOUNDEX:英語の文字のみを変換します。

  • TOLOWER:文字列内の英語の大文字を小文字に変換します。

  • TOUPPER:文字列内の英語の小文字を大文字に変換します。

  • INITCAP:各単語の最初の英語の文字を大文字に、残りを小文字に変換します。

ASCII

  • 構文

    bigint ascii(string <str>)
  • 説明

    文字列 str の最初の文字の ASCII コードを返します。

  • パラメーター

    str: 必須。 STRING 型。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME 型の場合、計算前に暗黙的に STRING 型に変換されます。

  • 戻り値

    BIGINT 型の値を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME 型でない場合、エラーが返されます。

    • str が NULL の場合、NULL が返されます。

    • 例 1:文字列 abcde の最初の文字の ASCII コードを返します。 サンプル文:

      -- 97 を返します。
      select ascii('abcde'); 
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select ascii(null);

CHAR_MATCHCOUNT

  • 構文

    bigint char_matchcount(string <str1>, string <str2>)
  • 説明

    str1 のうち、str2 に出現する文字数を計算します。

  • パラメーター

    str1str2:必須。 STRING 型。両方の文字列は有効な UTF-8 文字列である必要があります。比較中に無効な文字 (非 Unicode エンコード) が見つかった場合、負の値が返されます。

  • 戻り値

    BIGINT 型の値を返します。str1 または str2 が NULL の場合、NULL が返されます。

    • 例 1:文字列 aabc のうち、abcde に出現する文字数を計算します。 サンプル文:

      -- 4 を返します。
      select char_matchcount('aabc','abcde');
    • 例 2:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select char_matchcount(null,'abcde');

CHR

  • 構文

    string chr(bigint <ascii>)
  • 説明

    指定された ASCII コードを文字に変換します。

  • パラメーター

    ascii: 必須。 BIGINT 型の ASCII 値。有効値:0〜127。入力が STRING、DOUBLE、または DECIMAL 型の場合、計算前に暗黙的に BIGINT 型に変換されます。

  • 戻り値

    STRING 型の値を返します。戻り値は次のルールに従います:

    • ascii 値が有効範囲外の場合、エラーが返されます。

    • ascii が BIGINT、STRING、DOUBLE、または DECIMAL 型でない場合、エラーが返されます。

    • ascii が NULL の場合、NULL が返されます。

    • 例 1:ASCII コード 100 を文字に変換します。 サンプル文:

      -- d を返します。
      select chr(100);
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select chr(null);
    • 例 3:入力が STRING 型の文字です。 サンプル文:

      --入力は操作のために暗黙的に BIGINT 型に変換され、「d」を返します。
      select chr('100');

CONCAT

  • 構文

    array<T> concat(array<T> <a>, array<T> <b>[,...])
    string concat(string <str1>, string <str2>[,...])
  • 説明

    • 配列を入力とする場合:複数の配列のすべての要素を連結し、新しい配列を返します。

    • 文字列を入力とする場合:複数の文字列を連結し、新しい文字列を返します。

  • パラメーター

    • ab:必須。これらのパラメーターは配列を指定します。T in array<T> は、配列内の要素のデータ型を指定します。要素は任意のデータ型にすることができます。配列 a の要素と配列 b の要素は同じデータ型である必要があります。null 要素も操作の対象となります。

    • str1str2:必須。STRING 型の値。入力値が BIGINT、DOUBLE、DECIMAL、または DATETIME 型の場合、計算前に暗黙的に STRING 型の値に変換されます。入力値が他のデータ型の場合、エラーが返されます。

  • 戻り値

    • ARRAY 型の値が返されます。入力配列のいずれかが null の場合、null が返されます。

    • STRING 型の値が返されます。入力パラメーターが構成されていないか、入力パラメーターが null に設定されている場合、null が返されます。

    • 例 1:array(10, 20)array(20, -20) のすべての要素を連結します。 サンプル文:

      -- 戻り値は [10, 20, 20, -20] です。
      select concat(array(10, 20), array(20, -20));
    • 例 2:入力配列の 1 つに null 要素が含まれています。 サンプル文:

      -- 戻り値は [10, null, 20, -20] です。
      select concat(array(10, null), array(20, -20));
    • 例 3:入力配列の 1 つが null です。 サンプル文:

      -- 戻り値は null です。
      select concat(array(10, 20), null);
    • 例 4:文字列 aabcabcde を連結します。 サンプル文:

      -- 戻り値は aabcabcde です。
      select concat('aabc','abcde');
    • 例 5:入力が空です。 サンプル文:

      -- 戻り値は null です。
      select concat();
    • 例 6:入力文字列の 1 つが null です。 サンプル文:

      -- 戻り値は null です。
      select concat('aabc', 'abcde', null);

CONCAT_WS

  • 構文

    string concat_ws(string <separator>, string <str1>, string <str2>[,...])
    string concat_ws(string <separator>, array<string> <a>)
  • 説明

    指定されたデリミタを使用してすべての入力文字列または配列要素を連結して形成された文字列を返します。この関数は MaxCompute V2.0 の拡張機能です。

  • パラメーター

    • separator: 必須。 STRING 型のデリミタ。

    • str1str2:少なくとも 2 つの文字列を指定する必要があります。 STRING 型。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME 型の場合、計算前に暗黙的に STRING 型に変換されます。

    • a: 必須。 ARRAY 型。配列要素は STRING 型である必要があります。

  • 戻り値

    STRING または STRUCT 型の値を返します。戻り値は次のルールに従います:

    • str1 または str2 が STRING、BIGINT、DECIMAL、DOUBLE、または DATETIME 型でない場合、エラーが返されます。

    • 入力パラメーターが指定されていないか、いずれかの入力パラメーターが NULL の場合、NULL が返されます。

    • 例 1:文字列 namehanmeimei: を使用して連結します。 サンプル文:

      -- name:hanmeimei を返します。
      select concat_ws(':','name','hanmeimei');

      -

    • 例 2:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select concat_ws(':','avg',null,'34');
    • 例 3:配列 array('name', 'hanmeimei') 内の要素を : を使用して連結します。 サンプル文:

      -- name:hanmeimei を返します。
      select concat_ws(':',array('name', 'hanmeimei'));

DECODE

  • 構文

    STRING DECODE(BINARY <str>, STRING <charset>)
  • 説明

    charset で指定された形式を使用して str をデコードします。

  • パラメーター

    パラメーター

    必須

    説明

    str

    はい

    BINARY 型。デコードする文字列。

    charset

    はい

    STRING 型。エンコード形式。有効な値:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。

    説明

    ISO-8859-1 および US-ASCII エンコード形式は現在、英語の文字のみをサポートしており、中国語はサポートしていません。

  • 戻り値

    STRING を返します。str または charset が NULL の場合、NULL が返されます。

    • 例 1:UTF-8 形式に基づいて文字列 English Sample をエンコードおよびデコードします。 サンプル文:

      -- 文字列をエンコードおよびデコードします。SELECT DECODE(ENCODE("English Sample","UTF-8"), "UTF-8");

      戻り値:

      +-----+| _c0 |+-----+| English Sample |+-----+
    • 例 2:いずれかの入力パラメーターを NULL に設定します。 サンプル文:

      SELECT DECODE(ENCODE("English Sample","UTF-8"), NULL);

      戻り値:

      +-----+| _c0 |+-----+| NULL |+-----+

ENCODE

  • 構文

    binary encode(string <str>, string <charset>)
  • 説明

    charset で指定された形式を使用して str をエンコードします。

  • パラメーター

    • str: 必須。 STRING 型。再エンコードする文字列。

    • charset: 必須。 STRING 型。エンコード形式。有効な値:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。

  • 戻り値

    BINARY 型を返します。str または charset が NULL の場合、NULL が返されます。

    • 例 1:文字列 abcUTF-8 形式でエンコードします。 サンプル文:

      -- abc を返します。
      select encode("abc", "UTF-8");
    • 例 2:文字列 abcUTF-16BE 形式でエンコードします。 サンプル文:

      -- =00a=00b=00c を返します。
      select encode("abc", "UTF-16BE");
    • 例 3:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select encode("abc", null);

FIND_IN_SET

  • 構文

    BIGINT FIND_IN_SET(STRING <str1>, STRING <str2>[, STRING <delimiter>])
  • 説明

    delimiter で区切られた文字列 str2 内の文字列 str1 の位置を 1 から数えて検索します。

  • パラメーター

    パラメーター

    必須

    説明

    str1

    はい

    STRING 型。検索する文字列。

    str2

    はい

    STRING 型。delimiter で区切られた文字列。

    delimiter

    いいえ

    STRING 定数。デフォルトはカンマ (,) です。デリミタは単一の文字または文字列にすることができます。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • str2str1 が含まれていない場合、または str1delimiter が含まれている場合、0 が返されます。

    • str1 または str2NULL の場合、NULL が返されます。

    • 例 1:カンマ (,) で区切られた文字列 abc,hello,ab,c 内の文字列 ab の位置を検索します。 サンプル文:

      SELECT FIND_IN_SET('ab', 'abc,hello,ab,c') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | 3          |
      +------------+
    • 例 2:カンマ (,) で区切られた文字列 abc,hello,ab,c 内の文字列 hi の位置を検索します。 サンプル文:

      SELECT FIND_IN_SET('hi', 'abc,hello,ab,c') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | 0          |
      +------------+
    • 例 3:アンダースコア (_) で区切られた文字列 abc_hello_ab_c 内の文字列 ab の位置を検索します。 サンプル文:

      SELECT FIND_IN_SET('ab', 'abc_hello_ab_c', '_') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | 3          |
      +------------+
    • 例 4:入力パラメーター str1 または str2NULL です。 サンプル文:

      SELECT FIND_IN_SET(null, 'abc,hello,ab,c') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | NULL       |
      +------------+

FORMAT_NUMBER

  • 構文

    STRING FORMAT_NUMBER(DOUBLE|BIGINT|INT|SMALLINT|TINYINT|FLOAT|DECIMAL|STRING <expr1>, INT <expr2>)
  • 説明

    expr1expr2 に従ってフォーマットされた文字列に変換します。

  • パラメーター

  • expr1: 必須。FLOAT、DOUBLE、または DECIMAL 型の値。このパラメーターは、フォーマットする式を指定します。

  • expr2: 必須。INT 型の値。有効な値:0〜340。このパラメーターは、保持する小数点以下の桁数を指定します。このパラメーターは、#,###,###.## のような形式で表現することもできます。返される小数点以下の桁数は、このパラメーターの値によって異なります。

  • 戻り値

    STRING 型の値が返されます。戻り値は、次のルールによって異なります:

    • expr2 の値が 0 より大きく、340 以下の場合、指定された小数点以下の桁数に四捨五入された値が返されます。

    • expr2 の値が 0 の場合、戻り値には整数部分のみが含まれ、小数点や小数部分は含まれません。

    • expr2 の値が 0 未満または 340 より大きい 場合、エラーが返されます。

    • expr1 または expr2 が空または null に設定されている場合、null が返されます。

    • 例 1:指定どおりに数値をフォーマットします。 サンプル文:

      -- 5.230 を返します。
      SELECT FORMAT_NUMBER(5.230134523424545456,3);
      -- 12,332.123 を返します。
      SELECT FORMAT_NUMBER(12332.123456, '#,###,###,###.###');
    • 例 2:入力パラメーターの 1 つが空または NULL です。 サンプル文:

      -- NULL を返します。
      SELECT FORMAT_NUMBER('',3);
      -- NULL を返します。
      SELECT FORMAT_NUMBER(null,3);

FROM_CHARSET

  • 構文

    STRING FROM_CHARSET(binary <source>, string <source_charset>, [string <mode>])
  • 説明

    FROM_CHARSET は、UTF-8 以外のエンコードされたバイナリデータを UTF-8 文字列に変換して、後続の計算を行います。

  • パラメーター

    • source: 必須。BINARY 型の値。このパラメーターは、変換するバイナリデータを指定します。

    • source_charset: 必須。STRING 型の値。このパラメーターは、source で指定されたバイナリデータの元のエンコード形式を指定します。有効な値:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII、GB2312、GBK、および GB18030。

    • mode: オプション。STRING 型の値。このパラメーターは、FROM_CHARSET 関数が source で指定されたバイナリデータを指定されたエンコード形式の文字列に変換する際に文字を変換できない場合の処理モードを指定します。有効な値:

      • NONE: エラーを報告します。処理は行われません。これがデフォルト値です。

      • TRANSLIT: 文字を指定されたエンコード形式の類似文字に置き換えます。

      • IGNORE: エラーを無視してコマンドの実行を続行します。

  • 戻り値

    UTF-8 でエンコードされた STRING 型を返します。パラメーターが NULL または空の文字列の場合、戻り値は次のルールに従います:

    • いずれかの入力パラメーターが NULL の場合、NULL を返します。

    • いずれかの入力パラメーターが空の文字列の場合、エラーを返します。

    • 例 1:UTF-8 でエンコードされたバイナリデータを UTF-8 でエンコードされた文字列に変換します。

      SELECT FROM_CHARSET(unhex('e58aa0e6b2b9e9949fe696a4e68bb70a'),'UTF-8', 'TRANSLIT');
    • 例 2:GBK でエンコードされたバイナリデータを UTF-8 でエンコードされた文字列に変換します。

      SELECT FROM_CHARSET(unhex('b9feb9febac3a4ce'), 'GBK');
    • 例 3:入力パラメーターが null の場合、null が返されます。

      SELECT FROM_CHARSET(unhex('b9feb9febac3a4ce'), null);

FROM_JSON

  • 構文

    from_json(<jsonStr>, <schema>)
  • 説明

    JSON 文字列 jsonStr と出力形式 schema に基づいて、ARRAY、MAP、または STRUCT 型のデータを返します。

  • パラメーター

    • jsonStr: 必須。入力した JSON 文字列。

    • schema: 必須。JSON 文字列のスキーマ。このパラメーターの値は、テーブル作成時の文と同じ形式である必要があります。例:array<bigint>map<string, array<string>>、または struct<a:int, b:double, `C`:map<string,string>>

      説明

      構造体のキーは大文字と小文字を区別します。構造体は a BIGINT, b DOUBLE の形式で指定することもでき、これは STRUCT<a:BIGINT, b:DOUBLE> と同等です。

      次の表に、JSON データ型と MaxCompute データ型の間のマッピングを示します。

      JSON データ型

      MaxCompute データ型

      OBJECT

      STRUCT、MAP、および STRING

      ARRAY

      ARRAY および STRING

      NUMBER

      TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、および STRING

      BOOLEAN

      BOOLEAN および STRING

      STRING

      STRING、CHAR、VARCHAR、BINARY、DATE、および DATETIME

      NULL

      すべての型

      説明

      OBJECT 型と ARRAY 型の JSON 文字列は、可能な限り解析されます。JSON 文字列のデータ型がどの MaxCompute データ型にもマッピングされていない場合、JSON 文字列は省略されます。使いやすさのため、すべての JSON データ型は MaxCompute がサポートする STRING データ型に変換できます。NUMBER 型の JSON 文字列を FLOAT、DOUBLE、または DECIMAL 型の値に変換する場合、値の精度は保証されません。JSON 文字列を STRING 型の値に変換し、取得した値を FLOAT、DOUBLE、または DECIMAL 型の値に変換することを推奨します。

  • 戻り値

    ARRAY、MAP、または STRUCT 型の値が返されます。

    • 例 1:特定の JSON 文字列を特定のデータ型の値に変換します。 サンプル文:

      -- 戻り値は {"a":1,"b":0.8} です。
      select from_json('{"a":1, "b":0.8}', 'a int, b double');
      -- 戻り値は {"time":"26/08/2015"} です。
      select from_json('{"time":"26/08/2015"}', 'time string');
      -- 戻り値は {"a":1,"b":0.8} です。
      select from_json('{"a":1, "b":0.8}', 'a int, b double, c string');
      -- 戻り値は [1,2,3] です。
      select from_json('[1, 2, 3, "a"]', 'array<bigint>');
      -- 戻り値は {"d":"v","a":"1","b":"[1,2,3]","c":"{}"} です。
      select from_json('{"a":1,"b":[1,2,3],"c":{},"d":"v"}', 'map<string, string>');
    • 例 2:map_keys 関数と from_json 関数を使用して、JSON 文字列内のすべてのキーを取得します。同じ目的で JSON_KEYS を使用することもできます。 サンプル文:

      -- 戻り値は ["a","b"] です。
      select map_keys(from_json('{"a":1,"b":2}','map<string,string>'));

GET_JSON_OBJECT

  • 構文

    STRING GET_JSON_OBJECT(JSON|STRING <json>, STRING <json_path>)
    
    -- 例:Alice を返します。
    SELECT GET_JSON_OBJECT(JSON '{"name": "Alice", "age": 30}', '$.name');
  • 説明

    GET_JSON_OBJECT 関数は、指定された JSON パス json_path に基づいて、JSON 文字列または JSON データ型の値から文字列を抽出します。

  • 注意事項

    • GET_JSON_OBJECT 関数は、JSON パスでの正規表現構文をサポートしていません。

    • 新しい JSON データ型 の JSON パス構文は、元の仕様とは異なります。これにより、互換性の問題が発生する可能性があります。

    • クエリに同じ JSON データを処理する複数の GET_JSON_OBJECT 関数が含まれている場合、関数は同じ JSON 文字列を繰り返し解析します。これはパフォーマンスに悪影響を及ぼし、コストを増加させる可能性があります。これを回避するには、ユーザー定義テーブル関数 (UDTF) と共に GET_JSON_OBJECT を使用して JSON ログデータを変換できます。

  • パラメーター

    • json: 必須。処理する JSON データ。このパラメーターは、JSON と STRING の 2 つの入力型をサポートします。

      • JSON 型:JSON データ型の値。値は {"Key":"Value", "Key":"Value",...} の形式である必要があります。例:JSON '{"name": "Alice", "age": 30}'

      • STRING 型:入力が STRING の場合、次の形式要件を満たす必要があります:

        • 文字列は '{"Key":"Value", "Key":"Value",...}' の形式である必要があります。例:'{"name": "Alice", "age": 30}'

        • 二重引用符 (") は 2 つのバックスラッシュ (\\) でエスケープする必要があります。

        • 単一引用符 (') は 1 つのバックスラッシュ (\) でエスケープする必要があります。

    • json_path: 必須。データの抽出に使用される JSON パス式を指定する STRING。パスは $ 文字で始まる必要があります。例:$.aliyun.test[0].demo。パス式では次の文字を使用します:

      • $: ルートノードを示します。

      • . または ['']: 子ノードを示します。これは JSON オブジェクトの解析に使用されます。例:$.store.book。JSON キーにピリオド (.) が含まれている場合は、代わりに [''] を使用できます。

        [''] を使用したデータ抽出は、SET odps.sql.udf.getjsonobj.new=true; 文を実行した場合にのみサポートされます。

      • []: [number] は配列の添字を示します。添字は 0 から始まります。

      • *: [] のワイルドカード文字。配列全体を返します。アスタリスク (*) はエスケープできません。

  • 戻り値

    STRING 型の値が返されます。この値は、指定されたパスから抽出されたデータです。この関数は、戻り値に関して次のルールに従います:

    • json が有効で、json_path が存在する場合、対応する文字列が返されます。

    • json が空または無効な形式の場合、NULL が返されます。

    • json_path[*] が含まれている場合、戻り値は配列形式ではありません。戻り値を強制的に統一された配列形式にするには、SET odps.sql.force.getjsonobj.array.format=true; 文を実行します。

    • json_path が無効な場合、NULL が返されます。

    戻り値の動作

    • 次のコマンドで プロジェクトレベルまたはセッションレベル のフラグを設定することで、関数の戻り値の動作を制御できます:SET odps.sql.udf.getjsonobj.new=true/false;

      異なるフラグ設定に対応する 2 つの戻り値の動作は次のとおりです:

      重要

      SET odps.sql.udf.getjsonobj.new=true; 構成を使用することを推奨します。この構成は、より標準的な関数の動作を提供し、データ処理を簡素化し、パフォーマンスを向上させます。ご利用の MaxCompute プロジェクトに、JSON 予約文字のエスケープ動作に依存する既存のジョブがある場合は、元の動作を引き続き使用することを推奨します。これにより、検証なしで新しい動作に切り替えた場合に発生する可能性のあるエラーや正確性の問題を回避できます。

      パラメーター設定

      SET odps.sql.udf.getjsonobj.new=true;

      SET odps.sql.udf.getjsonobj.new=false;

      戻り値の動作

      元の文字列を変更せずに出力します。

      JSON 予約文字をエスケープして文字列を出力します。

      戻り値は直接解析できる JSON 文字列です。REPLACEREGEXP_REPLACE などの関数を使用してバックスラッシュを置き換える必要はありません。

      改行 (\n) や引用符 (") などの JSON 予約文字は、文字列 '\n' および '\"' として返されます。

      重複キーの解析

      JSON オブジェクトには重複キーを含めることができ、正常に解析できます。

      -- 1 を返します。
      SELECT GET_JSON_OBJECT('{"a":"1","a":"2"}', '$.a');

      JSON オブジェクトに重複キーを含めることはできません。含めると、解析が失敗する可能性があります。

      -- NULL を返します。
      SELECT GET_JSON_OBJECT('{"a":"1","a":"2"}', '$.a');

      出力のソート順

      出力は元の JSON 文字列と同じ順序でソートされます。

      -- {"b":"1","a":"2"} を返します。
      SELECT GET_JSON_OBJECT('{"b":{"b":"1","a":"2"},"a":"2"}', '$.b');

      出力はアルファベット順にソートされます。

      -- {"a":"2","b":"1"} を返します。
      SELECT GET_JSON_OBJECT('{"b":{"b":"1","a":"2"},"a":"2"}', '$.b');
    • SET odps.sql.hive.compatible=true; コマンドを実行して Hive 互換モードが有効になっている場合、GET_JSON_OBJECT 関数は戻り値で元の文字列を保持します。

    • 2021 年 1 月 21 日以降に作成された MaxCompute プロジェクトの場合、GET_JSON_OBJECT 関数のデフォルトの戻り値の動作は、元の文字列を保持することです。

    • 2021 年 1 月 21 日より前に作成された MaxCompute プロジェクトの場合、GET_JSON_OBJECT 関数のデフォルトの戻り値の動作は、JSON 予約文字をエスケープすることです。

    • 次の例を使用して、ご利用の MaxCompute プロジェクトで GET_JSON_OBJECT 関数がどの動作を使用するかを判断できます。これを行うには、次のコマンドを実行します:

      SELECT GET_JSON_OBJECT('{"a":"[\\"1\\"]"}', '$.a');
      --JSON 予約文字をエスケープする動作の場合の戻り値:
      [\"1\"]
      
      --元の文字列を保持する動作の場合の戻り値:
      ["1"]
      プロジェクトの GET_JSON_OBJECT 関数のデフォルトの戻り値の動作を元の文字列を保持するように切り替えるには、チケットを送信してください。これにより、セッションごとにセッションレベルでプロパティを設定する必要がなくなります。
  • JSON 入力パラメーター

    例 1:JSON データから特定のキーの値を取得する

    -- 1 を返します。
    SELECT GET_JSON_OBJECT(JSON '{"a":1, "b":2}', '$.a');
    
    -- NULL を返します。
    SELECT GET_JSON_OBJECT(JSON '{"a":1, "b":2}', '$.c');

    例 2:無効な json_path は NULL を返します。

    -- NULL を返します。
    SELECT GET_JSON_OBJECT(JSON '{"a":1, "b":2}', '$invalid_json_path');

    STRING 入力パラメーター

    例 1:src_json.json JSON オブジェクトから情報を抽出する

    -- テストデータを準備します。
    CREATE TABLE IF NOT EXISTS src_json (
        json STRING
    );
    
    INSERT OVERWRITE TABLE src_json
    VALUES
    ('{"store":
      {"fruit":[{"weight":8,"type":"apple"},
        {"weight":9,"type":"pear"}],
         "bicycle":{"price":19.95,
         "color":"red"}},
       "email":"amy@only_for_json_udf_test.net",
       "owner":"amy"}');
    
    -- owner フィールドの情報を抽出します。戻り値は amy です。
    SELECT GET_JSON_OBJECT(src_json.json, '$.owner') FROM src_json;
    
    -- オプション。元の文字列を保持して出力します。
    SET odps.sql.udf.getjsonobj.new=true;
    -- store.fruit フィールドの最初の配列の情報を抽出します。戻り値は {"weight":8,"type":"apple"} です。
    SELECT GET_JSON_OBJECT(src_json.json, '$.store.fruit[0]') FROM src_json;
    
    -- 存在しないフィールドの情報を抽出します。戻り値は NULL です。
    SELECT GET_JSON_OBJECT(src_json.json, '$.non_exist_key') FROM src_json;

    例 2:JSON 配列データから情報を抽出する

    -- 2222 を返します。
    SELECT GET_JSON_OBJECT('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}','$.array[1][1]');
    
    -- 元の文字列を保持して出力します。
    SET odps.sql.udf.getjsonobj.new=true;
    -- ["h0","h1","h2"] を返します。
    SELECT GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]');
    
    -- JSON 予約文字をエスケープして出力します。
    SET odps.sql.udf.getjsonobj.new=false;
    -- ["h0","h1","h2"] を返します。
    SELECT GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]');
    
    -- h1 を返します。
    SELECT GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[1]');

    例 3:キーにピリオド (.) を含む JSON データから情報を抽出する

    -- テストデータを準備します。
    CREATE TABLE json_test (id STRING, json STRING);
    
    -- キーにピリオド (.) を含むデータを挿入します。
    INSERT INTO TABLE json_test (id, json) VALUES 
    ("1", 
      "{
        \"China.beijing\":
          {\"school\":
            {\"id\":0,\"book\":
              [{\"title\": \"A\",\"price\": 8.95},
               {\"title\": \"B\",\"price\": 10.2}]
            }
          }
      }"
    );
    
    -- キーにピリオド (.) を含まないデータを挿入します。
    INSERT INTO TABLE json_test (id, json) VALUES 
    ("2", 
      "{
        \"China_beijing\":
          {\"school\":
            {\"id\":0,\"book\":
              [{\"title\": \"A\",\"price\": 8.95},
               {\"title\": \"B\",\"price\": 10.2}]
            }
          }
      }"
    );
    
    -- 角括弧 [''] を使用して、ピリオド (.) を含むデータを解析します。
    -- これは 'China.beijing' の下の 'id' 値を抽出します。戻り値は 0 です。
    SELECT GET_JSON_OBJECT(json, "$['China.beijing'].school['id']") FROM json_test WHERE id =1;
    
    -- 特殊文字を含まないデータの場合、'.' と [''] は両方とも有効で同等です。
    -- これは 'China_beijing' の下の 'id' 値を抽出します。戻り値は 0 です。
    SELECT GET_JSON_OBJECT(json, "$['China_beijing'].school['id']") FROM json_test WHERE id =2;
    SELECT GET_JSON_OBJECT(json, "$.China_beijing.school['id']") FROM json_test WHERE id =2;

    例 4:ピリオド (.) を含むキーに [''] を使用する

    SET odps.sql.udf.getjsonobj.new=true;
    
    -- 1 を返します。
    SELECT GET_JSON_OBJECT('{"a.1":"1","a":"2"}', '$[\'a.1\']');

    例 5:空または無効な JSON 入力

    -- NULL を返します。
    SELECT GET_JSON_OBJECT('','$.array[1][1]');
    
    -- NULL を返します。
    SELECT GET_JSON_OBJECT('"array":["aaaa",1111],"bbbb":["cccc",3333]','$.array[1][1]');

    例 6:エスケープされた JSON 文字列

    SET odps.sql.udf.getjsonobj.new=true;
    
    -- "1" を返します。
    SELECT GET_JSON_OBJECT('{"a":"\\"1\\"","b":"2"}', '$.a'); 
    
    -- '1' を返します。
    SELECT GET_JSON_OBJECT('{"a":"\'1\'","b":"2"}', '$.a');

    例 7:絵文字のサポート

    -- 絵文字記号を返します。
    SELECT GET_JSON_OBJECT('{"a":"<Emoji symbol>"}', '$.a');
    注:DataWorks は絵文字の直接入力をサポートしていません。Data Integration などのツールを使用して、絵文字に対応するエンコードされた文字列を MaxCompute に書き込むことができます。その後、GET_JSON_OBJECT 関数を使用してそれらを処理できます。

INITCAP

  • 構文

    string initcap(<str>)
  • 説明

    str を、各単語の最初の文字を大文字、残りを小文字にし、スペースで区切られたタイトルケースに変換します。

  • パラメーター

    str: 必須。 STRING 型。入力文字列。

  • 戻り値

    各単語の最初の文字を大文字、残りを小文字にした文字列を返します。

  • -- Odps Sql を返します。
    SELECT initcap("oDps sql");

INSTR

  • 構文

    bigint instr(string <str1>, string <str2>[, bigint <start_position>[, bigint <nth_appearance>]])
  • 説明

    文字列 str1 内の部分文字列 str2 の位置を検索します。

  • パラメーター

    • str1: 必須。 STRING 型。検索対象の文字列。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。その他の型はエラーを返します。

    • str2: 必須。 STRING 型。一致させる部分文字列。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。その他の型はエラーを返します。

    • start_position: オプション。BIGINT 型の値。その他のデータ型の場合はエラーが返されます。このパラメーターは、検索を開始する str1 内の文字の位置を指定します。デフォルトの開始位置は最初の文字で、位置 1 です。start_position が負の値の場合、検索は文字列の末尾から逆方向にカウントを開始し、最後の文字が位置 -1、最後から 2 番目の文字が -2 となります。

    • nth_appearance: オプション。0 より大きい BIGINT 型の値。このパラメーターは、str1 内の str2nth_appearance 回目の一致の位置を指定します。nth_appearance が別のデータ型であるか、0 以下の場合、エラーが返されます。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • str1str2 が含まれていない場合、0 を返します。

    • str2 が空の場合、常に正常に一致します。例:select instr('abc',''); は 1 を返します。

    • str1str2start_position、または nth_appearance が NULL の場合、NULL を返します。

    • 例 1:文字列 Tech on the net 内の文字 e の位置を検索します。 サンプル文:

      -- 2 を返します。
      select instr('Tech on the net', 'e');
    • 例 2:文字列 Tech on the net 内の部分文字列 on の位置を検索します。 サンプル文:

      -- 6 を返します。
      select instr('Tech on the net', 'on');
    • 例 3:文字列 Tech on the net 内の 3 番目の文字から開始して、2 回目に出現する文字 e の位置を検索します。 サンプル文:

      -- 14 を返します。
      select instr('Tech on the net', 'e', 3, 2);
    • 例 4:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select instr('Tech on the net', null);

IS_ENCODING

  • 構文

    boolean is_encoding(string <str>, string <from_encoding>, string <to_encoding>)
  • 説明

    入力文字列 str が文字セット from_encoding から to_encoding に変換できるかどうかを判断します。文字化けの検出にも使用されます。通常、from_encoding を UTF-8 に、to_encoding を GBK に設定します。

  • パラメーター

    • str: 必須。 STRING 型。空の文字列は、どの文字セットでも有効と見なされます。

    • from_encoding, to_encoding: 必須。 STRING 型。ソースおよびターゲットの文字セット。

  • 戻り値

    BOOLEAN 型を返します。戻り値は次のルールに従います:

    • str が正常に変換された場合は True を返し、それ以外の場合は False を返します。

    • strfrom_encoding、または to_encoding が NULL の場合、NULL を返します。

JSON_TUPLE

  • 構文

    string json_tuple(string <json>, string <key1>, string <key2>,...)
  • 説明

    入力キーのセット ((key1,key2,...) など) に基づいて、標準の JSON 文字列から文字列を抽出します。

  • パラメーター

    • json: 必須。STRING 型の値。このパラメーターは、標準の JSON 文字列を指定します。

    • key: 必須。STRING 型の値。このパラメーターは、JSON 文字列内の JSON オブジェクトの path を記述するために使用されます。値はドル記号 ($) で始めることはできません。一度に複数のキーを入力できます。MaxCompute は . または [''] を使用して JSON オブジェクトを解析します。JSON オブジェクトのキーにピリオド (.) が含まれている場合は、[''] を使用できます。

  • 戻り値

    STRING 型の値が返されます。

    説明
    • json が空または無効な場合、null が返されます。

    • key が空、無効、または JSON 文字列に存在しない場合、null が返されます。

    • json が有効で key が存在する場合、関連する文字列が返されます。

    • この関数は、中国語の文字を含む JSON データを解析できます。

    • この関数は、ネストされた JSON データを解析できます。

    • この関数は、ネストされた配列を含む JSON データを解析できます。

    • 解析アクションは、set odps.sql.udf.getjsonobj.new=true; と共に GET_JSON_OBJECT を実行するのと同等です。JSON 文字列から複数のオブジェクトを取得するには、GET_JSON_OBJECT 関数を複数回呼び出す必要があります。その結果、JSON 文字列は複数回解析されます。JSON_TUPLE 関数を使用すると、一度に複数のキーを入力でき、JSON 文字列は一度しか解析されません。JSON_TUPLE は GET_JSON_OBJECT よりも効率的です。

    • JSON_TUPLE はユーザー定義テーブル関数 (UDTF) です。テーブルから一部の列を選択する場合は、JSON_TUPLE を LATERAL VIEW 句と共に使用します。

KEYVALUE

  • 構文

    keyvalue(string <str>,[string <split1>,string <split2>,] string <key>)
    keyvalue(string <str>,string <key>) 
  • 説明

    文字列 strsplit1 を使用してキーと値のペアに分割し、split2 を使用してペアを分離し、key に対応する値を返します。

  • パラメーター

    • str: 必須。 STRING 型。分割する文字列。

    • split1, split2: オプション。 STRING 型。分割用のデリミタ文字列。指定しない場合、デフォルトの split1";" で、split2":" です。split1 で分割された部分文字列に複数の split2 が含まれている場合、結果は未定義です。

    • key: 必須。 STRING 型。split1split2 で分割した後、key の値を返します。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • split1 または split2 が NULL の場合、NULL を返します。

    • str または key が NULL の場合、または一致する key が存在しない場合、NULL を返します。

    • 複数のキーと値のペアが一致する場合、最初に一致した key の値を返します。

    • 例 1:文字列 0:1/;1:2 をキーと値のペアに分割し、キー 1 の値を返します。 サンプル文:

      -- 2 を返します。
      select keyvalue('0:1/;1:2', 1);

      split1split2 パラメーターは指定されていません。 split1 のデフォルト値はセミコロン (";") で、split2 のデフォルト値はコロン (":") です。

      split1 で分割した後、キーと値のペアは 0:1/,1:2 です。split2 で分割した後:

      0 1/  
      1 2

      キー 1 の値 2 を返します。

    • 例 2:文字列 “\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;” を split1 として “\;”、split2 として ":" を使用して分割し、キー tf の値を返します。 サンプル文:

      -- 21910 を返します。
      select keyvalue("\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;","\;",":","tf");

      文字列 "\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;" をデリミタ "\;" を使用して分割すると、次のキーと値のペアが生成されます。

      decreaseStore:1,xcard:1,isB2C:1,tf:21910,cart:1,shipping:2,pf:0,market:shoes,instPayAmount:0 

      ":" で分割した結果は次のとおりです。

      decreaseStore 1  
      xcard 1  
      isB2C 1  
      tf 21910  
      cart 1  
      shipping 2  
      pf 0  
      market shoes  
      instPayAmount 0

      キー tf の値 21910 を返します。

KEYVALUE_TUPLE

  • 構文

    KEYVALUE_TUPLE(str, split1, split2, key1, key2, ..., keyN)
  • 説明

    文字列 strsplit1 を使用してキーと値のペアに分割し、split2 を使用してペアを分離し、複数の key の値を返します。

  • パラメーター

    • str: 必須。 STRING 型。分割する文字列。

    • split1, split2: 必須。 STRING 型。分割用のデリミタ文字列。split1 で分割された部分文字列に複数の split2 が含まれている場合、結果は未定義です。

    • key: 必須。 STRING 型。split1split2 で分割した後、key の値を返します。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • split1 または split2 が NULL の場合、NULL を返します。

    • str または key が NULL の場合、または一致する key が存在しない場合、NULL を返します。

  • -- テーブルの作成
    create table mf_user (
    user_id string,
    user_info string
    );
    -- データの挿入
    insert into mf_user values('1','age:18;genda:f;address:abc'),('2','age:20;genda:m;address:bcd');
    -- クエリ
    SELECT user_id,
    KEYVALUE(user_info,';',':','age') as age,
    KEYVALUE(user_info,';',':','genda') as genda,
    KEYVALUE(user_info,';',':','address') as address
    FROM mf_user;
    -- KEYVALUE クエリと同等
    SELECT user_id,
    age,
    genda,
    address
    FROM mf_user LATERAL VIEW KEYVALUE_TUPLE(user_info,';', ':','age','genda','address') ui AS age,genda,address;

    結果は次のとおりです。

    +------------+------------+------------+------------+
    | user_id    | age        | genda      | address    |
    +------------+------------+------------+------------+
    | 1          | 18         | f          | abc        |
    | 2          | 20         | m          | bcd        |
    +------------+------------+------------+------------+

LENGTH

  • 構文

    bigint length(string <str>)
  • 説明

    文字列 str の長さを計算します。

  • パラメーター

    str: 必須。 STRING 型。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーを返します。

    • str が NULL の場合、NULL を返します。

    • str が UTF-8 でエンコードされていない場合、-1 を返します。

    • 例 1:文字列 Tech on the net の長さを計算します。 サンプル文:

      -- 15 を返します。
      select length('Tech on the net');
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select length(null);

LENGTHB

  • 構文

    bigint lengthb(string <str>)
  • 説明

    文字列 str のバイト長を計算します。

  • パラメーター

    str: 必須。 STRING 型。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーを返します。

    • str が NULL の場合、NULL を返します。

    • 例 1:文字列 Tech on the net のバイト長を計算します。 サンプル文:

      -- 15 を返します。
      select lengthb('Tech on the net');
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select lengthb(null);

LOCATE

  • 構文

    bigint locate(string <substr>, string <str>[, bigint <start_pos>]) 
  • 説明

    str の部分文字列 substr の位置を検索します。start_pos を使用して開始位置 (1 からカウント) を指定します。

  • パラメーター

    • substr: 必須。 STRING 型。検索する部分文字列。

    • str: 必須。 STRING 型。検索する文字列。

    • start_pos: オプション。 BIGINT 型。検索の開始位置。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • strsubstr が含まれていない場合、0 を返します。

    • str または substr が NULL の場合、NULL を返します。

    • start_pos が NULL の場合、0 を返します。

    • 例 1: 文字列 ab の位置を、文字列 abchelloabc 内で検索します。サンプル文:

      -- 1 を返します。
      select locate('ab', 'abchelloabc');
    • 例 2:文字列 abchelloabc 内の文字列 hi の位置を検索します。 サンプル文:

      -- 0 を返します。
      select locate('hi', 'abc,hello,ab,c');
    • 例 3:start_pos が NULL です。 サンプル文:

      -- 0 を返します。
      select locate('ab', 'abhelloabc', null);

LPAD

  • 構文

    string lpad(string <str1>, int <length>, string <str2>)
  • 説明

    文字列 str2 を使用して、文字列 str1length 文字に左詰めします。この関数は MaxCompute V2.0 の拡張機能です。

  • パラメーター

    • str1: 必須。 STRING 型。左詰めする文字列。

    • length: 必須。 INT 型。左詰めの文字数。

    • str2: 必須。パディング文字列。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • lengthstr1 の長さより短い場合、str1 の左端から length 文字を返します。

    • length が 0 の場合、空の文字列を返します。

    • 入力パラメーターがない場合、またはいずれかの入力パラメーターが NULL の場合、NULL を返します。

    • 例 1:文字列 12 を使用して、文字列 abcdefgh を 10 文字に左詰めします。サンプルコマンドは次のとおりです。

      -- 12abcdefgh を返します。
      select lpad('abcdefgh', 10, '12');
    • 例 2:文字列 12 を使用して、文字列 abcdefgh を 5 文字の長さに左詰めします。以下はサンプルコマンドです。

      -- abcde を返します。
      select lpad('abcdefgh', 5, '12');
    • 例 3:length が 0 です。 サンプル文:

      -- 空の文字列を返します。
      select lpad('abcdefgh' ,0, '12'); 
    • 例 4:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select lpad(null ,0, '12');

LTRIM

  • 構文

    string ltrim(string <str>[, <trimChars>])
    string trim(leading [<trimChars>] from <str>)
  • 説明

    str の左端から文字を削除します:

    • trimChars が指定されていない場合、デフォルトで先頭のスペースを削除します。

    • trimChars を指定した場合、関数は trimChars 内の文字をセットとして扱い、str の左端から、セット trimChars の文字のみで構成される最も長い部分文字列を削除します。

  • パラメーター

    • str: 必須。 STRING 型。トリミングする文字列。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME の場合、暗黙的に STRING に変換されます。

    • trimChars: オプション。 STRING 型。削除する文字。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーを返します。

    • str または trimChars が NULL の場合、NULL を返します。

    • 例 1:文字列 yxTxyomxx から先頭のスペースを削除します。 サンプル文:

      -- yxTxyomxx を返します。
      select ltrim(' yxTxyomxx ');
      -- 以下と同等です:
      select trim(leading from ' yxTxyomxx ');
    • 例 2:文字列 yxTxyomxx から、セット xy にあるすべての先頭文字を削除します。

      -- Txyomxx を返します。先頭の x または y は削除されます。
      select ltrim('yxTxyomxx', 'xy');
      -- 以下と同等です:
      select trim(leading 'xy' from 'yxTxyomxx');
    • 例 3:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select ltrim(null);
      select ltrim('yxTxyomxx', null);

MASK_HASH

  • 構文

    mask_hash(<expr>)
  • 説明

    文字列式 expr から計算されたハッシュ値を返します。同一のハッシュ値は、同一の式値を示します。

  • パラメーター

    expr: 必須。ハッシュ計算用の文字列式。STRING、CHAR、VARCHAR、BINARY 型をサポートします。

  • 戻り値

    64 バイトのハッシュ値を返します。文字列以外の式の場合、null を返します (Hive 互換)。

  • -- abc のハッシュを返します
    select mask_hash("abc");
    -- 戻り値
    +------------+
    | _c0        |
    +------------+
    | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
    +------------+
    
    -- 文字列以外の入力に対して NULL を返します
    select mask_hash(100);
    -- 戻り値
    +------------+
    | _c0        |
    +------------+
    | NULL       |
    +------------+

MD5

  • 構文

    string md5(string <str>)
  • 説明

    文字列 str の MD5 ハッシュを計算します。

  • パラメーター

    str: 必須。 STRING 型。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーを返します。

    • str が NULL の場合、NULL を返します。

    • 例 1:文字列 Tech on the net の MD5 ハッシュを計算します。 サンプル文:

      -- ddc4c4796880633333d77a60fcda9af6 を返します。
      select md5('Tech on the net');
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select md5(null);

PARSE_URL

  • 構文

    string parse_url(string <url>, string <part>[, string <key>])
  • 説明

    url を解析し、part で指定された情報を抽出します。

  • パラメーター

    • url: 必須。 STRING 型。URL リンク。無効な URL はエラーを返します。

    • part: 必須。 STRING 型。有効な値:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE、USERINFO (大文字と小文字を区別しない)。

    • key: オプション。part が QUERY の場合、key の値を返します。

  • 戻り値の説明

    STRING 型を返します。戻り値は次のルールに従います:

    • urlpart、または key が NULL の場合、NULL を返します。

    • part が無効な場合、エラーを返します。

  • -- example.com を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST');
    -- /over/there/index.dtb を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PATH');
    -- animal を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'QUERY', 'type');
    -- nose を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'REF');
    -- file を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PROTOCOL');
    -- username:password@example.com:8042 を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'AUTHORITY');
    -- username:password を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'USERINFO');

PARSE_URL_TUPLE

  • 構文

    string parse_url_tuple(string <url>, string <key1>, string <key2>,...)
  • 説明

    url を解析し、入力キー key1key2 などで指定された文字列を抽出します。PARSE_URL と似ていますが、複数のキーを同時に抽出し、パフォーマンスが向上します。

  • パラメーター

    • url: 必須。 STRING 型。URL リンク。無効な URL はエラーを返します。

    • key1, key2: 必須。 STRING 型。抽出するキー。有効な値:

      • HOST:ホストアドレス (ドメインまたは IP)。

      • PATH:サーバー上のネットワークリソースへのパス。

      • QUERY:クエリ文字列 (クエリするコンテンツ)。

      • REF:URL のフラグメント識別子を示します。これは # 記号の後のコンテンツです。

      • PROTOCOL:プロトコルタイプ。

      • AUTHORITY:サーバードメイン/IP、ポート、およびユーザー認証情報 (ユーザー名、パスワード)。

      • FILE:パスとクエリコンテンツ (PATH + QUERY)。

      • USERINFO:ユーザー認証情報。

      • QUERY:<KEY>:クエリ文字列内の指定されたキーの値。

      大文字と小文字を区別しません。無効な値はエラーを返します。

  • 戻り値の説明

    STRING 型を返します。url または key が NULL の場合、エラーを返します。

  • file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose から各キーの文字列を抽出します。 サンプル文:

    select parse_url_tuple('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'AUTHORITY', 'FILE', 'USERINFO', 'QUERY:type', 'QUERY:name') as (item0, item1, item2, item3, item4, item5, item6, item7, item8, item9);

    戻り値:

    +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
    | item0      | item1      | item2      | item3      | item4      | item5      | item6      | item7      | item8      | item9      |
    +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
    | example.com | /over/there/index.dtb | type=animal&name=narwhal | nose       | file       | username:password@example.com:8042 | /over/there/index.dtb?type=animal&name=narwhal | username:password | animal     | narwhal    |
    +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+

REGEXP_COUNT

  • 構文

    bigint regexp_count(string <source>, string <pattern>[, bigint <start_position>])
  • 説明

    source 内で start_position から開始し、指定された pattern に一致する部分文字列をカウントします。

  • パラメーター

    • source: 必須。 STRING 型。検索する文字列。その他の型はエラーを返します。

    • pattern: 必須。 STRING 定数または正規表現。一致させるパターン。正規表現のガイドラインの詳細については、「RLIKE 文字列照合」をご参照ください。空または無効な pattern はエラーを返します。

    • start_position: オプション。BIGINT 型の定数。このパラメーターの値は 0 より大きい必要があります。値が別のデータ型であるか、0 以下の場合、エラーが返されます。このパラメーターを指定しない場合、デフォルト値は 1 です。この値は、検索が source 文字列の最初の文字から始まることを示します。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • 一致が見つからない場合、0 を返します。

    • sourcepattern、または start_position が NULL の場合、NULL を返します。

    • 例 1:指定された位置から abababc 内の一致する部分文字列をカウントします。 サンプル文:

      -- 1 を返します。
      select regexp_count('abababc', 'a.c');
      -- 2 を返します。
      select regexp_count('abababc', '[[:alpha:]]{2}', 3);
    • 例 2:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select regexp_count('abababc', null);
    • 例 3:JSON 文字列 {"account_id":123456789,"account_name":"allen","location":"hangzhou","bill":100} 内の : の出現回数をカウントします。 サンプル文:

      -- 4 を返します。
      select regexp_count('{"account_id":123456789,"account_name":"allen","location":"hangzhou","bill":100}',':');

REGEXP_EXTRACT

  • 構文

    string regexp_extract(string <source>, string <pattern>[, bigint <groupid>])
    説明

    Hive 互換のデータ型バージョンでは、REGEXP_EXTRACT は Java の正規表現仕様に従います。1.0 および 2.0 のデータ型バージョンでは、MaxCompute の仕様に従います。

  • 説明

    文字列 sourcepattern を使用してグループに分割し、グループ groupid から文字列を返します。

  • パラメーター

    • source: 必須。 STRING 型。分割する文字列。

    • pattern: 必須。 STRING 定数または正規表現。一致させるパターン。正規表現のガイドラインの詳細については、「RLIKE 文字列照合」をご参照ください。

    • groupid: オプション。BIGINT 定数、≥0 である必要があります。

    説明

    データは UTF-8 形式で保存されます。中国語の文字は、16 進数で [\\x{4e00},\\x{9fa5}] の範囲内で表現できます。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • pattern が空の文字列であるか、pattern にグループが指定されていない場合、エラーが返されます。

    • groupid が BIGINT 型でないか、0 未満の場合、エラーが返されます。このパラメーターを指定しない場合、デフォルト値は 1 で、最初のグループの部分文字列が返されることを示します。groupid が 0 に設定されている場合、pattern 全体に一致する部分文字列が返されます。

    • sourcepattern、または groupid が NULL の場合、NULL を返します。

REGEXP_EXTRACT_ALL

  • 構文

    array<T> regexp_extract_all(string <source>, string <pattern>[,bigint <group_id>])
  • 説明

    文字列内で正規表現パターンに一致するすべての部分文字列を検索し、配列として返します。

  • パラメーター

    • source: 必須。 STRING 型。解析する文字列。

    • pattern: 必須。 STRING 型。一致させるパターン。これは STRING 定数または正規表現にすることができます。正規表現のガイドラインの詳細については、「RLIKE 文字列照合」をご参照ください。

    • group_id: オプション。BIGINT 値。このパラメーターは、パターンの一致に使用されるグループの ID を指定します。このパラメーターの値は 0 以上である必要があります。このパラメーターを指定しない場合、group_id1 のグループがパターンの一致に使用されます。このパラメーターを 0 に設定すると、pattern は全体として一致します。

  • 戻り値

    ARRAY 値が返されます。group_id を指定した場合、指定された group_id のすべての一致結果を含む配列が返されます。group_id を指定しない場合、group_id 1 のすべての一致結果を含む配列が返されます。

    • group_id を指定しない場合、デフォルトの動作は最初の group_id に一致する結果を返すことです。

      SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)');

      戻り値:

      +------------+
      | _c0        |
      +------------+
      | [100,300] |
      +------------+
    • group_id の値を 2 に設定すると、2 番目の group_id の一致結果が返されます。

      SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)',2);

      結果は次のとおりです。

      +------------+
      | _c0        |
      +------------+
      | [200,400] |
      +------------+

REGEXP_INSTR

  • 構文

    bigint regexp_instr(string <source>, string <pattern>[,bigint <start_position>[, bigint <occurrence>[, bigint <return_option>]]])
  • 説明

    source 内で start_position から開始し、pattern に一致する部分文字列の指定された occurrence の開始位置または終了位置を返します。

  • パラメーター

    • source: 必須。ソース文字列。データ型は STRING である必要があります。

    • pattern: 必須。一致させるパターン。値は STRING 定数または正規表現にすることができます。正規表現の詳細については、「RLIKE 文字列照合」をご参照ください。空の pattern はエラーを返します。

    • start_position: オプション。検索を開始する位置。値は BIGINT 定数である必要があります。デフォルト値は 1 です。

    • occurrence: オプション。検索する一致の出現回数。値は BIGINT 定数である必要があります。デフォルト値は 1 で、最初の一致を示します。

    • return_option: オプション。返す位置。値は BIGINT 定数である必要があります。有効な値:0 は開始位置を指定し、1 は終了位置を指定します。デフォルト値は 0 です。無効な値を指定すると、エラーが返されます。

  • 戻り値

    戻り値は BIGINT 型です。return_option パラメーターは、source 内の一致した部分文字列の開始位置または終了位置を返すかどうかを指定します。戻り値は、次のルールによって決定されます:

    • pattern が空の場合、エラーが返されます。

    • start_position または occurrence の値が BIGINT 定数でないか、0 以下の場合、エラーが返されます。

    • sourcepatternstart_positionoccurrence、または return_option の値が NULL の場合、NULL が返されます。

    • 例 1:文字列 i love www.taobao.com 内で、位置 3 から開始して、o[[:alpha:]]{1} に一致する部分文字列の 2 回目の出現の開始位置を返します。 サンプル文:

      -- 14 を返します。
      select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2);
    • 例 2:文字列 i love www.taobao.com 内で、o[[:alpha:]]{1} に一致する部分文字列の 2 回目 の出現の終了位置を返します。検索は 3 番目 の文字から始まります。 サンプル文:

      -- 16 を返します。
      select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2, 1);
    • 例 3:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select regexp_instr('i love www.taobao.com', null, 3, 2);

REGEXP_REPLACE

  • 構文

    string regexp_replace(string <source>, string <pattern>, string <replace_string>[, bigint <occurrence>])
    説明

    Hive 互換のデータ型の場合、REGEXP_REPLACE 関数は Java の正規表現仕様に従います。データ型 1.0 および 2.0 の場合、MaxCompute 仕様に従います。

  • 説明

    source 文字列内の occurrence で指定された位置で pattern に一致する部分文字列を replace_string に置き換え、結果を返します。

  • パラメーター

    • source: 必須。STRING 型の値。これは変更するソース文字列です。

    • pattern: 必須。STRING 定数または正規表現。これは一致させるパターンです。正規表現のルールの詳細については、「RLIKE 文字列照合」をご参照ください。pattern が空の場合、エラーが返されます。

    • replace_string: 必須。STRING 型の値。これは pattern に一致する部分文字列を置き換える文字列です。

      説明
      • replace_string が空の文字列の場合、関数は pattern に一致する部分文字列を削除します。

      • replace_string には、\n の形式の後方参照を含めることができ、pattern 内の n 番目のキャプチャグループに一致する部分文字列を挿入します。n の値は 1 から 9 までの整数にすることができます。\0 は pattern に一致する部分文字列全体を挿入します。バックスラッシュをエスケープする (\\1 など) か、raw 文字列 (R'(\1)' など) を使用する必要があります。

    • occurrence: オプション。0 以上の BIGINT 型の定数。このパラメーターの値は、occurrence で指定された n 番目の出現で指定されたパターンに一致する文字列が replace_string に置き換えられることを示します。このパラメーターが 0 に設定されている場合、指定されたパターンに一致するすべての部分文字列が置き換えられます。別のデータ型であるか、0 未満の場合、エラーが返されます。デフォルト値:0。

  • 戻り値

    STRING 型の値が返されます。戻り値は、次のルールによって決定されます:

    • 存在しないグループを参照した場合、結果は未定義です。

    • replace_string が NULL で、pattern の一致が見つかった場合、NULL が返されます。

    • replace_string が NULL で、pattern が一致しない場合、関数は元の文字列を返します。

    • sourcepattern、または occurrence が NULL の場合、NULL が返されます。

    • 例 1:指定されたルールに基づいて部分文字列を置き換えます。

      -- Abcd を返します。
      select regexp_replace("abcd", "a", "A", 0);
      -- bcd を返します。
      select regexp_replace("abcd", "a", "", 0);
      -- 19700101 を返します。
      select regexp_replace("1970-01-01", "-", "", 0);
      -- abc を返します。
      select regexp_replace("a1b2c3", "[0-9]", "", 0);
      -- a1b2c を返します。
      select regexp_replace("a1b2c3", "[0-9]", "", 3);
    • 例 2:文字列 123.456.7890 内のパターン ([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4}) のすべての一致を (\\1)\\2-\\3 に置き換えます。 サンプル文:

      -- (123)456-7890 を返します。
      select regexp_replace('123.456.7890', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})',
      '(\\1)\\2-\\3', 0);
    • 例 3:指定されたルールに基づいて、文字列 abcd 内のパターンに一致する部分文字列を置き換えます。 サンプル文:

      -- a b c d を返します。
      select regexp_replace('abcd', '(.)', '\\1 ', 0);
      -- a bcd を返します。
      select regexp_replace('abcd', '(.)', '\\1 ', 1);
      -- d を返します。
      select regexp_replace("abcd", "(.*)(.)$", "\\2", 0);
    • 例 4:url_set テーブルには、値が www.simple@xxx.com の形式である URL 列が含まれています。xxx 部分は各行で一意です。この例では、www の後のすべての文字を置き換えます。 サンプル文:

      -- wwwtest を返します。
      select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;
    • 例 5:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select regexp_replace('abcd', '(.)', null, 0);
    • 例 6:存在しないグループを参照します。 サンプル文:

      -- パターンは 1 つのグループのみを定義します。2 番目のグループ参照は存在しません。
      -- この使用法は避けてください。結果は未定義です。
      regexp_replace("abcd", "(.)", "\\2", 0) = "" or "abcd"
      -- パターンにはグループがありません。\1 は存在しないグループを参照します。
      -- この使用法は避けてください。結果は未定義です。
      regexp_replace("abcd", "a", "\\1", 0) = "bcd" or "abcd"

REGEXP_SUBSTR

  • 構文

    string regexp_substr(string <source>, string <pattern>[, bigint <start_position>[, bigint <occurrence>]])
  • 説明

    source 文字列内の start_position から、occurrence 回目に pattern に一致する部分文字列を返します。

  • パラメーター

    • source: 必須。 STRING 型。検索する文字列。

    • pattern: 必須。 STRING 定数または正規表現。一致させるパターン。正規表現の構文については、「RLIKE 文字列照合」をご参照ください。

    • start_position: オプション。BIGINT 定数。値は 0 より大きい必要があります。このパラメーターを指定しない場合、デフォルト値は 1 で、source 文字列の最初の文字から検索が開始されることを示します。

    • occurrence: オプション。BIGINT 定数。値は 0 より大きい必要があります。デフォルト値は 1 で、最初の一致を示します。

  • 戻り値

    STRING を返します。戻り値は次のルールに従います:

    • pattern が空の場合、エラーが発生します。

    • 一致が見つからない場合、NULL を返します。

    • start_position または occurrence が BIGINT でないか、0 以下の場合、エラーが発生します。

    • sourcepatternstart_position、または occurrence が NULL の場合、NULL を返します。

    • 例 1:I love aliyun very much 内で指定されたパターンに一致する部分文字列を返します。 サンプル文:

      -- aliyun を返します。
      select regexp_substr('I love aliyun very much', 'a[[:alpha:]]{5}');
      -- have を返します。
      select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1);
      -- 2 を返します。
      select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 2);
    • 例 2:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select regexp_substr('I love aliyun very much', null);

REPEAT

  • 構文

    string repeat(string <str>, bigint <n>)
  • 説明

    文字列 strn 回繰り返した文字列を返します。

  • パラメーター

    • str: 必須。 STRING 型。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。

    • n: 必須。 BIGINT 型。値のサイズは 2 MB を超えてはなりません。

  • 戻り値

    STRING 型の値を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME 型でない場合、エラーが返されます。

    • n が空の場合、エラーが返されます。

    • str または n のいずれかが NULL の場合、NULL が返されます。

    • 例 1:文字列 abc5 回繰り返します。 サンプル文:

      -- abcabcabcabcabc を返します。
      select repeat('abc', 5); 
    • 例 2:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select repeat('abc', null);

REPLACE

  • 構文

    string replace(string <str>, string <old>, string <new>)
  • 説明

    str 内の old のすべての出現を new に置き換え、変更された str を返します。一致が見つからない場合、元の str が返されます。この関数は MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • str: 必須。 STRING 型。ソース文字列。

    • old: 必須。比較する文字列。

    • new: 必須。 STRING 型。置換文字列。

  • 戻り値

    STRING 型の値を返します。いずれかの入力パラメーターが NULL の場合、NULL が返されます。

    • 例 1:文字列 ababab 内の部分文字列 abab のすべての出現を 12 に置き換えます。 サンプル文:

      -- 12ab を返します。
      select replace('ababab','abab','12');
    • 例 2:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select replace('123abab456ab',null,'abab');

REVERSE

  • 構文

    string reverse(string <str>)
  • 説明

    文字列 str の逆順を返します。

  • パラメーター

    str: 必須。STRING 型のパラメーター。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME 値の場合、暗黙的に STRING 型に変換されます。

  • 戻り値

    STRING 型の値を返します。次のルールが適用されます:

    • str のデータ型が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーが返されます。

    • str が NULL の場合、NULL が返されます。

    • 例 1:文字列 I love aliyun very much を逆順にします。 サンプル文:

      -- hcum yrev nuyila evol I を返します。
      select reverse('I love aliyun very much');
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select reverse(null);

RPAD

  • 構文

    string rpad(string <str1>, int <length>, string <str2>)
  • 説明

    パディング文字列 str2 を使用して、文字列 str1length 文字に右詰めします。この関数は MaxCompute V2.0 の拡張機能です。

  • パラメーター

    • str1: 必須。 STRING 型。右詰めする文字列。

    • length: 必須。 INT 型。0 以上である必要があります。パディングされた結果の文字数を指定します。

    • str2 (必須):パディングに使用される文字列。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • lengthstr1 の長さより短い場合、str1 の左端から length 文字を返します。

    • length が 0 の場合、空の文字列を返します。

    • 入力パラメーターがない場合、またはいずれかの入力パラメーターが NULL の場合、NULL を返します。

    • 例 1:パディング文字列 12 を使用して、文字列 abcdefgh を 10 文字に右詰めします。 サンプル文:

      -- abcdefgh12 を返します。
      select rpad('abcdefgh', 10, '12');
    • 例 2:パディング文字列 12 を使用して、文字列 abcdefgh を 5 文字に右詰めします。 サンプル文:

      -- abcde を返します。
      select rpad('abcdefgh', 5, '12');
    • 例 3:length が 0 です。 サンプル文:

      -- 空の文字列を返します。
      select rpad('abcdefgh' ,0, '12'); 
    • 例 4:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select rpad(null ,0, '12');

RTRIM

  • 構文

    string rtrim(string <str>[, <trimChars>])
    string trim(trailing [<trimChars>] from <str>)
  • 説明

    str の右端から文字を削除します:

    • trimChars が指定されていない場合、デフォルトでスペースがトリミングされます。

    • trimChars が指定されている場合、trimChars 内の文字はコレクションとして扱われます。str の右端から、trimChars コレクションの文字のみで構成される最も長い部分文字列が削除されます。

  • パラメーター

    • str: 必須。 STRING 型。トリミングする文字列。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME の場合、暗黙的に STRING に変換されます。

    • trimChars: オプション。 STRING 型。削除する文字。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーを返します。

    • str または trimChars が NULL の場合、NULL を返します。

    • 例 1:文字列 yxTxyomxx から末尾のスペースを削除します。 サンプル文:

      --  yxTxyomxx を返します。
      select rtrim(' yxTxyomxx ');
      -- 以下と同等です:
      select trim(trailing from ' yxTxyomxx ');
    • 例 2:文字列 yxTxyomxx から、セット xy に属するすべての末尾文字を削除します。

      -- yxTxyom を返します。末尾の x または y は削除されます。
      select rtrim('yxTxyomxx', 'xy');
      -- 以下と同等です:
      select trim(trailing 'xy' from 'yxTxyomxx');
    • 例 3:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select rtrim(null);
      select rtrim('yxTxyomxx', null);

SOUNDEX

  • 構文

    string soundex(string <str>)
  • 説明

    標準の文字列を SOUNDEX 文字列に変換します。

  • パラメーター

    str: 必須。変換する文字列。このパラメーターは STRING 型です。この関数は MaxCompute V2.0 の拡張機能です。

  • 戻り値

    戻り値は STRING 型です。str が NULL の場合、関数は NULL を返します。

    • 例 1:文字列 hello を SOUNDEX 文字列に変換します。 例の文:

      -- H400 を返します。
      select soundex('hello');
    • 例 2:入力パラメーターが NULL です。 例の文:

      -- NULL を返します。
      select soundex(null);

SPACE

  • 構文

    string space(bigint <n>)
  • 説明

    n 個のスペースで構成される文字列を生成します。

  • パラメーター

    n: 必須。 BIGINT 型。値のサイズは 2 MB を超えてはなりません。

  • 戻り値

    STRING を返します。戻り値は次のルールに従います:

    • n が空の場合、エラーが返されます。

    • n が NULL の場合、NULL が返されます。

  • -- 10 を返します。
    select length(space(10));

SPLIT

  • 構文

    ARRAY<STRING> SPLIT(STRING <source>, STRING <delimiter>[, BOOLEAN <trimTailEmpty>])
    
    -- 標準例。
    -- ["a","b","c"] を返します。
    SELECT SPLIT('a,b,c', ',');
  • パラメーター

    • source: 必須。分割する文字列。データ型は STRING です。

    • delimiter: 必須。文字列の分割に使用される区切り文字。このパラメーターは正規表現をサポートします。データ型は STRING です。

    • trimTailEmpty: オプション。末尾の空文字列を保持するかどうかを指定します。デフォルト値は true です。このパラメーターを false に設定すると、末尾の空文字列が保持されます。データ型は BOOLEAN です。

  • 戻り値

    ARRAY<STRING> 型の値を返します。

    • 例 1:カンマを使用して文字列を分割します。

      -- ["a","b","c"] を返します。
      SELECT SPLIT('a,b,c', ',');
    • 例 2:区切り文字が存在しない場合の処理。

      -- ["a,b,c"] を返します。
      SELECT SPLIT('a,b,c', ':');
    • 例 3:連続する区切り文字の処理。これにより、空の文字列要素が作成されます。

      -- ["a","","b"] を返します。
      SELECT SPLIT('a,,b', ',');
    • 例 4:複数文字の区切り文字を使用します。

      -- ["a","b","c"] を返します。
      SELECT SPLIT('a::b::c', '::');
    • 例 5:末尾の空文字列を保持します。

      -- デフォルトでは、末尾の空文字列は返されません。
      -- ["a","b","c"] を返します。
      SELECT SPLIT('a,b,c,,', ',');
      
      -- 末尾の空文字列を返します。
      -- ["a","b","c","",""] を返します。
      SELECT SPLIT('a,b,c,,', ',', false);
    • 例 6:エスケープ文字または特殊文字を区切り文字として使用します。

      -- 改行で分割します。
      -- ["hello","world"] を返します。
      SELECT SPLIT('hello\nworld', '\n');  
      
      -- タブ文字で分割します。
      -- ["a","b","c"] を返します。
      SELECT SPLIT('a\tb\tc', '\t');  
      
      -- キャリッジリターンで分割します。
      -- ["line1","line2"] を返します。
      SELECT SPLIT('line1\rline2', '\r');  
      
      -- バックスラッシュをエスケープします。
      -- ["a","b","c"] を返します。
      SELECT SPLIT('a\\b\\c', '\\\\');  
    • 例 7:NULL 入力の処理。

      -- いずれかのパラメーターが NULL の場合、関数は NULL を返します。
      -- NULL を返します。
      SELECT SPLIT(NULL, ',');
      
      -- NULL を返します。
      SELECT SPLIT('a,b,c', NULL);
      
      -- NULL を返します。
      SELECT SPLIT('a,b,c', ',', NULL);

SPLIT_PART

  • 構文

    string split_part(string <str>, string <separator>, bigint <start>[, bigint <end>])
  • 説明

    デリミタ separator を使用して文字列 str を分割し、パート start から end (閉区間) までの部分文字列を返します。

  • パラメーター

    • str: 必須。 STRING 型。分割する文字列。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。

    • separator: 必須。 STRING 定数。デリミタ (単一の文字または文字列)。

    • start: 必須。BIGINT 定数、0 より大きい必要があります。開始パート番号 (1 からカウント)。

    • end: start 以上の BIGINT 定数。このパラメーターは、返す終了セグメント番号を指定します。このパラメーターが指定されていない場合、その値は start の値にデフォルト設定され、start で指定されたセグメントのみが返されます。

  • 戻り値の説明

    STRING を返します。戻り値は次のルールに従います:

    • start が実際のパート数を超える場合 (たとえば、6 つのパートがあるが start > 6 の場合)、空の文字列が返されます。

    • separatorstr に見つからず、start = 1 の場合、str 全体が返されます。str が空の場合、空の文字列が返されます。

    • separator が空の場合、元の str が返されます。

    • end がパート数を超える場合、start から最後のパートまでの部分文字列が返されます。

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME 型でない場合、エラーが返されます。

    • separator が STRING 定数でない場合、エラーが返されます。

    • start または end が BIGINT 定数でない場合、エラーが返されます。

    • separator を除くいずれかのパラメーターが NULL の場合、NULL が返されます。

    • 例 1:デリミタ , を使用して文字列 a,b,c,d を分割し、指定されたパートを返します。 サンプル文:

      -- a を返します。
      select split_part('a,b,c,d', ',', 1);
      -- a,b を返します。
      select split_part('a,b,c,d', ',', 1, 2);
    • 例 2:start が実際のパート数を超えています。 サンプル文:

      -- 空の文字列を返します。
      select split_part('a,b,c,d', ',', 10);
    • 例 3:separatorstr に見つかりません。 サンプル文:

      -- a,b,c,d を返します。
      select split_part('a,b,c,d', ':', 1);
      -- 空の文字列を返します。
      select split_part('a,b,c,d', ':', 2);
    • 例 4:separator が空です。 サンプル文:

      -- a,b,c,d を返します。
      select split_part('a,b,c,d', '', 1);
    • 例 5:end が実際のパート数を超えています。 サンプル文:

      -- b,c,d を返します。
      select split_part('a,b,c,d', ',', 2, 6);
    • 例 6:separator を除く入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select split_part('a,b,c,d', ',', null);

SUBSTR

  • 構文

    string substr(string <str>, bigint <start_position>[, bigint <length>])
  • 説明

    strstart_position から始まる、長さ length の部分文字列を返します。

  • パラメーター

    • str: 必須。 STRING 型。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME の場合、暗黙的に STRING に変換されます。

    • start_position: 必須。 BIGINT 型。デフォルトの開始位置は 1 です。

      • Hive 互換のデータ型バージョン:start_position=0 の場合、位置 1 と同じように動作します。

      • 1.0 および 2.0 のデータ型バージョン:start_position=0 の場合、NULL を返します。

    • length: オプション。 BIGINT 型。部分文字列の長さは >0 である必要があります。

      重要
      • setproject odps.function.strictmode=false の場合:length<0 は空白を返します。

      • setproject odps.function.strictmode=true の場合:length<0 はエラーを返します。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DECIMAL、DOUBLE、または DATETIME でない場合、エラーを返します。

    • length が BIGINT でないか、≤0 の場合、エラーを返します。

    • length を省略した場合、部分文字列は str の末尾まで拡張されます。

    • strstart_position、または length が NULL の場合、NULL を返します。

    • 例 1:指定された位置から指定された長さの abc の部分文字列を返します。 サンプル文:

      -- bc を返します。
      select substr('abc', 2);
      -- b を返します。
      select substr('abc', 2, 1);
      -- bc を返します。
      select substr('abc',-2 , 2);
    • 例 2:入力パラメーターが NULL の場合。 サンプル文:

      -- NULL を返します。
      select substr('abc', null);

SUBSTRING

  • 構文

    string substring(string|binary <str>, int <start_position>[, int <length>])
  • 説明

    strstart_position から始まる、長さ length の部分文字列を返します。

  • パラメーター

    • str: 必須。このパラメーターは STRING または BINARY 型です。

    • start_position: 必須。このパラメーターは INT 型です。開始位置は 1 ベースです。start_position が 0 の場合、空の文字列が返されます。start_position が負の値の場合、位置は文字列の末尾から逆方向にカウントされます。この場合、-1 は最後の文字を指し、カウントは逆方向に順次進みます。

    • length: オプション。このパラメーターは BIGINT 型です。部分文字列の長さは 0 より大きい必要があります。

  • 戻り値

    戻り値は STRING 型です。次のルールに従います:

    • str が STRING または BINARY 型でない場合、エラーが返されます。

    • length が BIGINT 型でないか、0 以下の場合、エラーが返されます。

    • length パラメーターを省略した場合、str の末尾までの部分文字列が返されます。

    • strstart_position、または length が NULL の場合、NULL が返されます。

    • 例 1:この例では、指定された位置から指定された長さの abc の部分文字列を返します。 サンプル文:

      -- bc を返します。
      select substring('abc', 2);
      -- b を返します。
      select substring('abc', 2, 1);
      -- bc を返します。
      select substring('abc',-2,2);
      -- ab を返します。
      select substring('abc',-3,2);
      -- 001 を返します。
      substring(bin(2345), 2, 3);
    • 例 2:この例は、入力パラメーターの 1 つが NULL の場合を示しています。 サンプル文:

      -- NULL を返します。
      select substring('abc', null, null);

SUBSTRING_INDEX

  • 構文

    string substring_index(string <str>, string <separator>, int <count>)
  • 説明

    この関数は、str 文字列から、デリミタの count 回目の出現の前または後の部分文字列を抽出します。count が正の場合、デリミタの検索は左から始まります。count が負の場合、検索は右から始まります。この関数は MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • str: 必須。STRING 型。抽出元の文字列です。

    • separator: 必須。STRING 型のデリミタ。

    • count: 必須。区切り文字の位置を指定する INT 値。

  • 戻り値

    関数は STRING 型の値を返します。いずれかの入力パラメーターが NULL の場合、関数は NULL を返します。

    • 例 1:文字列 https://www.alibabacloud.com から抽出します。 サンプル文:

      -- https://www.alibabacloud を返します。
      select substring_index('https://www.alibabacloud.com', '.', 2);
      -- alibabacloud.com を返します。
      select substring_index('https://www.alibabacloud.com', '.', -2);
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select substring_index('https://www.alibabacloud.com', null, 2);

TO_CHAR

  • 構文

    string to_char(boolean <value>)
    string to_char(bigint <value>)
    string to_char(double <value>)
    string to_char(decimal <value>)
  • 説明

    BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型の値を STRING 表現に変換します。

  • パラメーター

    value: 必須。BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型の値。

  • 戻り値

    STRING 型の値を返します。戻り値は次のルールに従います:

    • value が BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型でない場合、関数はエラーを返します。

    • value が NULL の場合、関数は NULL を返します。

    • 例 1:値を STRING 表現に変換します。 サンプル文:

      -- 123 を返します。
      select to_char(123);
      -- TRUE を返します。
      select to_char(true);
      -- 1.23 を返します。
      select to_char(1.23);
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select to_char(null);

TO_JSON

  • 構文

    string to_json(<expr>)
  • 説明

    指定された複合データ型の expr で指定された式を JSON 文字列に変換します。

  • パラメーター

    expr: 必須。ARRAY、MAP、または STRUCT 型の式。

    説明

    入力式が STRUCT 型 (struct<key1:value1, key2:value2>) の場合、次の点に注意してください:

    • 式を JSON 文字列に変換すると、すべてのキーは小文字に変換されます。

    • value が null の場合、value が属するキーと値のペアは、返される JSON 文字列に含まれません。たとえば、value2 が null の場合、key2:value2 は返される JSON 文字列に含まれません。

  • 戻り値

    JSON 文字列が返されます。

    • 例 1:指定された複合データ型の式を JSON 文字列に変換します。 サンプル文:

      -- 戻り値は {"a":1,"b":2} です。
      select to_json(named_struct('a', 1, 'b', 2));
      -- 戻り値は {"time":"26/08/2015"} です。
      select to_json(named_struct('time', "26/08/2015"));
      -- 戻り値は [{"a":1,"b":2}] です。
      select to_json(array(named_struct('a', 1, 'b', 2)));
      -- 戻り値は {"a":{"b":1}} です。
      select to_json(map('a', named_struct('b', 1)));
      -- 戻り値は {"a":1} です。
      select to_json(map('a', 1));
      -- 戻り値は [{"a":1}] です。
      select to_json(array((map('a', 1))));
    • 例 2:入力式は STRUCT 型です。 サンプル文:

      -- 戻り値は {"a":"B"} です。STRUCT 型の式を JSON 文字列に変換すると、すべてのキーは小文字に変換されます。
      select to_json(named_struct("A", "B"));
      -- 戻り値は {"k2":"v2"} です。null が属するキーと値のペアは、返される JSON 文字列に含まれません。
      select to_json(named_struct("k1", cast(null as string), "k2", "v2"));

TOLOWER

  • 構文

    string tolower(string <source>)
  • 説明

    文字列 source 内の英語の大文字を小文字に変換します。

  • パラメーター

    source: 必須。STRING 型の値。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME 値の場合、暗黙的に STRING 型に変換されます。この関数は英語の文字のみを操作します。

  • 戻り値

    STRING 型の値を返します。返される値は、次のルールに基づいています:

    • source のデータ型が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーが返されます。

    • source が NULL の場合、NULL が返されます。

    • 例 1:大文字を小文字に変換します。 サンプル文:

      -- abcd を返します。
      select tolower('aBcd');
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select tolower(null);

TOUPPER

  • 構文

    string toupper(string <source>)
  • 説明

    source 文字列内の小文字を対応する大文字に変換します。

  • パラメーター

    source: 必須。 STRING 型。入力が BIGINT、DOUBLE、DECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。英語の文字のみをサポートします。

  • 戻り値

    STRING 型の値を返します。返される値は、次のルールに基づいています:

    • source のデータ型が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーが返されます。

    • source が NULL の場合、NULL が返されます。

    • 例 1:小文字を大文字に変換します。 サンプル文:

      -- ABCD を返します。
      select toupper('aBcd');
    • 例 2:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select toupper(null);

TRANSLATE

  • 構文

    string translate(string|varchar <str1>, string|varchar <str2>, string|varchar <str3>)
  • 説明

    str1 内の str2 に出現する各文字を、str3 内の対応する文字に置き換えます。一致が見つからない場合、置換は行われません。この関数は MaxCompute V2.0 の拡張機能です。

  • 戻り値

    STRING を返します。いずれかの入力パラメーターが NULL の場合、関数は NULL を返します。

    • 例 1:ababab 内の abab に出現する各文字を、cd 内の対応する文字に置き換えます。 サンプル文:

      -- cdcdcd を返します。
      select translate('ababab','abab','cd');
    • 例 2:ababab 内の abab に出現する各文字を、cdefg 内の対応する文字に置き換えます。 サンプル文:

      -- cdcdcd を返します。
      select translate('ababab','abab','cdefg');
    • 例 3:入力パラメーターの 1 つが NULL です。 サンプル文:

      -- NULL を返します。
      select translate('ababab','cd',null);

TRIM

  • 構文

    string trim(string <str>[,<trimChars>])
    string trim([BOTH] [<trimChars>] from <str>)
  • 説明

    str の両端から文字を削除します:

    • trimChars を指定しない場合、関数はデフォルトでスペースを削除します。

    • trimChars を指定した場合、関数は trimChars 内の文字をセットとして扱い、str の左右両端からこのセットの文字のみで構成される最も長い部分文字列を削除します。

  • パラメーター

    • str: 必須。 STRING 型。トリミングする文字列。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME の場合、暗黙的に STRING に変換されます。

    • trimChars: オプション。 STRING 型。削除する文字。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • str が STRING、BIGINT、DOUBLE、DECIMAL、または DATETIME でない場合、エラーを返します。

    • str または trimChars が NULL の場合、NULL を返します。

    • 例 1:文字列 yxTxyomxx の両端からスペースを削除します。 サンプル文:

      -- yxTxyomxx を返します。
      select trim(' yxTxyomxx ');
      -- 以下と同等です:
      select trim(both from ' yxTxyomxx ');
      select trim(from ' yxTxyomxx ');
    • 例 2:文字列 yxTxyomxx の両端から、セット xy に属するすべての文字を削除します。

      -- Txyom を返します。両端の x または y は削除されます。
      select trim('yxTxyomxx', 'xy');
      -- 以下と同等です:
      select trim(both 'xy' from 'yxTxyomxx');
      select trim('xy' from 'yxTxyomxx');
    • 例 3:入力パラメーターが NULL です。 サンプル文:

      -- NULL を返します。
      select trim(null);
      select trim('yxTxyomxx', null);

URL_DECODE

  • 構文

    string url_decode(string <input>[, string <encoding>])
  • 説明

    入力文字列を application/x-www-form-urlencoded MIME 形式から標準文字に変換します。この関数は url_encode の逆です。エンコードルールは次のとおりです:

    • a–z および A–Z は変更されません。

    • ピリオド (.)、ハイフン (-)、アスタリスク (*)、およびアンダースコア (_) は変更されません。

    • プラス記号 (+) はスペースに変換されます。

    • %xy 形式のシーケンスはバイト値に変換されます。連続するバイトは、指定された encoding 名を使用して文字列にデコードされます。

    • 他のすべての文字は変更されません。

  • パラメーター

    • input: このパラメーターは必須で、STRING 型です。入力文字列を表します。

    • encoding: このパラメーターはオプションで、エンコード形式を指定します。GBK や UTF-8 などの形式をサポートします。指定しない場合、デフォルトのエンコーディングは UTF-8 です。

  • 戻り値

    この関数は UTF-8 でエンコードされた STRING 型を返します。input または encoding パラメーターが NULL の場合、関数は NULL を返します。

  • -- examplefor url_decode:// (fdsf) を返します。
    select url_decode('%E7%A4%BA%E4%BE%8Bfor+url_decode%3A%2F%2F+%28fdsf%29');
    -- Example for URL_DECODE:// dsf(fasfs) を返します。
    select url_decode('Example+for+url_decode+%3A%2F%2F+dsf%28fasfs%29', 'GBK');

URL_ENCODE

  • 構文

    string url_encode(string <input>[, string <encoding>])
  • 説明

    入力文字列を application/x-www-form-urlencoded MIME 形式でエンコードします。エンコードルール:

    • 文字 a–z および A–Z は変更されません。

    • ピリオド (.)、ハイフン (-)、アスタリスク (*)、およびアンダースコア (_) は変更されません。

    • スペースはプラス記号 (+) に変換されます。

    • 他のすべての文字は、指定された encoding を使用してバイト値に変換されます。各バイトは %xy として表示されます。ここで、xy は文字の 16 進数表現です。

  • パラメーター

    • input: 必須。 STRING 型。入力する文字列。

    • encoding: オプション。エンコード形式。GBK や UTF-8 などの形式をサポートします。指定しない場合、デフォルトは UTF-8 です。

  • 戻り値

    STRING を返します。input または encoding が NULL の場合、NULL を返します。

  • -- %E7%A4%BA%E4%BE%8Bfor+url_encode%3A%2F%2F+%28fdsf%29 を返します。
    select url_encode('examplefor url_encode:// (fdsf)');
    -- Example+for+url_encode+%3A%2F%2F+dsf%28fasfs%29 を返します。
    select url_encode('Example for url_encode:// dsf(fasfs)', 'GBK');

関連ドキュメント

ビルトイン関数を超えて拡張するには、ユーザー定義関数 (UDF) を作成します。詳細については、「概要」をご参照ください。