O MaxCompute oferece suporte ao tipo de dado STRUCT, que permite combinar campos de tipos diferentes em uma única unidade lógica. Este tópico descreve como usar o tipo de dado STRUCT.
Métodos de construção
Diferenças entre os métodos de construção
O MaxCompute oferece três métodos diferentes para construir o tipo de dado STRUCT: STRUCT EXPRESSION, função STRUCT e função NAMED_STRUCT.
Método de construção | Exemplo | Tipo de dado |
Aceita uma lista de valores e uma lista de expressões nomeadas. |
|
|
|
| |
Aceita um asterisco (*) para construir um STRUCT a partir de todas as colunas de uma tabela. |
| |
Aceita uma lista de valores. |
|
|
|
| |
|
| |
Aceita uma lista de nome/valor. |
|
|
|
|
A diferença entre STRUCT EXPRESSION e a função STRUCT: a função STRUCT não permite especificar um alias para cada parâmetro. Ao construir um STRUCT, o sistema adiciona automaticamente nomes de campos na ordem dos parâmetros, como col1, col2 e assim por diante.
Observações de uso
As diferentes sintaxes de construção aceitam aninhamento e podem ser combinadas com funções de construção de outros tipos complexos, como ARRAY e MAP.
Por padrão, o tipo de dado STRUCT não aceita NULL como valor de campo. Para usar valores NULL, ative o modo de compatibilidade com o Bigquery por meio do comando
SET odps.sql.bigquery.compatible=true;; nesse caso, somente o método STRUCT EXPRESSION pode ser usado para a construção.
STRUCT EXPRESSION
STRUCT EXPRESSION fornece um método para construir o tipo complexo STRUCT. Aceita uma lista de valores e uma lista de expressões nomeadas na construção de um STRUCT.
Sintaxe
STRUCT(expression1 [[AS] field_name1], expression2 [[AS] field_name2], ...)
-
Parâmetros
Parâmetro
Obrigatório
Descrição
expression
Sim
Aceita qualquer expressão e tipo de dado. Nomes de colunas, constantes e expressões são compatíveis.
as
Não
Palavra-chave de prefixo para nomes de campos na expressão STRUCT.
field_name
Não
O nome do campo no STRUCT gerado. Os nomes de campos não diferenciam maiúsculas de minúsculas e não podem ser duplicados dentro da mesma expressão STRUCT.
Valor de retorno: retorna um tipo STRUCT, STRUCT <field_name1:T1, field_name2:T2, ...>, onde os nomes dos campos são field_name1, field_name2 e assim por diante.
Exemplos
-
Use valores não nulos como valores de campo.
SELECT * FROM VALUES (STRUCT (1 AS a, 2 AS b, 3 AS c, 4 AS d)) AS tbl1(struct1); -- Result {a:1, b:2, c:3, d:4} SELECT struct1.b FROM VALUES (STRUCT (1 AS a, 2 AS b, 3 AS c, 4 AS d)) AS tbl1(struct1); -- Result +------------+ | b | +------------+ | 2 | +------------+ -
Use valores NULL como valores de campo. Execute o comando
SET odps.sql.bigquery.compatible=true;para ativar o modo de compatibilidade com o Bigquery.SET odps.sql.bigquery.compatible=true; SELECT STRUCT (NULL AS Col_1, 2 AS Col_2); -- Result {col_1:NULL, col_2:2}
Função STRUCT
O MaxCompute permite usar a STRUCT function para criar um tipo de dado STRUCT a partir de uma lista de valores fornecida.
Sintaxe
STRUCT STRUCT(value1,value2, ...)
Parâmetros: o valor pode ser de qualquer tipo, mas NULL não é aceito.
Valor de retorno: retorna um tipo STRUCT, STRUCT<col1:T1, col2:T2,...>, onde os nomes dos campos são col1, col2 e assim por diante.
Exemplos
SELECT STRUCT('a',123,'true',56.90);
-- Result
{col1:a, col2:123, col3:true, col4:56.9}
Função NAMED_STRUCT
O MaxCompute permite usar a NAMED_STRUCT function para construir um tipo de dado STRUCT a partir de uma lista de nome/valor fornecida.
Sintaxe
STRUCT NAMED_STRUCT(string_name1, T1 value1, string_name2, T2 value2,...)
-
Parâmetros:
string_name: o nome do campo especificado, do tipo STRING, que deve ser uma constante. Os nomes de campos não diferenciam maiúsculas de minúsculas.
value: o valor pode ser de qualquer tipo, mas NULL não é aceito.
Valor de retorno: retorna um tipo STRUCT, STRUCT<string_name1:T1, string_name2:T2, ...>, onde os nomes dos campos são string_name1, string_name2 e assim por diante.
Exemplos
SELECT NAMED_STRUCT('user_id',10001,'user_name','LiLei','married','F','weight',63.50);
-- Result
{user_id:10001, user_name:LiLei, married:F, weight:63.5}