View a markdown version of this page

Desaninhamento de esquemas - AWS Glue

Desaninhamento de esquemas

Ao fazer a integração com serviços de analytics por meio do ETL zero, você pode escolher como as estruturas aninhadas são representadas nas tabelas de destino. AWS O ETL zero do Glue fornece opções de desaninhamento de esquemas para nivelar estruturas de dados complexas em formatos mais fáceis de analisar.

Opções de desaninhamento

Ao criar uma integração ETL zero com uma fonte, você pode escolher entre as seguintes opções de desaninhamento. Essas opções correspondem aos valores de enumeração específicos que você usará ao chamar a API CreateIntegrationTableProperty. Para todas as opções não aninhadas, percorreremos até a camada mais interna e mapearemos o tipo do DDB para o tipo primitivo correspondente do Spark/Iceberg da melhor forma possível. O mapeamento de tipos entre o DDB de origem e a tabela de destino é o seguinte:

Tipo de dados de origem DDBTipo de dados da tabela de destino
"S"StringType
"B"BinaryType
"N"DoubleType
"BOOL"BooleanType
"SS"ArrayType(StringType)
"NS"ArrayType(DoubleType)
"BS"ArrayType(BinaryType)
"L"ArrayType(StringType)
"NULL"Ignorar
"M"StructType (TOP/NOUNNEST)
Sem desaninhamento: NO_UNNEST

Valor da API: NO_UNNEST

Preserva a estrutura aninhada original dos itens do Amazon DynamoDB. Mapas e listas são armazenados como colunas estruturadas no destino.

Ideal para: preservar a estrutura exata dos seus dados do Amazon DynamoDB quando suas ferramentas de analytics podem funcionar com dados aninhados.

Nível superior: TOP_LEVEL

Valor da API: TOP_LEVEL

Achatamento do nível superior dos mapas aninhados em colunas individuais. As estruturas de lista permanecem aninhadas.

Preserva a estrutura exata dos seus dados do Amazon DynamoDB quando suas ferramentas de analytics podem funcionar com dados aninhados com todas as informações do tipo DDB removidas.

Ideal para: equilibrar a preservação da estrutura de dados e a simplicidade da consulta quando seus itens da tabela do Amazon DynamoDB têm um esquema consistente.

Desaninhar todos os níveis: FULL (padrão)

Valor da API: FULL

Achatamento recursivo de todas as estruturas aninhadas (mapas e listas) em colunas individuais com notação de pontos para nomeação.

Ideal para: maximizar a simplicidade das consultas ao trabalhar com estruturas profundamente aninhadas e ferramentas de analytics que preferem esquemas simples.

nota

O desaninhamento total pode resultar em tabelas muito amplas com muitas colunas se seus dados do DynamoDB tiverem estruturas variáveis ou profundamente aninhadas.

exemplo Usar opções de desaninhamento na API

Ao configurar o desaninhamento do esquema por meio da API CreateIntegrationTableProperty, especifique a opção de desaninhamento no parâmetro UnnestSpec:

aws glue create-integration-table-property --resource-arn "arn:aws:glue:us-east-1:123456789012:database/my_db" --table-name "my-table" --cli-input-json '{ "TargetTableConfig": { "UnnestSpec": "FULL", "TargetTableName": "my-target-table", } }'

Exemplos de desaninhamento

Considere um item do DynamoDB com a seguinte estrutura:

// Input DynamoDB Record { "Item": { "col_1": { "S": "value_1" }, "col_2": { "M": { "col_3": { "M": { "id": { "S": "value_3" } } }, "col_4": { "BOOL": true } } } } }

Exemplo de NO_UNNEST

Com NO_UNNEST, a linha inteira é armazenada em uma coluna mais a chave primária. As informações do tipo DynamoDB são preservadas. Isso mantém a compatibilidade com os padrões de consulta do Redshift.

Tabela Iceberg resultante (presumindo que col_1 seja a chave primária):

col_1 (string) valor (struct)
value_1
{ "col_2": { "M": { "col_3": { "M": { "id": { "S": "value_3" } } }, "col_4": { "BOOL": true } } } }

As consultas precisariam usar padrões de acesso de estrutura e array:

SELECT value.col_1, value.col_2.M.col_3.M.id.S, value.col_2.M.col_4.BOOL FROM product_table;

Exemplo de TOP_LEVEL

Com o TOP_LEVEL, somente os campos de nível superior não são aninhados, mantendo os campos aninhados intactos como structs. As informações de tipo do DynamoDB são removidas e a digitação é mantida. Converte para o tipo string quando ocorrem conflitos de esquema.

Tabela do Glue resultante após a replicação:

col_1 (string) col_2 (struct)
value_1
{ "col_3": { "id": "value_3" }, "col_4": true }

As consultas seriam simplificadas para o primeiro nível:

SELECT col_1, col_2.col_3.id, col_2.col_4 FROM product_table;

Exemplo de FULL

Com o desaninhamento FULL, os campos de nível superior e os campos de struct/map aninhados são nivelados. A notação de pontos é usada para campos aninhados (p. ex., “col_2.col_3.id”). Os elementos array permanecem não aninhados. Cada nó folha torna-se uma coluna de nível superior.

Tabela do Glue resultante após a replicação:

col_1 (string) col_2.col_3.id (string) col_2.col_4 (booleano)
value_1 value_3 TRUE

As consultas seriam totalmente achatadas:

SELECT col_1, "col_2.col_3.id", "col_2.col_4" FROM product_table;