Todos os produtos
Search
Central de documentação

MaxCompute:Outras funções

Última atualização: Jul 02, 2026

O MaxCompute SQL oferece diversas funções comuns para desenvolvimento. Selecione a função adequada conforme sua necessidade. Este tópico descreve o formato de comando, os parâmetros e exemplos de funções como CAST, FAILIF e HASH suportadas pelo MaxCompute SQL.

Função

Funcionalidades

Expressão BETWEEN AND

Filtra dados que atendem à condição de intervalo especificada.

Expressão CASE WHEN

Retorna valores diferentes com base no resultado de uma expressão.

CAST

Converte o resultado de uma expressão para um tipo de dados alvo.

COALESCE

Retorna o primeiro valor não NULL em uma lista de parâmetros.

COMPRESS

Comprime um parâmetro de entrada STRING ou BINARY usando o algoritmo GZIP.

CRC32

Calcula o valor de verificação de redundância cíclica (CRC) de uma string ou dados binários.

DECOMPRESS

Descomprime um parâmetro de entrada BINARY usando o algoritmo GZIP.

FAILIF

Retorna verdadeiro ou uma mensagem de erro personalizada com base no resultado de uma expressão.

GET_IDCARD_AGE

Retorna a idade atual com base em um número de documento de identidade chinês.

GET_IDCARD_BIRTHDAY

Retorna a data de nascimento com base em um número de documento de identidade chinês.

GET_IDCARD_SEX

Retorna o sexo com base em um número de documento de identidade chinês.

GET_USER_ID

Obtém o ID da conta atual.

HASH

Calcula um valor de hash com base nos parâmetros de entrada.

IF

Verifica se uma condição especificada é verdadeira.

MAX_PT

Retorna o valor máximo da partição de nível 1 em uma tabela particionada.

NULLIF

Determina se dois parâmetros de entrada são iguais.

NVL

Especifica o valor de retorno para um parâmetro que é NULL.

ORDINAL

Ordena as variáveis de entrada em ordem crescente e retorna o valor em uma posição especificada.

PARTITION_EXISTS

Consulta se uma partição especificada existe.

SAMPLE

Amostra todos os valores de coluna lidos e filtra linhas que não atendem às condições de amostragem.

SHA

Calcula o valor de hash SHA-1 de uma string ou dados binários.

SHA1

Calcula o valor de hash SHA-1 de uma string ou dados binários.

SHA2

Calcula o valor de hash SHA-2 de uma string ou dados binários.

STACK

Divide um grupo especificado de parâmetros em um número definido de linhas.

STR_TO_MAP

Divide uma string em chaves e valores com base em separadores especificados.

TABLE_EXISTS

Consulta se uma tabela especificada existe.

TRANS_ARRAY

Função com valor de tabela definida pelo usuário (UDTF) que converte uma linha de dados em várias linhas. Ela transforma um array armazenado em uma coluna com um separador fixo em múltiplas linhas.

TRANS_COLS

UDTF que converte uma linha de dados em várias linhas, dividindo colunas diferentes em linhas distintas.

UNIQUE_ID

Retorna um ID aleatório. Esta função é mais eficiente que a função UUID.

UUID

Retorna um ID aleatório.

Expressão BETWEEN AND

  • Formato do comando

    <a> [NOT] BETWEEN <b> AND <c>
  • Descrição

    Filtra dados onde o valor de a está entre b e c, ou não está entre b e c.

  • Parâmetros

    • a: Obrigatório. O campo a ser filtrado.

    • b e c: Obrigatórios. O intervalo especificado. Os tipos de dados de b e c devem ser iguais ao tipo de dados de a.

  • Valor de retorno

    Retorna os dados que atendem à condição.

    Se a, b ou c for null, o resultado será null.

  • Exemplos

    A tabela emp contém os seguintes dados:

    | empno | ename | job | mgr | hiredate| sal| comm | deptno |
    7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
    7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
    7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
    7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
    7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
    7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
    7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
    7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
    7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
    7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
    7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
    7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
    7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
    7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
    7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10
    7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10
    7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10

    O comando a seguir consulta dados onde o valor de sal é maior ou igual a 1000 e menor ou igual a 1500.

    select * from emp where sal between 1000 and 1500;

    Resultado retornado:

    +-------+-------+-----+------------+------------+------------+------------+------------+
    | empno | ename | job | mgr        | hiredate   | sal        | comm       | deptno     |
    +-------+-------+-----+------------+------------+------------+------------+------------+
    | 7521  | WARD  | SALESMAN | 7698  | 1981-02-22 00:00:00 | 1250.0     | 500.0      | 30  |
    | 7654  | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.0     | 1400.0     | 30 |
    | 7844  | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.0     | 0.0        | 30 |
    | 7876  | ADAMS | CLERK | 7788  | 1987-05-23 00:00:00 | 1100.0     | NULL     | 20   |
    | 7934  | MILLER | CLERK | 7782  | 1982-01-23 00:00:00 | 1300.0     | NULL      | 10  |
    | 7956  | TEBAGE | CLERK | 7748  | 1982-12-30 00:00:00 | 1300.0     | NULL      | 10  |
    +-------+-------+-----+------------+------------+------------+------------+------------+

Expressão CASE WHEN

  • Formato do comando

    O MaxCompute oferece os dois formatos de CASE WHEN abaixo:

    • CASE <value>
      WHEN <value1> THEN <result1>
      WHEN <value2> THEN <result2>
      ...
      ELSE <resultn>
      END
    • CASE
      WHEN (<_condition1>) THEN <result1>
      WHEN (<_condition2>) THEN <result2>
      WHEN (<_condition3>) THEN <result3>
      ...
      ELSE <resultn>
      END
  • Descrição

    Retorna valores de result diferentes com base no resultado de value ou _condition.

  • Parâmetros

    • value: Obrigatório. O valor a ser comparado.

    • _condition: Obrigatório. A condição a ser avaliada.

    • result: Obrigatório. O valor de retorno.

  • Valor de retorno

    • Se result contiver apenas os tipos BIGINT e DOUBLE, todos os valores serão convertidos para DOUBLE antes do retorno do resultado.

    • Caso result inclua o tipo STRING, todos os valores serão convertidos para STRING antes do retorno. Se a conversão de tipo de dados não for suportada, um erro será retornado. Por exemplo, dados do tipo BOOLEAN não podem ser convertidos para STRING.

    • Outras conversões de tipo não são permitidas.

  • Exemplos

    A tabela sale_detail possui os campos shop_name string, customer_id string, total_price double e contém os dados a seguir:

    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    | null       | c5          | NULL        | 2014       | shanghai   |
    | s6         | c6          | 100.4       | 2014       | shanghai   |
    | s7         | c7          | 100.5       | 2014       | shanghai   |
    +------------+-------------+-------------+------------+------------+

    Veja um exemplo de comando:

    select 
    case  
    when region='china' then 'default_region'
    when region like 'shang%' then 'sh_region'
    end as region 
    from sale_detail;

    Resultado retornado:

    +------------+
    | region     |
    +------------+
    | default_region |
    | default_region |
    | default_region |
    | sh_region  |
    | sh_region  |
    | sh_region  |
    +------------+

CAST

  • Formato do comando

    CAST(<expr> AS <type>)
  • Descrição

    Converte o resultado de expr para o tipo de dados alvo type.

  • Parâmetros

    • expr: Obrigatório. Os dados de origem a serem convertidos.

    • type: Obrigatório. O tipo de dados alvo. O uso é descrito a seguir:

      • cast(double as bigint): Converte um valor do tipo de dados DOUBLE para o tipo de dados BIGINT.

      • cast(string as bigint): Ao converter uma string para BIGINT, se a string contiver um número expresso como inteiro, ele será convertido diretamente para BIGINT. Caso contenha um número em ponto flutuante ou notação exponencial, a conversão ocorre primeiro para DOUBLE e depois para BIGINT.

      • cast(string as datetime) ou cast(datetime as string): Utiliza o formato de data padrão yyyy-mm-dd hh:mi:ss.

  • Valor de retorno

    • O valor de retorno corresponde ao tipo de dados alvo.

    • Ao executar setproject odps.function.strictmode=false, a função retorna os dígitos anteriores às letras.

    • Ao executar setproject odps.function.strictmode=true, um erro é retornado.

    • Na conversão para o tipo DECIMAL, definir odps.sql.decimal.tostring.trimzero=true remove os zeros à direita após a vírgula decimal. Definir odps.sql.decimal.tostring.trimzero=false mantém esses zeros.

      Importante

      O parâmetro odps.sql.decimal.tostring.trimzero tem efeito tanto para dados recuperados de tabelas quanto para valores estáticos.

  • Exemplos

    COALESCE

    • Formato do comando

      COALESCE(<expr1>, <expr2>, ...)
    • Descrição

      Retorna o primeiro valor não NULL na lista de <expr1>, <expr2>, ....

    • Parâmetros

      expr: Obrigatório. O valor a ser verificado.

    • Valor de retorno

      O tipo de dados do valor de retorno é igual aos tipos de dados dos parâmetros.

    • Exemplos

      • Exemplo 1: Uso comum. Veja o exemplo de comando abaixo:

        --Returns 1.
        select coalesce(null,null,1,null,3,5,7);
      • Exemplo 2: Um erro é retornado se o tipo de dados de um valor de parâmetro não estiver definido.

        • Comando inválido

          -- The data type of the parameter abc is not defined. The system engine cannot recognize it and returns an error.
          select coalesce(null,null,1,null,abc,5,7);
        • Comando válido

          select coalesce(null,null,1,null,'abc',5,7);
      • Exemplo 3: Se todos os valores dos parâmetros forem null quando não houver leitura de dados de uma tabela, um erro será retornado. Abaixo está um comando inválido:

        -- An error is returned, indicating that at least one parameter value must be non-NULL.
        select coalesce(null,null,null,null);
      • Exemplo 4: Se todos os valores dos parâmetros forem null durante a leitura de dados de uma tabela, NULL será retornado.

        Tabela de origem:

        +-----------+-------------+------------+
        | shop_name | customer_id | toal_price |
        +-----------+-------------+------------+
        | ad        | 10001       | 100.0      |
        | jk        | 10002       | 300.0      |
        | ad        | 10003       | 500.0      |
        | tt        | NULL        | NULL       |
        +-----------+-------------+------------+

        Conforme mostrado na tabela de origem, todos os valores para tt são null. Após executar a instrução abaixo, NULL é retornado.

        select coalesce(customer_id,total_price) from sale_detail where shop_name='tt';

    COMPRESS

    • Formato do comando

      BINARY COMPRESS(STRING <str>)
      BINARY COMPRESS(BINARY <bin>)
    • Descrição

      Comprime str ou bin utilizando o algoritmo GZIP.

    • Parâmetros

      • str: Obrigatório. Um valor do tipo STRING.

      • bin: Obrigatório. Um valor do tipo BINARY.

    • Valor de retorno

      Retorna um valor do tipo BINARY. Se o parâmetro de entrada for NULL, NULL será retornado.

    • Exemplos

      • Exemplo 1: Comprimir a string hello usando o algoritmo GZIP. Veja o exemplo de comando:

        -- The return value is =1F=8B=08=00=00=00=00=00=00=03=CBH=CD=C9=C9=07=00=86=A6=106=05=00=00=00.
        select compress('hello');
      • Exemplo 2: O parâmetro de entrada é uma string vazia. Veja o exemplo de comando:

        -- The return value is =1F=8B=08=00=00=00=00=00=00=03=03=00=00=00=00=00=00=00=00=00.
        select compress('');
      • Exemplo 3: O parâmetro de entrada é NULL. Veja o exemplo de comando:

        -- Returns NULL.
        select compress(null);

    CRC32

    • Formato do comando

      BIGINT CRC32(STRING|BINARY <expr>)
    • Descrição

      Calcula o valor de verificação de redundância cíclica (CRC) da expressão STRING ou BINARY expr.

    • Parâmetros

      expr: Obrigatório. Um valor do tipo STRING ou BINARY.

    • Valor de retorno

      Retorna um valor do tipo BIGINT. Aplicam-se as seguintes regras:

      • Se o parâmetro de entrada for NULL, NULL será retornado.

      • Se o parâmetro de entrada for uma string vazia, 0 será retornado.

    • Exemplos

      • Exemplo 1: Calcular o valor CRC da string ABC. Veja o exemplo de comando:

        -- Returns 2743272264.
        select crc32('ABC');
      • Exemplo 2: O parâmetro de entrada é NULL. Veja o exemplo de comando:

        -- Returns NULL.
        select crc32(null);

    DECOMPRESS

    • Formato do comando

      BINARY DECOMPRESS(BINARY <bin>)
    • Descrição

      Descomprime bin usando o algoritmo GZIP.

    • Parâmetros

      bin: Obrigatório. Um valor do tipo BINARY.

    • Valor de retorno

      Retorna um valor do tipo BINARY. Se o parâmetro de entrada for NULL, NULL será retornado.

    • Exemplos

      • Exemplo 1: Descomprimir o resultado compactado da string hello, world e convertê-lo para o formato STRING. Veja o exemplo de comando:

        -- Returns hello, world.
        select cast(decompress(compress('hello, world')) as string);
      • Exemplo 2: O parâmetro de entrada é NULL. Veja o exemplo de comando:

        -- Returns NULL.
        select decompress(null);

    GET_IDCARD_AGE

    • Formato do comando

      get_idcard_age(<idcardno>)
    • Descrição

      Retorna a idade atual com base em um número de documento de identidade chinês. A idade é calculada subtraindo o ano de nascimento (extraído do documento) do ano atual.

    • Parâmetros

      idcardno: Obrigatório. Um número de documento de identidade chinês de 15 ou 18 dígitos do tipo STRING. A função verifica a validade do número com base no código da província e no último dígito verificador. Se a verificação falhar, NULL será retornado.

    • Valor de retorno

      Retorna um valor do tipo BIGINT. Se a entrada for NULL, NULL será retornado.

    GET_IDCARD_BIRTHDAY

    • Formato do comando

      get_idcard_birthday(<idcardno>)
    • Descrição

      Retorna a data de nascimento com base em um número de documento de identidade chinês.

    • Parâmetros

      idcardno: Obrigatório. Um número de documento de identidade chinês de 15 ou 18 dígitos do tipo STRING. A função verifica a validade do número com base no código da província e no último dígito verificador. Se a verificação falhar, NULL será retornado.

    • Valor de retorno

      Retorna um valor do tipo DATETIME. Se a entrada for NULL, NULL será retornado.

    GET_IDCARD_SEX

    • Formato do comando

      get_idcard_sex(<idcardno>)
    • Descrição

      Retorna o sexo com base em um número de documento de identidade chinês. O valor será M (masculino) ou F (feminino).

    • Parâmetros

      idcardno: Obrigatório. Um número de documento de identidade chinês de 15 ou 18 dígitos do tipo STRING. A função verifica a validade do número com base no código da província e no último dígito verificador. Se a verificação falhar, NULL será retornado.

    • Valor de retorno

      Retorna um valor do tipo STRING. Se a entrada for NULL, NULL será retornado.

    GET_USER_ID

    • Formato do comando

      get_user_id()
    • Descrição

      Recupera o ID da conta atual. Também conhecido como ID de usuário ou UID.

    • Parâmetros

      Nenhum parâmetro é necessário.

    • Valor de retorno

      Retorna o ID da conta atual.

    • Exemplos

      select get_user_id();
      -- The following result is returned.
      +------------+
      | _c0        |
      +------------+
      | 1117xxxxxxxx8519 |
      +------------+

    HASH

    • Formato do comando

      • Se o projeto MaxCompute estiver no modo compatível com Hive, o formato do comando é:

        INT HASH(<value1>, <value2>[, ...]);
      • Se o projeto MaxCompute não estiver no modo compatível com Hive, o formato do comando é:

        BIGINT HASH(<value1>, <value2>[, ...]);
    • Descrição

      Calcula o valor de hash de value1 e value2.

    • Parâmetros

      value1 e value2: Obrigatórios. Os parâmetros para os quais o valor de hash será calculado. Podem ser de tipos de dados diferentes. Os tipos suportados variam entre os modos compatível e não compatível com Hive:

      • Modo compatível com Hive: TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, STRING, CHAR, VARCHAR, DATETIME e DATE.

      • Modo não compatível com Hive: BIGINT, DOUBLE, BOOLEAN, STRING e DATETIME.

      Nota

      Para as mesmas entradas, os valores de hash retornados são sempre idênticos. No entanto, valores de hash iguais não garantem que os valores de entrada sejam idênticos, pois pode ocorrer uma colisão de hash.

    • Valor de retorno

      Retorna um valor do tipo INT ou BIGINT. Se um parâmetro de entrada for uma string vazia ou NULL, 0 será retornado.

    • Exemplos

      • Exemplo 1: Calcular o valor de hash de parâmetros de entrada do mesmo tipo de dados. Veja o exemplo de comando:

        -- Returns 66.
        SELECT HASH(0L, 2L, 4L);
      • Exemplo 2: Calcular o valor de hash de parâmetros de entrada de tipos de dados diferentes. Veja o exemplo de comando:

        -- Returns 97.
        SELECT HASH(0L, 'a');
      • Exemplo 3: Um parâmetro de entrada é uma string vazia ou NULL. Veja o exemplo de comando:

        -- Returns 0.
        SELECT HASH(0L, null);
        -- Returns 0.
        SELECT HASH(0L, '');

    IF

    • Formato do comando

      IF(<testCondition>, <valueTrue>, <valueFalseOrNull>)
    • Descrição

      Verifica se testCondition é verdadeiro. Se for, a função retorna o valor de valueTrue. Caso contrário, retorna o valor de valueFalseOrNull.

    • Parâmetros

      • testCondition: Obrigatório. A expressão a ser avaliada. Deve ser do tipo BOOLEAN.

      • valueTrue: Obrigatório. O valor a ser retornado se a expressão testCondition for verdadeira.

      • valueFalseOrNull: O valor a ser retornado se a expressão testCondition for falsa. Pode ser definido como NULL.

    • Valor de retorno

      O tipo de dados do valor de retorno é igual ao tipo de dados do parâmetro valueTrue ou valueFalseOrNull.

    • Exemplos

      -- Returns 200.
      select if(1=2, 100, 200); 

    MAX_PT

    • Formato do comando

      MAX_PT(<table_full_name>)
    • Descrição

      Retorna o valor máximo de uma partição de nível 1 que contém dados em uma tabela particionada. Os valores são ordenados alfabeticamente. Em seguida, a função lê os dados dessa partição.

    • Observações

      • A função MAX_PT também pode ser implementada usando SQL padrão. SELECT * FROM table WHERE pt=MAX_PT("table"); pode ser reescrito como SELECT * FROM table WHERE pt = (SELECT MAX(pt) FROM table);.

        Nota

        O MaxCompute não fornece uma função MIN_PT. Não é possível usar a instrução SQL SELECT * FROM table WHERE pt=MIN_PT("table"); para obter funcionalidade similar à MAX_PT visando recuperar a menor partição com dados. Contudo, você pode utilizar a instrução SQL padrão SELECT * FROM table WHERE pt= (SELECT MIN(pt) FROM table); para alcançar o mesmo efeito.

      • Se todas as partições da tabela estiverem vazias, a função MAX_PT falhará. Certifique-se de que pelo menos uma partição contenha dados.

      • Tabelas externas do OSS também suportam a função MAX_PT. O comportamento é o mesmo das tabelas internas.

    • Parâmetros

      table_full_name: Obrigatório. Um valor do tipo STRING. O nome da tabela. É necessário ter permissões de leitura na tabela.

    • Valor de retorno

      Retorna o valor da maior partição de nível 1.

      Nota

      Se você criar uma partição apenas usando ALTER TABLE e ela não contiver dados, essa partição não será retornada.

    • Exemplos

      • Exemplo 1: A tabela tbl é particionada. Suas partições são 20120901 e 20120902, ambas contendo dados. Na instrução abaixo, MAX_PT retorna '20120902'. A instrução SQL do MaxCompute lê os dados da partição pt='20120902'. Veja o exemplo de comando:

        SELECT * FROM tbl WHERE pt= MAX_PT('tbl');
        -- This is equivalent to the following statement.
        SELECT * FROM tbl WHERE pt= (SELECT MAX(pt) FROM tbl);
      • Exemplo 2: Em um cenário de particionamento multinível, use SQL padrão para obter dados da maior partição. Veja o exemplo de comando:

        SELECT * FROM table WHERE pt1 = (SELECT MAX(pt1) FROM table) AND pt2 = (SELECT MAX(pt2) FROM table WHERE pt1= (SELECT MAX(pt1) FROM table));

    NULLIF

    • Formato do comando

      T NULLIF(T <expr1>, T <expr2>)
    • Descrição

      Compara os valores de expr1 e expr2. Se forem iguais, a função retorna NULL. Caso contrário, retorna expr1.

    • Parâmetros

      expr1 e expr2: Obrigatórios. Expressões de qualquer tipo. T indica o tipo de dados de entrada. Pode ser qualquer tipo suportado pelo MaxCompute.

    • Valor de retorno

      Retorna NULL ou expr1.

    • Exemplos

      -- Returns 2.
      select nullif(2, 3);
      -- Returns NULL.
      select nullif(2, 2);
      -- Returns 3.
      select nullif(3, null);

    NVL

    • Formato do comando

      nvl(T <value>, T <default_value>)
    • Descrição

      Se o valor de value for NULL, a função retorna default_value. Caso contrário, retorna value. Ambos os parâmetros devem ter o mesmo tipo de dados.

    • Parâmetros

      • value: Obrigatório. O parâmetro de entrada. T indica o tipo de dados de entrada. Pode ser qualquer tipo suportado pelo MaxCompute.

      • default_value: Obrigatório. O valor de substituição. Deve ter o mesmo tipo de dados que value.

    • Exemplos

      A tabela t_data possui três colunas: c1 string, c2 bigint e c3 datetime. A tabela contém os seguintes dados:

      +----+------------+------------+
      | c1 | c2 | c3 |
      +----+------------+------------+
      | NULL | 20 | 2017-11-13 05:00:00 |
      | ddd | 25 | NULL |
      | bbb | NULL | 2017-11-12 08:00:00 |
      | aaa | 23 | 2017-11-11 00:00:00 |
      +----+------------+------------+

      Utilize a função nvl para gerar 00000 para valores NULL em c1, 0 para valores NULL em c2 e - para valores NULL em c3. Veja o exemplo de comando:

      select nvl(c1,'00000'),nvl(c2,0),nvl(c3,'-') from nvl_test;
      -- The following result is returned.
      +-----+------------+-----+
      | _c0 | _c1 | _c2 |
      +-----+------------+-----+
      | 00000 | 20 | 2017-11-13 05:00:00 |
      | ddd | 25 | - |
      | bbb | 0 | 2017-11-12 08:00:00 |
      | aaa | 23 | 2017-11-11 00:00:00 |
      +-----+------------+-----+

    ORDINAL

    • Formato do comando

      ORDINAL(BIGINT <nth>, <var1>, <var2>[,...])
    • Descrição

      Ordena as variáveis de entrada em ordem crescente e retorna o valor na posição nth.

    • Parâmetros

      • nth: Obrigatório. O número da posição, começando em 1. Um valor do tipo BIGINT. Se o valor na posição especificada for NULL, NULL será retornado.

      • var: Obrigatório. Os valores a serem ordenados. Podem ser dos tipos BIGINT, DOUBLE, DATETIME ou STRING.

    • Valor de retorno

      • O valor na posição nth. Se não houver conversão implícita, o tipo de dados do retorno será igual ao dos parâmetros de entrada.

      • Se ocorrer conversão de tipo, uma conversão entre DOUBLE, BIGINT e STRING retorna DOUBLE. Uma conversão entre STRING e DATETIME retorna DATETIME. Outras conversões implícitas não são permitidas.

      • NULL é tratado como o valor mínimo.

    • Exemplos

      -- Returns 3. 
      SELECT ORDINAL(CAST(3 AS BIGINT), CAST(1 AS BIGINT), cast(3 AS BIGINT), cast(7 AS BIGINT), cast(5 AS BIGINT), cast(2 AS BIGINT), cast(4 AS BIGINT), cast(6 AS BIGINT));

    PARTITION_EXISTS

    • Formato do comando

      boolean partition_exists(string <table_name>, string... <partitions>)
    • Descrição

      Verifica se uma partição especificada existe.

    • Parâmetros

      • table_name: Obrigatório. O nome da tabela. Um valor do tipo STRING. O nome pode incluir o nome do projeto, como my_proj.my_table. Se o projeto não for especificado, o projeto atual será usado por padrão.

      • partitions: Obrigatório. O nome da partição. Um valor do tipo STRING. Especifique os valores da partição na ordem das colunas-chave de partição. A quantidade de valores deve corresponder ao número de colunas-chave.

    • Valor de retorno

      Retorna um valor do tipo BOOLEAN. A função retorna True se a partição especificada existir. Caso contrário, retorna False.

    • Exemplos

      -- Create a partitioned table named foo.
      create table foo (id bigint) partitioned by (ds string, hr string);
      -- Add a partition to the foo table.
      alter table foo add partition (ds='20190101', hr='1');
      -- Query whether the partition ds='20190101' and hr='1' exists. The result is True.
      select partition_exists('foo', '20190101', '1');

    SAMPLE

    • Formato do comando

      boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]])
    • Descrição

      O sistema amostra todos os valores lidos de column_name com base nas configurações de x e y, filtrando as linhas que não atendem às condições de amostragem.

    • Parâmetros

      • x e y: x é obrigatório. Uma constante BIGINT maior que 0. Isso indica que os dados serão divididos em x partes via hash, selecionando a yª parte.

        y é opcional. Se omitido, a primeira parte é selecionada por padrão. Ao omitir o parâmetro y, você também deve omitir column_name.

        Se x ou y for de outro tipo ou menor/igual a 0, uma exceção será lançada. Se y for maior que x, uma exceção também será retornada. Se x ou y for NULL, NULL será retornado.

      • column_name: Opcional. A coluna alvo para amostragem. Se este parâmetro for omitido, a amostragem aleatória será realizada com base nos valores de x e y. Este parâmetro pode ser de qualquer tipo de dados e seu valor pode ser NULL. Nenhuma conversão implícita de tipo é executada. Se column_name for uma constante NULL, um erro será retornado.

        Nota
        • Para evitar distorção de dados causada por valores NULL, estes valores em column_name são distribuídos uniformemente via hash em x partes. Se você não especificar column_name, a saída poderá não ser uniforme quando o volume de dados for pequeno. Nesse caso, especifique column_name para obter um resultado melhor.

        • Atualmente, a amostragem aleatória é suportada apenas para colunas dos seguintes tipos de dados: bigint, datetime, boolean, double, string, binary, char e varchar.

    • Valor de retorno

      Retorna um valor do tipo BOOLEAN.

    • Exemplos

      Suponha que a tabela tbla contenha uma coluna chamada cola.

      -- The values are hashed into 4 parts based on the cola column, and the 1st part is taken. The return value is True.
      select * from tbla where sample (4, 1 , cola);
      -- Each row of data is randomly hashed into 4 parts, and the 2nd part is taken. The return value is True.
      select * from tbla where sample (4, 2);

    SHA

    • Formato do comando

      STRING SHA(STRING|BINARY <expr>)
    • Descrição

      Calcula o valor de hash SHA-1 da expressão STRING ou BINARY expr e o retorna como uma string hexadecimal.

    • Parâmetros

      expr: Obrigatório. Um valor do tipo STRING ou BINARY.

    • Valor de retorno

      Retorna um valor do tipo STRING. Se o parâmetro de entrada for NULL, NULL será retornado.

    • Exemplos

      • Exemplo 1: Calcular o valor de hash SHA da string ABC. Veja o exemplo de comando:

        -- Returns 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8.
        select sha('ABC');
      • Exemplo 2: O parâmetro de entrada é NULL. Veja o exemplo de comando:

        -- Returns NULL.
        select sha(null);

    SHA1

    • Formato do comando

      string sha1(string|binary <expr>)
    • Descrição

      Calcula o valor de hash SHA-1 da expressão STRING ou BINARY expr e o retorna como uma string hexadecimal.

    • Parâmetros

      expr: Obrigatório. Um valor do tipo STRING ou BINARY.

    • Valor de retorno

      Retorna um valor do tipo STRING. Se o parâmetro de entrada for NULL, NULL será retornado.

    • Exemplos

      • Exemplo 1: Calcular o valor de hash SHA-1 da string ABC. Veja o exemplo de comando:

        -- Returns 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8.
        select sha1('ABC');
      • Exemplo 2: O parâmetro de entrada é NULL. Veja o exemplo de comando:

        -- Returns NULL.
        select sha1(null);

    SHA2

    • Formato do comando

      string sha2(string|binary <expr>, bigint <number>)
    • Descrição

      Calcula o valor de hash SHA-2 da expressão STRING ou BINARY expr e o retorna no formato especificado por number.

    • Parâmetros

      • expr: Obrigatório. Um valor do tipo STRING ou BINARY.

      • number: Obrigatório. Um valor do tipo BIGINT. O comprimento de bits do hash. O valor deve ser 224, 256, 384, 512 ou 0 (equivalente a 256).

    • Valor de retorno

      Retorna um valor do tipo STRING. Aplicam-se as seguintes regras:

      • Se qualquer parâmetro de entrada for NULL, NULL será retornado.

      • Se o valor de number não estiver dentro do intervalo permitido, NULL será retornado.

    • Exemplos

      • Exemplo 1: Calcular o valor de hash SHA-2 da string ABC. Veja o exemplo de comando:

        -- Returns b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78.
        select sha2('ABC', 256);
      • Exemplo 2: Um parâmetro de entrada é NULL. Veja o exemplo de comando:

        -- Returns NULL.
        select sha2('ABC', null);

    STACK

    • Formato do comando

      stack(n, expr1, ..., exprk) 
    • Descrição

      Divide expr1, ..., exprk em n linhas. Salvo especificação em contrário, a saída usa os nomes de coluna padrão col0, col1, ....

    • Parâmetros

      • n: Obrigatório. O número de linhas para divisão.

      • expr: Obrigatório. Os parâmetros a serem divididos, expr1, ..., exprk, devem ser inteiros. A quantidade de parâmetros deve ser um múltiplo inteiro de n para formar n linhas completas. Caso contrário, um erro será retornado.

    • Valor de retorno

      Retorna um conjunto de dados com n linhas. O número de colunas é o quociente da divisão do número de parâmetros por n.

    • Exemplos

      -- Arrange 1, 2, 3, 4, 5, 6 into 3 rows.
      select stack(3, 1, 2, 3, 4, 5, 6);
      -- The following result is returned.
      +------+------+
      | col0 | col1 |
      +------+------+
      | 1    | 2    |
      | 3    | 4    |
      | 5    | 6    |
      +------+------+
      
      -- Arrange 'A',10,date '2015-01-01','B',20,date '2016-01-01' into two rows.
      select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2);
      -- The following result is returned.
      +------+------+------+
      | col0 | col1 | col2 |
      +------+------+------+
      | A    | 10   | 2015-01-01 |
      | B    | 20   | 2016-01-01 |
      +------+------+------+
      
      -- Arrange a, b, c, d into two rows. If the source table has multiple rows, the stack operation is performed row by row.
      select stack(2,a,b,c,d) as (col,value)
      from values 
          (1,1,2,3,4),
          (2,5,6,7,8),
          (3,9,10,11,12),
          (4,13,14,15,null)
      as t(key,a,b,c,d);
      -- The following result is returned.
      +------+-------+
      | col  | value |
      +------+-------+
      | 1    | 2     |
      | 3    | 4     |
      | 5    | 6     |
      | 7    | 8     |
      | 9    | 10    |
      | 11   | 12    |
      | 13   | 14    |
      | 15   | NULL  |
      +------+-------+
      
      -- Use with LATERAL VIEW.
      select tf.* from (select 0) t lateral view stack(2,'A',10,date '2015-01-01','B',20, date '2016-01-01') tf as col0,col1,col2;
      -- The following result is returned.
      +------+------+------+
      | col0 | col1 | col2 |
      +------+------+------+
      | A    | 10   | 2015-01-01 |
      | B    | 20   | 2016-01-01 |
      +------+------+------+

    STR_TO_MAP

    • Formato do comando

      STR_TO_MAP([STRING <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])
    • Descrição

      Usa delimiter1 para dividir text em pares chave-valor e, em seguida, usa delimiter2 para separar cada par em uma chave e um valor.

    • Parâmetros

      • mapDupKeyPolicy: Opcional. Um valor do tipo STRING. Este parâmetro especifica o método usado para processar chaves duplicadas. Valores válidos:

        • exception: Um erro é retornado.

        • last_win: A última chave sobrescreve a anterior.

        Você também pode definir o parâmetro odps.sql.map.key.dedup.policy no nível da sessão para configurar o método de tratamento de chaves duplicadas. Por exemplo, defina odps.sql.map.key.dedup.policy como exception. Se este parâmetro não for especificado, o valor padrão last_win será usado.

        Nota

        O comportamento do MaxCompute é determinado com base em mapDupKeyPolicy. Se você não especificar mapDupKeyPolicy, o valor de odps.sql.map.key.dedup.policy será utilizado.

      • text: Obrigatório. Um valor do tipo STRING. A string a ser dividida.

      • delimiter1: Opcional. Um valor do tipo STRING. O separador. Se não especificado, o valor padrão é uma vírgula (,).

      • delimiter2: Opcional. Um valor do tipo STRING. O separador. Se não especificado, o valor padrão é um sinal de igual (=).

        Nota

        Se o separador for uma expressão regular ou um caractere especial, você deve escapá-lo com duas barras invertidas (\\). Caracteres especiais incluem dois pontos (:), ponto final (.), ponto de interrogação (?), sinal de mais (+) e asterisco (*).

    • Valor de retorno

      O valor de retorno é do tipo map<string, string>. O retorno resulta da divisão de text por delimiter1 e delimiter2.

    • Exemplos

      -- Returns {test1:1, test2:2}.
      select str_to_map('test1&1-test2&2','-','&');
      -- Returns {test1:1, test2:2}.
      select str_to_map("test1.1,test2.2", ",", "\\.");
      -- Returns {test1:1, test2:3}.
      select str_to_map("test1.1,test2.2,test2.3", ",", "\\.");

    TABLE_EXISTS

    • Formato do comando

      BOOLEAN TABLE_EXISTS(STRING <table_name>)
    • Descrição

      Verifica se uma tabela especificada existe.

    • Parâmetros

      table_name: Obrigatório. O nome da tabela. Um valor do tipo STRING. O nome pode incluir o nome do projeto, como my_proj.my_table. Se o projeto não for especificado, o projeto atual será usado por padrão.

    • Valor de retorno

      Retorna um valor do tipo BOOLEAN. A função retorna True se a tabela especificada existir. Caso contrário, retorna False.

    • Exemplos

      -- Use in a SELECT list.
      select if(table_exists('abd'), col1, col2) from src;

    TRANS_ARRAY

    • Limites

      • Todas as colunas usadas como keys devem vir primeiro, seguidas pelas colunas a serem transpostas.

      • Uma instrução SELECT pode conter apenas uma UDTF. Nenhuma outra coluna pode ser incluída.

      • Não pode ser usada com GROUP BY, CLUSTER BY, DISTRIBUTE BY ou SORT BY.

    • Formato do comando

      TRANS_ARRAY (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) AS (<key1>,<key2>,...,<col1>, <col2>)
    • Descrição

      Função com valor de tabela definida pelo usuário (UDTF) que converte uma linha de dados em várias linhas. Ela transforma um array armazenado em uma coluna e delimitado por um separador fixo em múltiplas linhas.

    • Parâmetros

      • num_keys: Obrigatório. Uma constante BIGINT. O valor deve ser >=0. O número de colunas a serem usadas como keys de transposição ao converter para múltiplas linhas.

      • separator: Obrigatório. Uma constante STRING. O separador usado para dividir a string em vários elementos. Se este parâmetro estiver vazio, um erro será retornado.

      • keys: Obrigatório. As colunas a serem usadas como keys durante a transposição. O número de colunas é especificado por num_keys. Se num_keys indicar que todas as colunas são usadas como keys (ou seja, num_keys é igual ao número total de colunas), apenas uma linha será retornada.

      • cols: Obrigatório. Os arrays a serem convertidos em linhas. Todas as colunas após as keys são consideradas arrays a serem transpostos. Devem ser do tipo STRING e armazenar arrays em formato de string, como Hangzhou;Beijing;Shanghai, que é um array delimitado por ponto e vírgula (;).

    • Valor de retorno

      Retorna as linhas transpostas. Os novos nomes das colunas são especificados por AS. Os tipos de dados das colunas usadas como keys permanecem inalterados. Todas as outras colunas serão do tipo STRING. O número de linhas resultantes é determinado pelo array com mais elementos. Arrays menores são preenchidos com NULL.

    • Exemplos

      • Exemplo 1: A tabela t_table contém os seguintes dados:

        +----------+----------+------------+
        | login_id | login_ip | login_time |
        +----------+----------+------------+
        | wangwangA | 192.168.0.1,192.168.0.2 | 20120101010000,20120102010000 |
        | wangwangB | 192.168.45.10,192.168.67.22,192.168.6.3 | 20120111010000,20120112010000,20120223080000 |
        +----------+----------+------------+
        -- Run the SQL statement.
        select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table;
        -- The following result is returned.
        +----------+----------+------------+
        | login_id | login_ip | login_time |
        +----------+----------+------------+
        | wangwangB | 192.168.45.10 | 20120111010000 |
        | wangwangB | 192.168.67.22 | 20120112010000 |
        | wangwangB | 192.168.6.3 | 20120223080000 |
        | wangwangA | 192.168.0.1 | 20120101010000 |
        | wangwangA | 192.168.0.2 | 20120102010000 |
        +----------+----------+------------+
        
        -- If the table contains the following data.
        Login_id LOGIN_IP LOGIN_TIME 
        wangwangA 192.168.0.1,192.168.0.2 20120101010000
        -- The insufficient data in the array is padded with NULL. 
        Login_id Login_ip Login_time 
        wangwangA 192.168.0.1 20120101010000
        wangwangA 192.168.0.2 NULL
      • Exemplo 2: A tabela mf_fun_array_test_t contém os seguintes dados:

        +------------+------------+------------+------------+
        | id         | name       | login_ip   | login_time |
        +------------+------------+------------+------------+
        | 1          | Tom        | 192.168.100.1,192.168.100.2 | 20211101010101,20211101010102 |
        | 2          | Jerry      | 192.168.100.3,192.168.100.4 | 20211101010103,20211101010104 |
        +------------+------------+------------+------------+
        
        -- Use two keys, id and name, to convert to an array. Run the SQL statement.
        select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t;
        -- The following result is returned. The data is split and grouped by the keys id and name.
        +------------+------------+------------+------------+
        | id         | name       | login_ip   | login_time |
        +------------+------------+------------+------------+
        | 1          | Tom        | 192.168.100.1 | 20211101010101 |
        | 1          | Tom        | 192.168.100.2 | 20211101010102 |
        | 2          | Jerry      | 192.168.100.3 | 20211101010103 |
        | 2          | Jerry      | 192.168.100.4 | 20211101010104 |
        +------------+------------+------------+------------+

    TRANS_COLS

    • Limites

      • Todas as colunas usadas como keys devem vir primeiro, seguidas pelas colunas a serem transpostas.

      • Uma instrução SELECT pode conter apenas uma UDTF. Nenhuma outra coluna pode ser incluída.

    • Formato do comando

      TRANS_COLS (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) AS (<idx>, <key1>,<key2>,…,<col1>, <col2>)
    • Descrição

      UDTF que converte uma linha de dados em várias linhas, dividindo colunas diferentes em linhas distintas.

    • Parâmetros

      • num_keys: Obrigatório. Uma constante BIGINT. O valor deve ser >=0. O número de colunas a serem usadas como keys de transposição ao converter para múltiplas linhas.

      • keys: Obrigatório. As colunas a serem usadas como keys durante a transposição. O número de colunas é especificado por num_keys. Se num_keys indicar que todas as colunas são usadas como keys (ou seja, num_keys é igual ao número total de colunas), apenas uma linha será retornada.

      • idx: Obrigatório. O número da linha após a conversão.

      • cols: Obrigatório. As colunas a serem convertidas em linhas.

    • Valor de retorno

      Retorna as linhas transpostas. Os novos nomes das colunas são especificados por AS. A primeira coluna da saída é o índice de transposição, começando em 1. Os tipos de dados das colunas usadas como keys permanecem inalterados. Todas as outras colunas mantêm seus tipos de dados originais.

    • Exemplos

      A tabela t_table contém os seguintes dados:

      +----------+----------+------------+
      | Login_id | Login_ip1 | Login_ip2 |
      +----------+----------+------------+
      | wangwangA | 192.168.0.1 | 192.168.0.2 |
      +----------+----------+------------+
      -- Run the SQL statement.
      select trans_cols(1, login_id, login_ip1, login_ip2) as (idx, login_id, login_ip) from t_table;
      -- The following result is returned.
      idx    login_id    login_ip
      1    wangwangA    192.168.0.1
      2    wangwangA    192.168.0.2

    UNIQUE_ID

    • Formato do comando

      string unique_id()
    • Descrição

      Retorna um ID único aleatório, como 29347a88-1e57-41ae-bb68-a9edbdd9****_1. Esta função é mais eficiente que a função UUID e retorna um ID mais longo. Comparado a um UUID, este ID inclui um sublinhado (_) adicional e um número, como _1.

    UUID

    • Formato do comando

      string uuid()
    • Descrição

      Retorna um ID aleatório, como 29347a88-1e57-41ae-bb68-a9edbdd9****.

      Nota

      UUID retorna um ID global aleatório com probabilidade muito baixa de repetição.