このトピックでは、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番目のパラメーターの形式が無効です。
mm
とMM
の両方が月を示します。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
odps.sql.type.system.odps2=false
を指定してMaxCompute V2.0データ型エディションを無効にします。