Partizionamento dei dati in Athena - Amazon Athena

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à.

Partizionamento dei dati in Athena

Effettuando il partizionamento dei dati, è possibile limitare la quantità di dati scansionati da ogni query, migliorando così le prestazioni e riducendo i costi. in base a qualsiasi chiave di partizione. In genere è consigliabile partizionare i dati in base al tempo, spesso determinando uno schema di partizionamento multilivello. Ad esempio, un cliente che ha dati in entrata ogni ora potrebbe decidere di partizione per anno, mese, data e ora. Un altro cliente che ha dati provenienti da diverse origini ma che vengono caricati una volta al giorno, potrebbe eseguire la partizione in base all'identificatore dell'origine dati e alla data.

Athena può utilizzare partizioni in stile Apache Hive, i cui percorsi di dati contengono coppie chiave-valore collegate da simboli di uguale (ad esempio, country=us/... o year=2021/month=01/day=26/...). Pertanto, i percorsi includono sia i nomi delle chiavi di partizione che i valori rappresentati da ciascun percorso. Per caricare nuove partizioni Hive in una tabella partizionata, è possibile utilizzare il comando MSCK REPAIR TABLE, che funziona solo con partizioni in stile Hive.

Athena può utilizzare anche schemi di partizionamento in stile non Hive. Ad esempio, CloudTrail i log e i flussi di consegna Firehose utilizzano componenti di percorso separati per parti di data come. data/2021/01/26/us/6fc7845e.json Per le partizioni non in stile Hive, è possibile usare ALTER TABLE ADD PARTITION per aggiungere manualmente le partizioni.

Considerazioni e limitazioni

Quando si utilizza il partizionamento, tenere presente i seguenti punti:

  • Se esegui una query su una tabella partizionata e specifichi la partizione nella clausola WHERE, Athena analizza i dati solo da quella partizione. Per ulteriori informazioni, consulta Ubicazione della tabella e partizioni.

  • Se si esegue le query sui bucket Amazon S3 con un numero elevato di oggetti e i dati non sono partizionati, queste query possono influenzare i limiti del tasso di richieste GET in Amazon S3 e comportare eccezioni Amazon S3. Per evitare errori, partiziona i dati. Inoltre, considera di ottimizzare i tassi di richiesta Amazon S3. Per maggiori informazioni, consulta le Best practice per la creazione di modelli: ottimizzazione delle prestazioni di Amazon S3.

  • Le posizioni delle partizioni da utilizzare con Athena devono utilizzare il protocollo s3 (ad esempio, s3://DOC-EXAMPLE-BUCKET/folder/). In Athena, i percorsi che utilizzano altri protocolli (ad esempio, s3a://DOC-EXAMPLE-BUCKET/folder/) determineranno errori quando le query MSCK REPAIR TABLE vengono eseguite sulle tabelle contenenti.

  • Assicurarsi che il percorso Amazon S3 sia in minuscolo invece che in camel case (ad esempio, userid invece di userId) Se il percorso S3 è in camel case, MSCK REPAIR TABLE non aggiunge le partizioni a AWS Glue Data Catalog. Per ulteriori informazioni, consulta MSCK REPAIR TABLE.

  • Poiché MSCK REPAIR TABLE analizza sia una cartella che le relative sottocartelle per trovare uno schema di partizioni corrispondente, assicurarsi di conservare i dati per tabelle separate in gerarchie di cartelle separate. Ad esempio, supponiamo di avere dati per la tabella 1 in s3://DOC-EXAMPLE-BUCKET1 e dati per la tabella 2 in. s3://DOC-EXAMPLE-BUCKET1/table-2-data Se entrambe le tabelle sono partizionate per stringa, MSCK REPAIR TABLE aggiungerà le partizioni per la tabella 2 alla tabella 1. Per evitare ciò, usa invece strutture di cartelle separate come s3://DOC-EXAMPLE-BUCKET1 e. s3://DOC-EXAMPLE-BUCKET2 Questo comportamento è coerente con Amazon EMR e Apache Hive.

  • Se utilizzi il AWS Glue Data Catalog con Athena, consulta AWS Glue endpoint e quote per le quote di servizio sulle partizioni per account e per tabella.

  • Per richiedere un aumento della quota delle partizioni se utilizzi il AWS Glue Data Catalog, visita la console Service Quotas per. AWS Glue

Creazione e caricamento di una tabella con dati partizionati

Per creare una tabella con partizioni, utilizzare la clausola PARTITIONED BY nell'istruzione CREATE TABLE. La clausola PARTITIONED BY definisce le chiavi su cui partizionare i dati, come nell'esempio seguente. La clausola LOCATION specifica la posizione principale dei dati partizionati.

CREATE EXTERNAL TABLE users ( first string, last string, username string ) PARTITIONED BY (id string) STORED AS parquet LOCATION 's3://DOC-EXAMPLE-BUCKET'

Dopo aver creato la tabella, è possibile caricare i dati nelle partizioni per l'interrogazione. Per le partizioni stile Hive, esegui MSCK REPAIR TABLE. Per le partizioni in stile non Hive, utilizza ALTER TABLE ADD PARTITION per aggiungere manualmente le partizioni.

Preparazione di dati in stile Hive e in stile non Hive per le query

Nelle sezioni seguenti viene illustrato come preparare i dati in stile Hive e non Hive per le query in Athena.

Scenario 1: dati archiviati su Amazon S3 in formato Hive

In questo scenario, le partizioni vengono archiviate in cartelle separate in Amazon S3. Ad esempio, ecco l'elenco parziale di campioni e impressioni prodotti dal comando aws s3 ls, che elenca gli oggetti S3 con un prefisso specificato:

aws s3 ls s3://elasticmapreduce/samples/hive-ads/tables/impressions/ PRE dt=2009-04-12-13-00/ PRE dt=2009-04-12-13-05/ PRE dt=2009-04-12-13-10/ PRE dt=2009-04-12-13-15/ PRE dt=2009-04-12-13-20/ PRE dt=2009-04-12-14-00/ PRE dt=2009-04-12-14-05/ PRE dt=2009-04-12-14-10/ PRE dt=2009-04-12-14-15/ PRE dt=2009-04-12-14-20/ PRE dt=2009-04-12-15-00/ PRE dt=2009-04-12-15-05/

Qui, i log vengono archiviati con il nome di colonna (dt) impostato in modo corrispondente a incrementi di giorno, ora e minuto. Quando si assegna un DDL con il percorso della cartella padre, lo schema e il nome della colonna partizionata, Athena è in grado di eseguire query sui dati in quelle sottocartelle.

Creazione della tabella

Per creare una tabella da questi dati, creare una partizione insieme a 'dt' come nella seguente istruzione DDL di Athena:

CREATE EXTERNAL TABLE impressions ( requestBeginTime string, adId string, impressionId string, referrer string, userAgent string, userCookie string, ip string, number string, processId string, browserCookie string, requestEndTime string, timers struct<modelLookup:string, requestTime:string>, threadId string, hostname string, sessionId string) PARTITIONED BY (dt string) ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://elasticmapreduce/samples/hive-ads/tables/impressions/' ;

Questa tabella utilizza il serializzatore/deserializzatore JSON nativo di Hive per leggere i dati JSON archiviati in Amazon S3. Per ulteriori informazioni sui formati supportati, consulta Formati di SerDe e di dati supportati.

Esecuzione di MSCK REPAIR TABLE

Dopo aver eseguito la query CREATE TABLE, eseguire il comando MSCK REPAIR TABLE nell'editor di query Athena per caricare le partizioni, come nell'esempio seguente.

MSCK REPAIR TABLE impressions

Una volta eseguito il comando, i dati sono pronti per l'esecuzione della query.

Esecuzione di query sui dati

Eseguire la query sui dati dalla tabella di impressioni utilizzando la colonna di partizione. Ecco un esempio:

SELECT dt,impressionid FROM impressions WHERE dt<'2009-04-12-14-00' and dt>='2009-04-12-13-00' ORDER BY dt DESC LIMIT 100

Questa query dovrebbe restituire risultati simili ai seguenti:

2009-04-12-13-20 ap3HcVKAWfXtgIPu6WpuUfAfL0DQEc 2009-04-12-13-20 17uchtodoS9kdeQP1x0XThKl5IuRsV 2009-04-12-13-20 JOUf1SCtRwviGw8sVcghqE5h0nkgtp 2009-04-12-13-20 NQ2XP0J0dvVbCXJ0pb4XvqJ5A4QxxH 2009-04-12-13-20 fFAItiBMsgqro9kRdIwbeX60SROaxr 2009-04-12-13-20 V4og4R9W6G3QjHHwF7gI1cSqig5D1G 2009-04-12-13-20 hPEPtBwk45msmwWTxPVVo1kVu4v11b 2009-04-12-13-20 v0SkfxegheD90gp31UCr6FplnKpx6i 2009-04-12-13-20 1iD9odVgOIi4QWkwHMcOhmwTkWDKfj 2009-04-12-13-20 b31tJiIA25CK8eDHQrHnbcknfSndUk

Scenario 2: i dati non sono partizionati in formato Hive

Nell'esempio seguente, il comando aws s3 ls mostra i registri ELB archiviati in Amazon S3. Notare come il layout dei dati non utilizza coppie key=value e quindi non è in formato Hive. (L'opzione --recursive per il comando aws s3 ls specifica che siano elencati tutti i file o gli oggetti nella directory o nel prefisso specificati).

aws s3 ls s3://athena-examples-myregion/elb/plaintext/ --recursive 2016-11-23 17:54:46 11789573 elb/plaintext/2015/01/01/part-r-00000-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:46 8776899 elb/plaintext/2015/01/01/part-r-00001-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:46 9309800 elb/plaintext/2015/01/01/part-r-00002-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 9412570 elb/plaintext/2015/01/01/part-r-00003-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 10725938 elb/plaintext/2015/01/01/part-r-00004-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:46 9439710 elb/plaintext/2015/01/01/part-r-00005-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 0 elb/plaintext/2015/01/01_$folder$ 2016-11-23 17:54:47 9012723 elb/plaintext/2015/01/02/part-r-00006-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 7571816 elb/plaintext/2015/01/02/part-r-00007-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:47 9673393 elb/plaintext/2015/01/02/part-r-00008-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 11979218 elb/plaintext/2015/01/02/part-r-00009-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 9546833 elb/plaintext/2015/01/02/part-r-00010-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 10960865 elb/plaintext/2015/01/02/part-r-00011-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 0 elb/plaintext/2015/01/02_$folder$ 2016-11-23 17:54:48 11360522 elb/plaintext/2015/01/03/part-r-00012-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 11211291 elb/plaintext/2015/01/03/part-r-00013-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:48 8633768 elb/plaintext/2015/01/03/part-r-00014-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 11891626 elb/plaintext/2015/01/03/part-r-00015-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 9173813 elb/plaintext/2015/01/03/part-r-00016-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 11899582 elb/plaintext/2015/01/03/part-r-00017-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:49 0 elb/plaintext/2015/01/03_$folder$ 2016-11-23 17:54:50 8612843 elb/plaintext/2015/01/04/part-r-00018-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 10731284 elb/plaintext/2015/01/04/part-r-00019-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 9984735 elb/plaintext/2015/01/04/part-r-00020-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 9290089 elb/plaintext/2015/01/04/part-r-00021-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:50 7896339 elb/plaintext/2015/01/04/part-r-00022-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 8321364 elb/plaintext/2015/01/04/part-r-00023-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 0 elb/plaintext/2015/01/04_$folder$ 2016-11-23 17:54:51 7641062 elb/plaintext/2015/01/05/part-r-00024-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 10253377 elb/plaintext/2015/01/05/part-r-00025-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 8502765 elb/plaintext/2015/01/05/part-r-00026-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 11518464 elb/plaintext/2015/01/05/part-r-00027-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 7945189 elb/plaintext/2015/01/05/part-r-00028-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 7864475 elb/plaintext/2015/01/05/part-r-00029-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 0 elb/plaintext/2015/01/05_$folder$ 2016-11-23 17:54:51 11342140 elb/plaintext/2015/01/06/part-r-00030-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:51 8063755 elb/plaintext/2015/01/06/part-r-00031-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 9387508 elb/plaintext/2015/01/06/part-r-00032-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 9732343 elb/plaintext/2015/01/06/part-r-00033-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 11510326 elb/plaintext/2015/01/06/part-r-00034-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 9148117 elb/plaintext/2015/01/06/part-r-00035-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 0 elb/plaintext/2015/01/06_$folder$ 2016-11-23 17:54:52 8402024 elb/plaintext/2015/01/07/part-r-00036-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 8282860 elb/plaintext/2015/01/07/part-r-00037-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:52 11575283 elb/plaintext/2015/01/07/part-r-00038-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 8149059 elb/plaintext/2015/01/07/part-r-00039-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 10037269 elb/plaintext/2015/01/07/part-r-00040-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 10019678 elb/plaintext/2015/01/07/part-r-00041-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt 2016-11-23 17:54:53 0 elb/plaintext/2015/01/07_$folder$ 2016-11-23 17:54:53 0 elb/plaintext/2015/01_$folder$ 2016-11-23 17:54:53 0 elb/plaintext/2015_$folder$

Esecuzione di ALTER TABLE ADD PARTITION

Poiché i dati non sono in formato Hive, non è possibile utilizzare il comando MSCK REPAIR TABLE per aggiungere le partizioni alla tabella dopo averla creata. Invece, è possibile utilizzare il comando ALTER TABLE ADD PARTITION per aggiungere manualmente ogni partizione. Ad esempio, per caricare i dati in s3://athena-examples-regione/elb/plaintext/2015/01/01/, è possibile eseguire la query riportata. Si noti che non è richiesta una colonna di partizione separata per ogni cartella Amazon S3 e che il valore della chiave di partizione può essere diverso dalla chiave Amazon S3.

ALTER TABLE elb_logs_raw_native_part ADD PARTITION (dt='2015-01-01') location 's3://athena-examples-us-west-1/elb/plaintext/2015/01/01/'

Se esiste già una partizione, viene visualizzato l'errore Partizione già esistente. Per evitare questo errore, è possibile utilizzare la clausola IF NOT EXISTS. Per ulteriori informazioni, consulta ALTER TABLE ADD PARTITION. Per rimuovere una partizione, è possibile utilizzare ALTER TABLE DROP PARTITION.

Proiezione delle partizioni

Per evitare di dover gestire le partizioni, è possibile utilizzare la proiezione delle partizioni. La proiezione delle partizioni è un'opzione per tabelle altamente partizionate la cui struttura è nota in anticipo. Nella proiezione delle partizioni, i valori e le posizioni delle partizioni vengono calcolati dalle proprietà della tabella configurate piuttosto che dalla lettura da un repository di metadati. Poiché i calcoli in memoria sono più veloci della ricerca remota, l'uso della proiezione delle partizioni può ridurre significativamente i tempi di esecuzione delle query.

Per ulteriori informazioni, consulta Proiezione delle partizioni con Amazon Athena.

Altre risorse