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

MaxCompute:組み込み関数に関するFAQ

最終更新日:Dec 16, 2024

このトピックでは、MaxComputeの組み込み関数に関するよくある質問に対する回答を提供します。

カテゴリよくある質問
日付関数
数学関数ROUND関数を使用してDOUBLE型のデータを丸めると、予期しない結果が返されるのはなぜですか。
Window 関数MaxComputeで自動インクリメントシーケンスを設定するために使用できる関数は何ですか?
集計関数フィールドの値を連結するにはどうすればよいですか?
文字列関数
複合型関数
その他の関数
暗黙の変換MaxComputeの組み込み関数を使用すると、暗黙的なデータ型変換エラーが発生した場合はどうすればよいですか。

MaxComputeの組み込み関数は、2010/1/3から2010-01-03への変換をサポートしていますか?

MaxComputeの組み込み関数は、2010/1/3から2010-01-03への変換をサポートしていません。 to_char(to_date('2010/01/03 ', 'yyyy/mm/dd'), 'yyyy-mm-dd') を使用して、日付値2010/01/03を2010-01-03に変換できます。 組み込み関数の詳細については、「TO_DATE」および「TO_CHAR」をご参照ください。

2010/1/3を2010-01-03に変換するには、ユーザー定義関数 (UDF) を記述する必要があります。 UDFの作成方法の詳細については、「概要」をご参照ください。

BIGINT型のUNIXタイムスタンプをDATETIME型の日付値に変換するにはどうすればよいですか?

FROM_UNIXTIME関数を使用して、BIGINT型のUNIXタイムスタンプをDATETIME型の日付値に変換できます。 詳細については、「FROM_UNIXTIME」をご参照ください。

現在のシステム時間を取得するにはどうすればよいですか?

GETDATE関数を使用して、現在のシステム時刻を取得できます。 詳細については、「GETDATE」をご参照ください。

YEAR、QUARTER、MONTH、またはDAY機能を使用したときに「cannot be resolved」というエラーメッセージが表示された場合はどうすればよいですか?

  • 問題の説明

    YEAR、QUARTER、MONTH、またはDAY関数を使用すると、次のエラーメッセージが表示されます。

    FAILED: ODPS-0130071:[1,8] Semantic analysis exception - function or view 'year' cannot be resolved
  • 原因

    YEAR、QUARTER、MONTH、およびDAY関数は、MaxCompute V2.0の拡張関数です。 これらの日付関数を使用するには、MaxCompute V2.0データ型エディションを有効にする必要があります。

  • 解決策

    MaxCompute V2.0データ型エディションを有効にするために使用するsql文の前に、set odps. SQL. type.system.odps2 = true; を追加します。

TO_DATE関数を使用すると、日付値に分部分が含まれていないことを示すエラーメッセージが表示されます。 どうすればよいですか。

  • 問題の説明

    to_date('2016-07-18 18:18:18 ', 'yyyy-MM-dd HH:mm:ss') を含むSQL文を実行すると、次のエラーメッセージが表示されます。

    FAILED: ODPS-0121095:Invalid arguments - format string has second part, but doesn't have minute part : yyyy-MM-dd HH:mm:ss                   
  • 原因

    TO_DATE関数に含まれる2番目のパラメーターの形式が無効です。 mmMMの両方が月を示します。 miは分を示します。

  • 解決策

    SQL文の関数をto_date('2016-07-18 18:18:18 ', 'yyyy-MM-dd HH:mi:ss') に変更します。

ROUND関数を使用してDOUBLE型のデータを丸めると、予期しない結果が返されるのはなぜですか。

ROUND関数を使用してDOUBLE型の値を丸めると、値4.515は4.51に丸められます。 例:
select round(4.515, 2),round(125.315, 2);                   

DOUBLE型の値は、8バイトの倍精度浮動小数点数であり、精度が異なる。 4.515のDOUBLE型の値は4.514999999... です。 その結果、丸め結果は4.51である。

MaxComputeで自動インクリメントシーケンスを設定するために使用できる関数は何ですか?

ROW_NUMBER関数を使用して、自動インクリメントシーケンスを設定できます。 詳細については、「ROW_NUMBER」をご参照ください。

フィールドの値を連結するにはどうすればよいですか?

WM_CONCAT関数を使用して、フィールド内の値を連結できます。 詳細については、「WM_CONCAT」をご参照ください。

MaxComputeはMD5機能をサポートしていますか?

はい、MaxComputeはMD5機能をサポートしています。 詳細については、「MD5」をご参照ください。

文字列の長さを指定された長さに増やすには、どのようにして0の文字列を残しますか?

LPAD関数を使用して、文字列に0を左パッドし、文字列の長さを指定した長さに増やすことができます。 詳細は、「LPAD」をご参照ください。

MaxComputeはMySQLのSUBSTRING_INDEX機能をサポートしていますか?

はい、MaxComputeはSUBSTRING_INDEX関数をサポートしています。 詳細については、「SUBSTRING_INDEX」をご参照ください。

REGEXP_COUNT関数のpatternパラメーターは、ネストされたクエリ文をサポートしていますか。

いいえ。REGEXP_COUNT関数のpatternパラメーターは、ネストされたクエリステートメントをサポートしていません。 REGEXP_COUNT関数の使用方法の詳細については、「REGEXP_COUNT」をご参照ください。

MaxComputeはOracleのto_char (Data, FM9999.00) 関数をサポートしていますか。

いいえ、MaxComputeはこの機能をサポートしていません。 数字の表示形式のみを変更する場合は、format_NUMBER関数を使用できます。 例:

-- The return value is 12,332.123. 
select format_number(12332.123456, '#,###,###,###.###');

IFNULL関数を使用するときに "Invalid function" エラーメッセージが表示された場合はどうすればよいですか?

  • 問題の説明
    IFNULL関数は、次のSQL文で使用されます。
    select a.id as id > , ifnull(concat('phs\xxx', a.insy, '\xxxb\xxx', ifnull()))
    次のエラーメッセージが表示されます。
    Semantic analysis exception - Invalid function : line 1:41 'ifnull'
  • 原因

    MaxComputeはIFNULL関数をサポートしていません。

  • 解決策

    CASE WHEN式またはCOALESCE関数を使用します。 詳細については、「CASE WHEN expression」または「COALESCE」をご参照ください。

JSON文字列で指定された条件に一致するすべてのフィールドを連結するにはどうすればよいですか?

MaxCompute SQLは、likeなどのフィルター条件を使用して、指定された条件に一致するデータを照会します。 MaxCompute SQLがクエリ結果を取得した後、MaxCompute SQLはARRAYまたはMAP関数を使用してMAPやARRAYなどの複雑なデータ型としてデータを構築し、TO_JSON関数を使用してデータを集計します。

JSON文字列の各キーをフィールドとして使用するにはどうすればよいですか?

GET_JSON_OBJECT関数を使用して、JSON文字列からフィールドを抽出できます。

JSON文字列を配列に変換するにはどうすればよいですか?

SQL文でFROM_JSON関数を使用して、select from_json(<col_name>, "array<bigint>"); などのデータ型変換を実行できます。

MaxComputeのどの関数がMySQLのIFNULL関数に似ていますか?

MySQLのIFNULL関数は、MaxComputeのNVL関数に似ています。 MaxCompute組み込み関数とHive、MySQL、およびOracle関数間のマッピングの詳細については、「MaxComputeの組み込み関数とHive、MySQL、およびOracleの組み込み関数間のマッピング」をご参照ください。

1行のデータを複数行のデータに変換するにはどうすればよいですか?

TRANS_COLS関数を使用して、1行のデータを複数行のデータに変換できます。

COALESCE関数を使用すると、「GROUP BYキーにない式」というエラーメッセージが表示された場合はどうすればよいですか?

  • 問題の説明

    COALESCE関数で複数の式が使用されている場合、次のエラーメッセージが表示されます。

    FAILED: ODPS-0130071:Semantic analysis exception - Expression not in GROUP BY key : line 8:9 "$.table"                    
    例:
    select  
    md5(concat(aid,bid)) as id
    ,aid
    , bid
    , sum(amountdue) as amountdue
    , coalesce(
    sum(regexp_count(get_json_object(extended_x, '$.table.tableParties'), '{')),
    decode(get_json_object(extended_x, '$.table'), null, 0, 1)
    ) as tableparty
    , decode(sum(headcount),null,0,sum(headcount) ) as headcount
    , 'a' as pt
    from e_orders
    where pt='20170425'
    group by aid, bid;
  • 原因

    必要なグループ化フィールドがGROUP BYに指定されていません。

  • 解決策

    GROUP BYの後に次の式を指定します。 式はフィールドを返します。

    coalesce(
    sum(regexp_count(get_json_object(extended_x, '$.table.tableParties'), '{')),
    decode(get_json_object(extended_x, '$.table'), null, 0, 1)
    ) as tableparty
    , decode(sum(headcount),null,0,sum(headcount) ) as headcount

MaxComputeの組み込み関数を使用すると、暗黙的なデータ型変換エラーが発生した場合はどうすればよいですか。

odps.sql.type.system.odps2=trueを指定してMaxComputeプロジェクトのMaxCompute V2.0データ型エディションを有効にすると、次のデータ型間の暗黙的な変換が無効になり、精度の低下またはエラーが発生する可能性があります。
  • ストリング->BIGINT
  • ストリング->DATETIME
  • ダブル-> ビッグ
  • デシマル-> ダブル
  • デシマル->BIGINT
この場合、CAST関数を使用して強制変換を実行するか、odps.sql.type.system.odps2=falseを指定してMaxCompute V2.0データ型エディションを無効にします。