Cómo utilizar los prefijos personalizados y las particiones dinámicas - Amazon Athena

Cómo utilizar los prefijos personalizados y las particiones dinámicas

Firehose puede configurarse con prefijos personalizados y partición dinámica. Mediante estas características, puede configurar las claves de Amazon S3 y establecer esquemas de partición más compatibles con su caso de uso. También puede usar la proyección de particiones con estos esquemas de partición y configurarlos en consecuencia.

Por ejemplo, puede usar la característica de prefijo personalizado para obtener claves de Amazon S3 que tengan fechas con formato ISO en lugar del esquema predeterminado yyyy/MM/dd/HH.

También puede combinar los prefijos personalizados con el particionamiento dinámico para extraer una propiedad como customer_id de los mensajes de Firehose, como en el siguiente ejemplo.

prefix/!{timestamp:yyyy}-!{timestamp:MM}-!{timestamp:dd}/!{partitionKeyFromQuery:customer_id}/

Con ese prefijo de Amazon S3, el flujo de entrega de Firehose escribiría objetos en claves como s3://amzn-s3-demo-bucket/prefix/2021-11-01/customer-1234/file.extension. Para una propiedad como customer_id, cuyos valores pueden no conocerse de antemano, se puede usar el tipo de proyección de particiones injected y usar una instrucción CREATE TABLE como la siguiente:

CREATE EXTERNAL TABLE my_ingested_data3 ( ... ) ... PARTITIONED BY ( day STRING, customer_id STRING ) LOCATION "s3://amzn-s3-demo-bucket/prefix/" TBLPROPERTIES ( "projection.enabled" = "true", "projection.day.type" = "date", "projection.day.format" = "yyyy-MM-dd", "projection.day.range" = "2021-01-01,NOW", "projection.day.interval" = "1", "projection.day.interval.unit" = "DAYS", "projection.customer_id.type" = "injected", "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/${day}/${customer_id}/" )

Cuando se consulta una tabla que tiene una clave de partición de tipo injected, la consulta debe incluir un valor para esa clave de partición. Una consulta para la tabla my_ingested_data3 podría verse así:

SELECT * FROM my_ingested_data3 WHERE day BETWEEN '2021-11-01' AND '2021-11-30' AND customer_id = 'customer-1234'

Uso del tipo DATE para la clave de partición diaria

Ya que los valores de la clave de partición day tienen formato ISO, también puede usar el tipo DATE para la clave de partición del día en lugar de STRING, como en el siguiente ejemplo:

PARTITIONED BY (day DATE, customer_id STRING)

Cuando se consulta, esta estrategia permite usar las funciones de fecha en la clave de partición sin analizar ni iniciar, como en el siguiente ejemplo:

SELECT * FROM my_ingested_data3 WHERE day > CURRENT_DATE - INTERVAL '7' DAY AND customer_id = 'customer-1234'
nota

Al especificar una clave de partición del tipo DATE, se supone que ha utilizado la característica de prefijo personalizado para crear claves de Amazon S3 con fechas con formato ISO. Si utiliza el formato predeterminado de Firehose de yyyy/MM/dd/HH, debe especificar la clave de partición como tipo string aunque la propiedad de la tabla correspondiente sea de tipo date, como en el siguiente ejemplo:

PARTITIONED BY ( `mydate` string) TBLPROPERTIES ( 'projection.enabled'='true', ... 'projection.mydate.type'='date', 'storage.location.template'='s3://amzn-s3-demo-bucket/prefix/${mydate}')