Desanidamiento de esquemas
Cuando integra servicios de análisis a través de la integración zero-ETL, puede elegir cómo se representan las estructuras anidadas en las tablas de destino. AWS La integración zero-ETL de Glue proporciona opciones de desanidamiento de esquemas para aplanar estructuras de datos complejas en formatos más sencillos para el análisis.
Opciones de desanidamiento
Cuando crea una integración zero-ETL con un origen, puede elegir entre las siguientes opciones de desanidamiento. Estas opciones corresponden a valores de enumeración específicos que utilizará cuando llame a la API CreateIntegrationTableProperty. Para todas las opciones de anulación de la anidación, iríamos hasta la la capa más interior y asignaríamos el tipo DDB al tipo primitivo de spark o iceberg de destino con todo nuestro esfuerzo. El tipo de asignación entre la DDB de origen y la tabla de destino es el siguiente:
| Tipo de datos de origen de DDB | Tipo de datos de la tabla de destino |
|---|---|
"S" | StringType |
"B" | Tipo binario |
"N" | DoubleType |
"BOOL" | BooleanType |
"SS" | ArrayType(StringType) |
"NS" | ArrayType(DoubleType) |
"BS" | ArrayType(BinaryType) |
"L" | ArrayType(StringType) |
"NULL" | Ignore |
"M" | StructType (TOP/NOUNNEST) |
- Sin anular la anidación: NO_UNNEST
-
Valor de la API:
NO_UNNESTConserva la estructura anidada original de los elementos de Amazon DynamoDB. Los mapas y las listas se almacenan como columnas estructuradas en el destino.
Ideal para: conservar la estructura exacta de los datos de Amazon DynamoDB cuando las herramientas de análisis pueden trabajar con datos anidados.
- Nivel superior: TOP_LEVEL
-
Valor de la API:
TOP_LEVELAplana el nivel superior de los mapas anidados en columnas individuales. Las estructuras de listas permanecen anidadas.
Conserva la estructura exacta de los datos de Amazon DynamoDB cuando las herramientas de análisis pueden trabajar con datos anidados con toda la información del tipo de DDB eliminada.
Ideal para: equilibrar la conservación de la estructura de datos y la simplicidad de las consultas cuando los elementos de tabala de Amazon DynamoDB tienen un esquema coherente.
- Anula la anidación en todos los niveles: FULL (predeterminado)
-
Valor de la API:
FULLAplana de forma recursiva todas las estructuras anidadas (mapas y listas) en columnas individuales con notación de puntos para los nombres.
Ideal para: maximizar la simplicidad de las consultas cuando se trabaja con estructuras muy anidadas y herramientas de análisis que prefieren esquemas planos.
nota
El desanidamiento completo puede generar tablas muy anchas con muchas columnas si los datos de DynamoDB tienen estructuras variables o muy anidadas.
ejemplo Uso de opciones de desanidamiento en la API
Cuando configure el desanidamiento de esquemas mediante la API CreateIntegrationTableProperty, especifique la opción de desanidamiento en el 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", } }'
Ejemplos de desanidamiento
Considere un elemento de DynamoDB con la siguiente estructura:
// Input DynamoDB Record { "Item": { "col_1": { "S": "value_1" }, "col_2": { "M": { "col_3": { "M": { "id": { "S": "value_3" } } }, "col_4": { "BOOL": true } } } } }
Ejemplo de NO_UNNEST
Con NO_UNNEST, toda la fila se almacena en una columna más la clave principal. Se conserva la información de tipos de DynamoDB. Esto mantiene la compatibilidad con los patrones de consulta de Redshift.
Tabla Iceberg resultante (suponiendo que col_1 sea la clave principal):
| col_1 (cadena) | value (estructura) |
|---|---|
| value_1 |
|
Las consultas necesitarían usar patrones de acceso a estructuras y matrices:
SELECT value.col_1, value.col_2.M.col_3.M.id.S, value.col_2.M.col_4.BOOL FROM product_table;
Ejemplo de TOP_LEVEL
Con TOP_LEVEL, solo se deshacen los campos de nivel superior y se mantienen intactos los campos anidados como estructuras. Se quita la información de tipo de DynamoDB y se mantiene la escritura. Se convierte a tipo cadena cuando se producen conflictos de esquema.
Tabla Glue resultante después de la replicación:
| col_1 (cadena) | col_2 (estructura) |
|---|---|
| value_1 |
|
Las consultas se simplificarían para el primer nivel:
SELECT col_1, col_2.col_3.id, col_2.col_4 FROM product_table;
Ejemplo de FULL
Con la anulación de anidación FULL, se aplanan tanto los campos de nivel superior como los campos de estructura o mapa anidados. La notación de puntos se usa para los campos anidados (por ejemplo, “col_2.col_3.id”). Los elementos de la matriz permanecen sin anidar. Cada nodo hoja se convierte en una columna de nivel superior.
Tabla Glue resultante después de la replicación:
| col_1 (cadena) | col_2.col_3.id (cadena) | col_2.col_4 (booleano) |
|---|---|---|
| value_1 | value_3 | TRUE |
Las consultas quedarían completamente aplanadas:
SELECT col_1, "col_2.col_3.id", "col_2.col_4" FROM product_table;