Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Firehose può essere configurato con prefissi personalizzati e partizionamento dinamico. Grazie a queste funzionalità, è possibile configurare le chiavi Amazon S3 e impostare schemi di partizionamento che supportano meglio il proprio caso d'uso. È inoltre possibile utilizzare la proiezione delle partizioni con questi schemi di partizionamento e configurarli di conseguenza.
Ad esempio, è possibile utilizzare la funzione di prefisso personalizzato per ottenere chiavi Amazon S3 con date formattate in ISO anziché lo schema yyyy/MM/dd/HH
di default.
È inoltre possibile combinare prefissi personalizzati con il partizionamento dinamico per estrarre una proprietà come dai messaggi customer_id
Firehose, come nell'esempio seguente.
prefix/!{timestamp:yyyy}-!{timestamp:MM}-!{timestamp:dd}/!{partitionKeyFromQuery:customer_id}/
Con quel prefisso Amazon S3, il flusso di distribuzione di Firehose scriverebbe oggetti su chiavi come. s3://amzn-s3-demo-bucket/prefix/2021-11-01/customer-1234/file.extension
Per una proprietà come customer_id
dove i valori potrebbero non essere noti in anticipo, è possibile utilizzare il tipo di proiezione della partizione injected
e usare un'istruzione CREATE TABLE
come la seguente:
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}/"
)
Quando si esegue una query su una tabella con una chiave di partizione di tipo injected
, la query deve includere un valore per quella chiave di partizione. Una query per la tabella my_ingested_data3
potrebbe essere simile alla seguente:
SELECT *
FROM my_ingested_data3
WHERE day BETWEEN '2021-11-01' AND '2021-11-30'
AND customer_id = 'customer-1234'
Usa il tipo DATE per la chiave di partizione del giorno
Perché i valori per la chiave di partizione day
sono formattati in ISO, è anche possibile utilizzare il tipo DATE
per la chiave di partizione del giorno invece di STRING
, come nel seguente esempio:
PARTITIONED BY (day DATE, customer_id STRING)
Quando si esegue una query, questa strategia consente di utilizzare le funzioni data sulla chiave di partizione senza analizzare o eseguire il casting, come nell'esempio seguente:
SELECT *
FROM my_ingested_data3
WHERE day > CURRENT_DATE - INTERVAL '7' DAY
AND customer_id = 'customer-1234'
Nota
La specificazione di una chiave di partizione di tipo DATE
presuppone che per creare chiavi Amazon S3 con date in formato ISO sia stata utilizzata la funzionalità di prefisso personalizzato. Se si utilizza il formato Firehose predefinito diyyyy/MM/dd/HH
, è necessario specificare la chiave di partizione come type string
anche se la proprietà della tabella corrispondente è di tipodate
, come nell'esempio seguente:
PARTITIONED BY (
`mydate` string)
TBLPROPERTIES (
'projection.enabled'='true',
...
'projection.mydate.type'='date',
'storage.location.template'='s3://amzn-s3-demo-bucket/prefix/${mydate}')