Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Utilizzare CTAS e INSERT INTO aggirare il limite di 100 partizioni

Modalità Focus
Utilizzare CTAS e INSERT INTO aggirare il limite di 100 partizioni - 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à.

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

Athena ha un limite di 100 partizioni per CREATE TABLE AS SELECT () CTASquery. Allo stesso modo, è possibile aggiungere un massimo di 100 partizioni a una tabella di destinazione con un'istruzione. INSERTINTO

Se superate questa limitazione, potreste ricevere il messaggio di errore HIVE_ _ _ _ TOO MANY OPEN _PARTITIONS: Superato il limite di 100 open writer per partizioni/bucket. Per ovviare a questa limitazione, è possibile utilizzare un'CTASistruzione e una serie di INSERT INTO istruzioni che creano o inseriscono fino a 100 partizioni ciascuna.

L'esempio in questo argomento utilizza un database chiamato i tpch100 cui dati risiedono nella posizione del bucket Amazon S3 s3://amzn-s3-demo-bucket/.

Utilizzare CTAS e INSERT INTO creare una tabella con più di 100 partizioni
  1. Utilizzare un'istruzione CREATE EXTERNAL TABLE per creare una tabella partizionata nel campo desiderato.

    L'istruzione di esempio seguente partiziona i dati dalla colonna l_shipdate. La tabella ha 2525 partizioni.

    CREATE EXTERNAL TABLE `tpch100.lineitem_parq_partitioned`( `l_orderkey` int, `l_partkey` int, `l_suppkey` int, `l_linenumber` int, `l_quantity` double, `l_extendedprice` double, `l_discount` double, `l_tax` double, `l_returnflag` string, `l_linestatus` string, `l_commitdate` string, `l_receiptdate` string, `l_shipinstruct` string, `l_comment` string) PARTITIONED BY ( `l_shipdate` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/lineitem/'
  2. Eseguire un comando SHOW PARTITIONS <table_name> come il seguente per elencare le partizioni.

    SHOW PARTITIONS lineitem_parq_partitioned

    Di seguito sono riportati i risultati parziali di esempio.

    /* l_shipdate=1992-01-02 l_shipdate=1992-01-03 l_shipdate=1992-01-04 l_shipdate=1992-01-05 l_shipdate=1992-01-06 ... l_shipdate=1998-11-24 l_shipdate=1998-11-25 l_shipdate=1998-11-26 l_shipdate=1998-11-27 l_shipdate=1998-11-28 l_shipdate=1998-11-29 l_shipdate=1998-11-30 l_shipdate=1998-12-01 */
  3. Esegui una CTAS query per creare una tabella partizionata.

    L'esempio seguente crea una tabella chiamata my_lineitem_parq_partitioned e utilizza la clausola WHERE in modo che DATE sia precedente a 1992-02-01. Poiché il set di dati di esempio inizia con gennaio 1992, vengono create solo le partizioni per gennaio 1992.

    CREATE table my_lineitem_parq_partitioned WITH (partitioned_by = ARRAY['l_shipdate']) AS SELECT l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_commitdate, l_receiptdate, l_shipinstruct, l_comment, l_shipdate FROM tpch100.lineitem_parq_partitioned WHERE cast(l_shipdate as timestamp) < DATE ('1992-02-01');
  4. Eseguire il comando SHOW PARTITIONS per verificare che la tabella contenga le partizioni desiderate.

    SHOW PARTITIONS my_lineitem_parq_partitioned;

    Le partizioni nell'esempio sono per gennaio 1992.

    /* l_shipdate=1992-01-02 l_shipdate=1992-01-03 l_shipdate=1992-01-04 l_shipdate=1992-01-05 l_shipdate=1992-01-06 l_shipdate=1992-01-07 l_shipdate=1992-01-08 l_shipdate=1992-01-09 l_shipdate=1992-01-10 l_shipdate=1992-01-11 l_shipdate=1992-01-12 l_shipdate=1992-01-13 l_shipdate=1992-01-14 l_shipdate=1992-01-15 l_shipdate=1992-01-16 l_shipdate=1992-01-17 l_shipdate=1992-01-18 l_shipdate=1992-01-19 l_shipdate=1992-01-20 l_shipdate=1992-01-21 l_shipdate=1992-01-22 l_shipdate=1992-01-23 l_shipdate=1992-01-24 l_shipdate=1992-01-25 l_shipdate=1992-01-26 l_shipdate=1992-01-27 l_shipdate=1992-01-28 l_shipdate=1992-01-29 l_shipdate=1992-01-30 l_shipdate=1992-01-31 */
  5. Utilizzare un'istruzione INSERT INTO per aggiungere le partizioni alla tabella.

    Nell'esempio seguente vengono aggiunte le partizioni per le date del mese di febbraio 1992.

    INSERT INTO my_lineitem_parq_partitioned SELECT l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_commitdate, l_receiptdate, l_shipinstruct, l_comment, l_shipdate FROM tpch100.lineitem_parq_partitioned WHERE cast(l_shipdate as timestamp) >= DATE ('1992-02-01') AND cast(l_shipdate as timestamp) < DATE ('1992-03-01');
  6. Eseguire nuovamente SHOW PARTITIONS.

    SHOW PARTITIONS my_lineitem_parq_partitioned;

    La tabella di esempio ora ha partizioni sia da gennaio che da febbraio 1992.

    /* l_shipdate=1992-01-02 l_shipdate=1992-01-03 l_shipdate=1992-01-04 l_shipdate=1992-01-05 l_shipdate=1992-01-06 ... l_shipdate=1992-02-20 l_shipdate=1992-02-21 l_shipdate=1992-02-22 l_shipdate=1992-02-23 l_shipdate=1992-02-24 l_shipdate=1992-02-25 l_shipdate=1992-02-26 l_shipdate=1992-02-27 l_shipdate=1992-02-28 l_shipdate=1992-02-29 */
  7. Continuare a utilizzare le istruzioni INSERT INTO che leggono e aggiungono non più di 100 partizioni ciascuna. Continuare fino a raggiungere il numero di partizioni necessarie.

    Importante

    Quando imposti la condizione WHERE, assicurati che le query non si sovrappongano. In caso contrario, alcune partizioni potrebbero avere dati duplicati.

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.