Todos os produtos
Search
Central de documentação

MaxCompute:Tipo de dados STRUCT

Última atualização: Jun 26, 2026

O tipo de dados STRUCT permite agrupar campos de diferentes tipos em um único valor. Este tópico aborda os três métodos de construção e o acesso aos campos após a criação da estrutura.

Escolha um método de construção

O MaxCompute oferece três formas de construir um STRUCT. Cada uma difere na atribuição dos nomes dos campos:

Método

Definição dos nomes de campo

Suporte a NULL

Tipo de dados STRUCT

Definido por você (opcional AS field_name)

Compatível quando o modo de compatibilidade com BigQuery está ativado

Função STRUCT

Sempre gerado automaticamente como col1, col2, ...

Incompatível

Função NAMED_STRUCT

Definido por você como constantes de string

Incompatível

Quando usar cada método:

  • Use a STRUCT EXPRESSION quando precisar de campos nomeados, quiser construir um STRUCT a partir de todas as colunas da tabela (STRUCT(*)) ou necessitar de valores de campo NULL.

  • Use a função STRUCT quando os nomes dos campos não forem relevantes e todos os valores forem não NULL.

  • Use a função NAMED_STRUCT quando os nomes dos campos precisarem ser constantes de string explícitas e todos os valores forem não NULL.

Observações de uso

  • Todos os três métodos aceitam aninhamento. Um campo STRUCT pode ser, ele próprio, um ARRAY ou MAP.

  • Por padrão, os campos STRUCT não aceitam valores NULL. Para usar NULL como valor de campo, ative o modo de compatibilidade com BigQuery e utilize o método STRUCT EXPRESSION:

    SET odps.sql.bigquery.compatible=true;

    Essa configuração aplica-se apenas ao método STRUCT EXPRESSION. A função STRUCT e a função NAMED_STRUCT não aceitam valores NULL, independentemente dessa configuração.

STRUCT EXPRESSION

A STRUCT EXPRESSION constrói um STRUCT a partir de uma lista de expressões. Os nomes dos campos são opcionais; atribua-os com AS field_name.

Uma capacidade exclusiva da STRUCT EXPRESSION é aceitar STRUCT(*) para encapsular todas as colunas de uma tabela em um único valor STRUCT.

Sintaxe

STRUCT(expression1 [[AS] field_name1], expression2 [[AS] field_name2], ...)

Parâmetros:

Parâmetro

Obrigatório

Descrição

expression

Sim

Qualquer expressão válida: referência de coluna, constante ou expressão computada.

AS

Não

Palavra-chave prefixada antes de um nome de campo opcional.

field_name

Não

Nome do campo no STRUCT resultante. Os nomes dos campos não diferenciam maiúsculas de minúsculas e devem ser únicos dentro da mesma expressão.

Valor retornado: STRUCT<field_name1:T1, field_name2:T2, ...>

Exemplos

Construir um STRUCT com campos nomeados:

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}

Acessar um campo específico:

SELECT struct1.b FROM VALUES (STRUCT(1 AS a, 2 AS b, 3 AS c, 4 AS d)) AS tbl1(struct1);

-- Result
+------------+
| b          |
+------------+
| 2          |
+------------+

Construir um STRUCT com valores de campo NULL (requer modo de compatibilidade com 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

A função STRUCT constrói um STRUCT a partir de uma lista de valores. O MaxCompute gera automaticamente os nomes dos campos como col1, col2 e assim por diante. Não é possível atribuir nomes personalizados com este método. Valores NULL não são aceitos.

Sintaxe

STRUCT(value1, value2, ...)

Parâmetros: Cada valor pode ser de qualquer tipo, exceto NULL.

Valor retornado: STRUCT<col1:T1, col2:T2, ...> — os nomes dos campos são sempre 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

A função NAMED_STRUCT constrói um STRUCT a partir de pares alternados de nome e valor. Todos os nomes de campo devem ser constantes de string. Valores NULL não são aceitos.

Sintaxe

NAMED_STRUCT(string_name1, value1, string_name2, value2, ...)

Parâmetros:

Parâmetro

Descrição

string_name

Constante de string que especifica o nome do campo. Os nomes dos campos não diferenciam maiúsculas de minúsculas.

value

Valor do campo. Qualquer tipo é aceito, exceto NULL.

Valor retornado: STRUCT<string_name1:T1, string_name2:T2, ...>

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}

Acessar campos

Para acessar um campo STRUCT, adicione .field_name ao valor STRUCT ou à referência da coluna.

struct_value.field_name

Exemplo:

SELECT struct1.b
FROM VALUES (STRUCT(1 AS a, 2 AS b, 3 AS c)) AS tbl1(struct1);

-- Result
2

Os nomes dos campos nas expressões de acesso não diferenciam maiúsculas de minúsculas.