CREATE TABLE AS - 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à.

CREATE TABLE AS

Crea una nuova tabella popolata con i risultati di una query SELECT. Per creare una tabella vuota, utilizza CREATE TABLE. CREATE TABLE AS combina una dichiarazione DDL CREATE TABLE con una dichiarazione DML SELECT, quindi tecnicamente contiene sia DDL sia DML. Tieni presente che, sebbene CREATE TABLE AS siano raggruppate qui con altre dichiarazioni DDL, le query CTAS in Athena vengono trattate come DML ai fini delle Service Quotas. Per informazioni sulle Service Quotas in Athena, consulta Service Quotas (Quote di Servizio).

Nota

Per le istruzioni CTAS, l'impostazione prevista per il proprietario del bucket non si applica alla posizione della tabella di destinazione in Amazon S3. L'impostazione prevista per il proprietario del bucket si applica solo al percorso di output di Amazon S3 specificato per i risultati delle query di Athena. Per ulteriori informazioni, consulta Specificare una posizione dei risultati delle query utilizzando la console Athena.

Per ulteriori informazioni su CREATE TABLE AS oltre all'ambito di questo argomento di riferimento, consulta Creazione di una tabella dai risultati delle query (CTAS).

Riepilogo

CREATE TABLE table_name [ WITH ( property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ]

Dove:

WITH ( property_name = expression[, ...] )

Un elenco di proprietà tabella CTAS facoltative, alcune delle quali sono specifiche per il formato di storage dei dati. Per informazioni, consulta Proprietà tabella CTAS.

query

Query SELECT utilizzata per creare una nuova tabella.

Importante

Se prevedi di creare una query con partizioni, specifica i nomi delle colonne partizionate nelle ultime voci dell'elenco delle colonne nella dichiarazione SELECT.

[ WITH [ NO ] DATA ]

Se si utilizza WITH NO DATA, viene creata una nuova tabella vuota con lo stesso schema della tabella originale.

Nota

Per includere le intestazioni di colonna nell'output dei risultati della query, è possibile utilizzare una semplice query SELECT anziché una query CTAS. È possibile recuperare i risultati dalla posizione dei risultati della query o scaricarli direttamente utilizzando la console Athena. Per ulteriori informazioni, consulta Utilizzo dei risultati delle query, delle query recenti e dei file di output.

Proprietà tabella CTAS

Ogni tabella CTAS in Athena dispone di un elenco di proprietà tabella CTAS opzionali specificate dall'utente utilizzando WITH (property_name = expression [, ...] ). Per ulteriori informazioni sull'uso di questi parametri, consulta Esempi di query CTAS.

WITH (property_name = expression [, ...], )
table_type = ['HIVE', 'ICEBERG']

Facoltativo. Il valore predefinito è HIVE. Specifica il tipo di tabella della tabella risultante

Esempio:

WITH (table_type ='ICEBERG')
external_location = [location]
Nota

Poiché le tabelle Iceberg non sono esterne, questa proprietà non si applica ad esse. Per definire la posizione principale di una tabella Iceberg in un'istruzione CTAS, utilizza la proprietà location descritta più avanti in questa sezione.

Facoltativo. La posizione nella quale Athena salva la query CTAS in Amazon S3.

Esempio:

WITH (external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/')

Athena non utilizza due volte lo stesso percorso per i risultati della query. Se si specifica il percorso manualmente, verificare che il percorso Amazon S3 non contenga dei dati. Athena non tenta mai di cancellare i tuoi dati. Se si desidera utilizzare di nuovo la stessa posizione, occorre eliminare manualmente i dati, altrimenti la query CTAS fallirà.

Se si esegue una query CTAS che specifica una posizione external_location in un gruppo di lavoro che applica una posizione dei risultati della query, la query non riesce e viene mostrato un messaggio di errore. Per visualizzare la posizione dei risultati della query specificata per il gruppo di lavoro, vedere i dettagli del gruppo di lavoro.

Se il gruppo di lavoro sostituisce l'impostazione lato client per la posizione dei risultati della query, Athena crea la tabella nel percorso seguente:

s3://DOC-EXAMPLE-BUCKET/tables/query-id/

Se non si utilizza la proprietà external_location per specificare una posizione e il gruppo di lavoro non sostituisce le impostazioni lato client, Athena utilizza l'impostazione lato client per la posizione dei risultati della query per creare la tabella nel percorso seguente:

s3://DOC-EXAMPLE-BUCKET/Unsaved-or-query-name/year/month/date/tables/query-id/
is_external = [boolean]

Facoltativo. Indica se la tabella è una tabella esterna. Il valore predefinito è true. Per le tabelle Iceberg, questo valore deve essere impostato su false.

Esempio:

WITH (is_external = false)
location = [location]

Obbligatorio per le tabelle Iceberg. Specifica la posizione principale della tabella Iceberg da creare partendo dai risultati della query.

Esempio:

WITH (location ='s3://DOC-EXAMPLE-BUCKET/tables/iceberg_table/')
field_delimiter = [delimiter]

Facoltativo e specifiche per formati di storage dei dati basati su testo. Il separatore di campo a carattere singolo per file in CSV, TSV e file di testo. Ad esempio, WITH (field_delimiter = ','). Attualmente, i delimitatori di campo multicanale non sono supportati per le query CTAS. Se non si specifica un delimitatore, per impostazione predefinita viene utilizzato \001.

format = [storage_format]

Il formato di archiviazione per i risultati delle query CTAS, ad esempio ORC, PARQUET, AVRO, JSON, ION o TEXTFILE. Per le tabelle Iceberg, i formati consentiti sono ORC, PARQUET e AVRO. Se omesso, per impostazione predefinita viene utilizzato PARQUET. Il nome di questo parametro format deve essere elencato in lettere minuscole, altrimenti la query CTAS fallirà.

Esempio:

WITH (format = 'PARQUET')
bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]
Nota

Questa proprietà non è valida per le tabelle Iceberg. Per le tabelle Iceberg, utilizza il partizionamento con trasformazione del bucket.

Elenco matrice di bucket per periodizzare i dati. Se omesso, Athena non salva tuoi dati nel bucket in questa query.

bucket_count = [int]
Nota

Questa proprietà non è valida per le tabelle Iceberg. Per le tabelle Iceberg, utilizza il partizionamento con trasformazione del bucket.

Il numero di bucket per la periodizzazione dei dati. Se omesso, Athena non conserva i dati nel bucket. Esempio:

CREATE TABLE bucketed_table WITH ( bucketed_by = ARRAY[column_name], bucket_count = 30, format = 'PARQUET', external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/' ) AS SELECT * FROM table_name
partitioned_by = ARRAY[ col_name[,…] ]
Nota

Questa proprietà non è valida per le tabelle Iceberg. Per utilizzare le trasformazioni delle partizioni per le tabelle Iceberg, utilizza la proprietà partitioning descritta più avanti in questa sezione.

Facoltativo. Un elenco matrice di colonne in base al quale sarà partizionata la tabella CTAS. Verificare che i nomi delle colonne partizionate siano elencate per ultimi nell'elenco delle colonne della dichiarazione SELECT.

partitioning = ARRAY[partition_transform, ...]

Facoltativo. Specifica il partizionamento della tabella Iceberg da creare. Iceberg supporta un'ampia varietà di trasformazioni ed evoluzione delle partizioni. La tabella seguente riepiloga le trasformazioni delle partizioni.

Trasformazione Descrizione
year(ts) Crea una partizione per ogni anno. Il valore della partizione è la differenza espressa con numero intero degli anni compresi tra ts e il 1° gennaio 1970.
month(ts) Crea una partizione per ogni mese di ogni anno. Il valore della partizione è la differenza espressa con numero intero dei mesi compresi tra ts e il 1° gennaio 1970.
day(ts) Crea una partizione per ogni giorno di ogni anno. Il valore della partizione è la differenza espressa con numero intero dei giorni compresi tra ts e il 1° gennaio 1970.
hour(ts) Crea una partizione per ogni ora di ogni giorno. Il valore della partizione è un timestamp con i minuti e i secondi impostati su zero.
bucket(x, nbuckets) Esegue l'hashing dei dati nel numero di bucket specificato. Il valore della partizione è un hash intero di x, con un valore compreso tra 0 e nbuckets - 1 inclusi.
truncate(s, nchars) Imposta il valore della partizione come primi nchars caratteri di s.

Esempio:

WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']))
optimize_rewrite_min_data_file_size_bytes = [long]

Facoltativo. Configurazione specifica dell'ottimizzazione dei dati I file più piccoli del valore specificato sono inclusi per la compattazione. Il valore predefinito è 0,75 volte il valore di write_target_data_file_size_bytes. Questa proprietà si applica solo alle tabelle Iceberg. Per ulteriori informazioni, consulta Ottimizzazione delle tabelle Iceberg.

Esempio:

WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
optimize_rewrite_max_data_file_size_bytes = [long]

Facoltativo. Configurazione specifica dell'ottimizzazione dei dati I file più grandi del valore specificato sono inclusi per la compattazione. Il valore predefinito è 1,8 volte il valore di write_target_data_file_size_bytes. Questa proprietà si applica solo alle tabelle Iceberg. Per ulteriori informazioni, consulta Ottimizzazione delle tabelle Iceberg.

Esempio:

WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
optimize_rewrite_data_file_threshold = [int]

Facoltativo. Configurazione specifica dell'ottimizzazione dei dati Se ci sono meno file di dati che richiedono un'ottimizzazione rispetto alla soglia specificata, i file non vengono riscritti. Ciò consente l'accumulo di più file di dati per produrre file più vicini alle dimensioni di destinazione e saltare i calcoli non necessari per risparmiare sui costi. Il predefinito è 5. Questa proprietà si applica solo alle tabelle Iceberg. Per ulteriori informazioni, consulta Ottimizzazione delle tabelle Iceberg.

Esempio:

WITH (optimize_rewrite_data_file_threshold = 5)
optimize_rewrite_delete_file_threshold = [int]

Facoltativo. Configurazione specifica dell'ottimizzazione dei dati Se a un file di dati sono associati meno file di eliminazione rispetto alla soglia, il file di dati non viene riscritto. Ciò consente l'accumulo di più file di eliminazione per ogni file di dati per risparmiare sui costi. Il valore predefinito è 2. Questa proprietà si applica solo alle tabelle Iceberg. Per ulteriori informazioni, consulta Ottimizzazione delle tabelle Iceberg.

Esempio:

WITH (optimize_rewrite_delete_file_threshold = 2)
vacuum_min_snapshots_to_keep = [int]

Facoltativo. Configurazione specifica per il vacuum. Il numero minimo di snapshot più recenti da mantenere. Il valore di default è 1. Questa proprietà si applica solo alle tabelle Iceberg. Per ulteriori informazioni, consulta VACUUM.

Nota

La proprietà vacuum_min_snapshots_to_keep richiede la versione 3 del motore Athena.

Esempio:

WITH (vacuum_min_snapshots_to_keep = 1)
vacuum_max_snapshot_age_seconds = [long]

Facoltativo. Configurazione specifica per il vacuum. Un periodo in secondi che rappresenta l'età degli snapshot da mantenere. Il valore predefinito è 432.000 (5 giorni). Questa proprietà si applica solo alle tabelle Iceberg. Per ulteriori informazioni, consulta VACUUM.

Nota

La proprietà vacuum_max_snapshot_age_seconds richiede la versione 3 del motore Athena.

Esempio:

WITH (vacuum_max_snapshot_age_seconds = 432000)
write_compression = [compression_format]

Il tipo di compressione da utilizzare per qualsiasi formato di archiviazione che consente di specificare la compressione. Il valore compression_format specifica la compressione da utilizzare quando i dati vengono scritti nella tabella. È possibile specificare la compressione per i formati file TEXTFILE, JSON, PARQUET e ORC.

Ad esempio, se la proprietà format specifica PARQUET come formato di archiviazione, il valore per write_compression specifica il formato di compressione per Parquet. In questo caso, specificare un valore per write_compression equivale a specificare un valore per parquet_compression.

Analogamente, se la proprietà format specifica ORC come formato di archiviazione, il valore per write_compression specifica il formato di compressione per ORC. In questo caso, specificare un valore per write_compression equivale a specificare un valore per orc_compression.

Non è possibile specificare più proprietà della tabella dei formati di compressione nella stessa query CTAS. Ad esempio, non è possibile specificare sia write_compression che parquet_compression nella stessa query. Lo stesso vale per write_compression e orc_compression. Per informazioni sui tipi di compressione supportati per ciascun formato di file, consultare Supporto della compressione in Athena.

orc_compression = [compression_format]

Il tipo di compressione da utilizzare per il formato di file ORC quando i dati ORC vengono scritti nella tabella. Ad esempio, WITH (orc_compression = 'ZLIB'). I blocchi all'interno del file ORC (eccetto il Postscript ORC) vengono compressi utilizzando la compressione specificata. Se omesso, per impostazione predefinita per ORC viene utilizzata la compressione ZLIB.

Nota

Si consiglia invece di utilizzare la proprietà write_compression al posto di orc_compression. Utilizzare la proprietà format per specificare il formato di archiviazione come ORC, quindi utilizzare la proprietà write_compression per specificare il formato di compressione che sarà utilizzato da ORC.

parquet_compression = [compression_format]

Il tipo di compressione da utilizzare per il formato di file Parquet quando i dati Parquet vengono scritti nella tabella. Ad esempio, WITH (parquet_compression = 'SNAPPY'). Questa compressione viene applicata ai blocchi di colonna all'interno dei file Parquet. Se omesso, per impostazione predefinita per Parquet viene utilizzata la compressione GZIP.

Nota

Si consiglia invece di utilizzare la proprietà write_compression al posto di parquet_compression. Utilizzare la proprietà format per specificare il formato di archiviazione come PARQUET, quindi utilizzare la proprietà write_compression per specificare il formato di compressione che sarà utilizzato da PARQUET.

compression_level = [compression_level]

Il livello di compressione da utilizzare. Questa proprietà si applica solo alla compressione ZSTD. I valori possibili sono compresi tra 1 e 22. Il valore predefinito è 3. Per ulteriori informazioni, consulta Utilizzo dei livelli di compressione ZSTD in Athena.

Esempi

Per esempi di query CTAS, consultare le risorse seguenti.