Este tópico descreve as perguntas frequentes (FAQ) sobre as funções integradas do MaxCompute.
Categoria | FAQ |
Funções de data | |
Funções matemáticas | Why is there a bias when I use the ROUND function to round a DOUBLE data type? |
Funções de janela | Which function can I use in MaxCompute to set an auto-incrementing sequence? |
Funções de agregação | |
Funções de string | |
Funções de tipo complexo | |
Outras funções | |
Conversão implícita | Why does an implicit type conversion error occur when I use a MaxCompute built-in function? |
O MaxCompute suporta a conversão do formato 2010/1/3 para 2010-01-03?
Se a data estiver no formato 2010/01/03, utilize a função to_char(to_date('2010/01/03', 'yyyy/mm/dd'), 'yyyy-mm-dd') para realizar a conversão. Para mais informações, consulte TO_DATE e TO_CHAR.
Se a data estiver no formato 2010/1/3, é necessário criar uma User-Defined Function (UDF) para converter o formato da data. Para saber como criar uma UDF, consulte Overview of MaxCompute UDFs.
Como converter um timestamp UNIX em um valor de data?
Use a função FROM_UNIXTIME para converter um timestamp UNIX numérico em um valor de data. Para mais informações, consulte FROM_UNIXTIME.
Como obter o horário atual do sistema?
Use a função GETDATE para recuperar o horário atual do sistema. Para mais informações, consulte GETDATE.
Por que o erro "cannot be resolved" ocorre ao usar as funções de data YEAR, QUARTER, MONTH ou DAY?
-
Sintomas
Ao usar as funções de data YEAR, QUARTER, MONTH ou DAY, o seguinte erro é retornado.
FAILED: ODPS-0130071:[1,8] Semantic analysis exception - function or view 'year' cannot be resolved -
Causa
YEAR, QUARTER, MONTH e DAY são funções de extensão do MaxCompute V2.0. Para utilizá-las, é necessário ativar os tipos de dados do MaxCompute V2.0.
-
Solução
Adicione o comando
set odps.sql.type.system.odps2 = true;antes da instrução SQL para ativar os novos tipos de dados do MaxCompute V2.0.
Por que o erro "doesn't have minute part" ocorre ao executar a função TO_DATE?
-
Problema
Ao executar a instrução SQL
to_date('2016-07-18 18:18:18', 'yyyy-MM-dd HH:mm:ss'), o seguinte erro é retornado.FAILED: ODPS-0121095:Invalid arguments - format string has second part, but doesn’t have minute part : yyyy-MM-dd HH:mm:ss -
Causa
O formato do segundo parâmetro da função TO_DATE está incorreto. Tanto
mmquantoMMrepresentam o mês. Para indicar os minutos, usemi. -
Solução
Altere a instrução SQL para
to_date('2016-07-18 18:18:18', 'yyyy-MM-dd HH:mi:ss').
Por que há desvio ao usar a função ROUND para arredondar um tipo de dado DOUBLE?
Ao usar a função round para arredondar um tipo de dado DOUBLE, o valor 4.515 é arredondado para 4.51. Veja a seguir um exemplo de instrução SQL.
select round(4.515, 2),round(125.315, 2);
O tipo DOUBLE é um número de ponto flutuante de dupla precisão com 8 bytes, o que pode gerar erros de precisão. A representação DOUBLE de 4.515 é 4.514999999.... Por isso, o valor é arredondado para baixo, resultando em 4.51.
Qual função do MaxCompute posso usar para definir uma sequência autoincrementável?
Use a função ROW_NUMBER para definir uma sequência autoincrementável. Para mais informações, consulte ROW_NUMBER.
Como concatenar valores do mesmo campo?
Use a função WM_CONCAT para concatenar valores do mesmo campo. Para mais informações, consulte WM_CONCAT.
O MaxCompute suporta a função MD5?
Sim. Para mais informações, consulte MD5.
Como preencher uma string de comprimento fixo com zeros à esquerda?
Use a função LPAD. Para mais informações, consulte LPAD.
A função SUBSTRING_INDEX do MySQL é suportada no MaxCompute?
Sim. Para mais informações, consulte SUBSTRING_INDEX.
O parâmetro pattern da função REGEXP_COUNT suporta instruções de consulta incorporadas?
Não. Para informações de uso, consulte REGEXP_COUNT.
O MaxCompute suporta o uso Oracle de to_char(data, FM9999.00)?
Não. Caso precise apenas ajustar o formato de exibição de um número, use a função FORMAT_NUMBER. Veja o exemplo a seguir.
-- Returns 12,332.123.
select format_number(12332.123456, '#,###,###,###.###');
Por que o erro "Invalid function" ocorre ao usar a função IFNULL?
-
Problema
A instrução SQL a seguir utiliza a função IFNULL.
select a.id as id > , ifnull(concat('phs\xxx', a.insy, '\xxxb\xxx', ifnull()))O seguinte erro é retornado.
Semantic analysis exception - Invalid function : line 1:41 'ifnull' -
Causa
Esse erro ocorre porque o MaxCompute não suporta a função
ifnull. -
Solução
Use uma expressão
case whenou o comandocoalesce. Para mais informações, consulte CASE WHEN expression ou COALESCE.
Como combinar todos os campos que atendem a uma condição específica em um único objeto JSON?
No MaxCompute SQL, use condições de filtro, como like, para consultar dados que atendam aos critérios desejados. Em seguida, use as funções ARRAY ou MAP para estruturar os dados em tipos complexos MAP ou ARRAY. Por fim, aplique a função TO_JSON para a agregação.
Como tratar cada chave de uma string JSON como um campo separado?
Use a função GET_JSON_OBJECT para extrair os campos.
Como converter uma string JSON para o formato ARRAY?
Use a função FROM_JSON para realizar a conversão. Por exemplo: select from_json(<col_name>, "array<bigint>");.
Qual função do MaxCompute corresponde à função IFNULL do MySQL?
A função NVL do MaxCompute corresponde à função IFNULL do MySQL. Para uma comparação das funções integradas entre MaxCompute, Hive, MySQL e Oracle, consulte Comparison of built-in functions in Hive, MySQL, and Oracle.
Como converter uma linha em múltiplas linhas?
Use a função TRANS_COLS para converter uma linha de dados em múltiplas linhas.
Por que o erro "Expression not in GROUP BY key" ocorre ao usar a função COALESCE?
-
Problema
Ao usar a função COALESCE com mais de uma expressão, o seguinte erro é retornado.
FAILED: ODPS-0130071:Semantic analysis exception - Expression not in GROUP BY key : line 8:9 "$.table"A instrução SQL a seguir causa o erro.
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; -
Causa
Um campo de agrupamento está ausente na cláusula GROUP BY.
-
Solução
O valor de retorno da expressão a seguir é um campo. Portanto, adicione a expressão completa à cláusula 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
Por que ocorre um erro de conversão implícita de tipo ao usar uma função integrada do MaxCompute?
Ao ativar os novos tipos de dados do MaxCompute V2.0 em um projeto definindo odps.sql.type.system.odps2=true, as seguintes conversões implícitas de tipo são desativadas, o que pode causar perda de precisão ou erros.
STRING->BIGINT
STRING->DATETIME
DOUBLE->BIGINT
DECIMAL->DOUBLE
DECIMAL->BIGINT
Para resolver esse problema, use a função CAST para realizar uma conversão forçada ou desative os novos tipos de dados definindo odps.sql.type.system.odps2=false.