Como escolher chaves de partição
Você pode especificar como a projeção de partições mapeia os locais de partição para chaves de partição. No exemplo da seção anterior para CREATE TABLE
, a data e o horário foram combinados em uma chave de partição chamada “datehour”, mas outros esquemas são possíveis. Por exemplo, você também pode configurar uma tabela com chaves de partição separadas por ano, mês, dia e hora.
No entanto, dividir datas em ano, mês e dia significa que o tipo de projeção de partição date
não pode ser usado. Uma alternativa é separar a data do horário para ainda aproveitar o tipo de projeção da partição date
, mas facilitar a leitura das consultas que especificam intervalos de horas.
Com isso em mente, o exemplo CREATE TABLE
a seguir separa a data da hora. Como date
é uma palavra reservada em SQL, o exemplo usa day
como nome da chave de partição que representa a data.
CREATE EXTERNAL TABLE my_ingested_data2 ( ... ) ... PARTITIONED BY ( day STRING, hour INT ) 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.hour.type" = "integer", "projection.hour.range" = "0,23", "projection.hour.digits" = "2", "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix
/${day}/${hour}/" )
No exemplo de instrução CREATE TABLE
, a hora é uma chave de partição separada, configurada como um inteiro. A configuração para a chave de partição de hora especifica o intervalo de 0 a 23 e que a hora deverá ser formatada com dois dígitos quando o Athena gerar os locais de partições.
Uma consulta para a tabela my_ingested_data2
poderia ser semelhante a esta:
SELECT * FROM my_ingested_data2 WHERE day = '2021/11/09' AND hour > 3
Noções básicas de chave de partição e tipos de dados de projeção de partições
Observe que a chave datehour
no primeiro exemplo de CREATE TABLE
é configurada como date
na configuração de projeção de partições, mas o tipo de chave de partição é string
. O mesmo vale para day
no segundo exemplo. Os tipos na configuração de projeção de partições apenas dizem ao Athena como formatar os valores quando ele gera os locais de partição. Os tipos especificados não alteram o tipo da chave de partição. Em consultas, datehour
e day
são do tipo string
.
Quando uma consulta inclui uma condição como day = '2021/11/09'
, o Athena analisa a sequência do lado direito da expressão usando o formato de data especificado na configuração de projeção de partições. Depois que o Athena verifica se a data está dentro do intervalo configurado, ele usa o formato de data novamente para inserir a data como uma sequência no modelo de local de armazenamento.
Da mesma forma, para uma condição de consulta como day > '2021/11/09'
, o Athena analisa o lado direito e gera uma lista de todas as datas correspondentes dentro do intervalo configurado. Em seguida, ele usa o formato de data para inserir cada data no modelo de local de armazenamento para criar a lista de locais de partição.
Escrever a mesma condição que day > '2021-11-09'
ou day >
DATE '2021-11-09'
não funciona. No primeiro caso, o formato de data não corresponde (observe os hifens em vez de barras) e, no segundo caso, os tipos de dados não correspondem.