CTASnote sull'utilizzo - Amazon Redshift

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

CTASnote sull'utilizzo

Limiti

Amazon Redshift applica una quota del numero di tabelle per cluster per tipo di nodo.

Il numero massimo di caratteri per un nome di tabella è 127.

Il numero massimo di colonne che puoi definire in una singola tabella è 1.600.

Ereditarietà di attributi di colonna e tabella

CREATETABLELe tabelle AS (CTAS) non ereditano vincoli, colonne di identità, valori di colonna predefiniti o la chiave primaria dalla tabella da cui sono state create.

Non è possibile specificare codifiche di compressione delle colonne per le tabelle. CTAS Amazon Redshift assegna automaticamente la codifica della compressione come segue:

  • Alle colonne definite come chiavi di ordinamento viene assegnata RAW la compressione.

  • Alle colonne definite comeBOOLEAN,REAL, DOUBLE PRECISIONGEOMETRY, o tipo di GEOGRAPHY dati viene assegnata RAW la compressione.

  • Le colonne definite comeSMALLINT,,,INTEGER,BIGINT,DECIMAL,DATE, TIME TIMETZTIMESTAMP, o a TIMESTAMPTZ cui è assegnata AZ64 la compressione.

  • Colonne definite come o CHAR VARBYTE a VARCHAR cui è assegnata LZO la compressione.

Per ulteriori informazioni, consulta Codifiche di compressione e Tipi di dati.

Per assegnare esplicitamente le codifiche di colonna, utilizza CREATE TABLE.

CTASdetermina lo stile di distribuzione e la chiave di ordinamento per la nuova tabella in base al piano di query per la SELECT clausola.

Per le query complesse, ad esempio le query che includono join, aggregazioni, una clausola order by o una clausola limite, CTAS fa del suo meglio per scegliere lo stile di distribuzione e la chiave di ordinamento ottimali in base al piano di query.

Nota

Per le prestazioni ottimali con set di dati di grandi dimensioni o query complesse, consigliamo di eseguire il test utilizzando set di dati tipici.

Spesso è possibile prevedere la chiave di distribuzione e la chiave di ordinamento scelte esaminando il piano di interrogazione per vedere quali colonne, se ce ne sono, CTAS sceglie l'ottimizzatore di query per ordinare e distribuire i dati. Se il nodo principale del piano di query è una semplice scansione sequenziale da una singola tabella (XN Seq Scan), CTAS generalmente utilizza lo stile di distribuzione e la chiave di ordinamento della tabella di origine. Se il nodo principale del piano di query è qualcosa di diverso, una scansione sequenziale (come XN Limit, XN Sort, XN HashAggregate e così via) CTAS fa del suo meglio per scegliere lo stile di distribuzione e la chiave di ordinamento ottimali in base al piano di query.

Ad esempio, supponiamo di creare cinque tabelle utilizzando i seguenti tipi di clausole: SELECT

  • Una semplice istruzione select

  • Una clausola limit

  • Un ordine per clausola che utilizza LISTID

  • Un ordine per clausola utilizzando QTYSOLD

  • Una funzione SUM aggregata con una clausola group by.

Gli esempi seguenti mostrano il piano di interrogazione per ogni CTAS istruzione.

explain create table sales1_simple as select listid, dateid, qtysold from sales; QUERY PLAN ---------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (1 row) explain create table sales2_limit as select listid, dateid, qtysold from sales limit 100; QUERY PLAN ---------------------------------------------------------------------- XN Limit (cost=0.00..1.00 rows=100 width=8) -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (2 rows) explain create table sales3_orderbylistid as select listid, dateid, qtysold from sales order by listid; QUERY PLAN ------------------------------------------------------------------------ XN Sort (cost=1000000016724.67..1000000017155.81 rows=172456 width=8) Sort Key: listid -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (3 rows) explain create table sales4_orderbyqty as select listid, dateid, qtysold from sales order by qtysold; QUERY PLAN ------------------------------------------------------------------------ XN Sort (cost=1000000016724.67..1000000017155.81 rows=172456 width=8) Sort Key: qtysold -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (3 rows) explain create table sales5_groupby as select listid, dateid, sum(qtysold) from sales group by listid, dateid; QUERY PLAN ---------------------------------------------------------------------- XN HashAggregate (cost=3017.98..3226.75 rows=83509 width=8) -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (2 rows)

Per visualizzare la chiave di distribuzione e la chiave di ordinamento per ogni tabella, interrogate la tabella del catalogo di DEF sistema TABLE PG_ _, come illustrato di seguito.

select * from pg_table_def where tablename like 'sales%'; tablename | column | distkey | sortkey ----------------------+------------+---------+--------- sales | salesid | f | 0 sales | listid | t | 0 sales | sellerid | f | 0 sales | buyerid | f | 0 sales | eventid | f | 0 sales | dateid | f | 1 sales | qtysold | f | 0 sales | pricepaid | f | 0 sales | commission | f | 0 sales | saletime | f | 0 sales1_simple | listid | t | 0 sales1_simple | dateid | f | 1 sales1_simple | qtysold | f | 0 sales2_limit | listid | f | 0 sales2_limit | dateid | f | 0 sales2_limit | qtysold | f | 0 sales3_orderbylistid | listid | t | 1 sales3_orderbylistid | dateid | f | 0 sales3_orderbylistid | qtysold | f | 0 sales4_orderbyqty | listid | t | 0 sales4_orderbyqty | dateid | f | 0 sales4_orderbyqty | qtysold | f | 1 sales5_groupby | listid | f | 0 sales5_groupby | dateid | f | 0 sales5_groupby | sum | f | 0

La tabella seguente riepiloga i risultati. Per semplicità, vengono omessi i dettagli relativi a costi, righe e larghezza dal piano explain.

Tabella

CTASSELECTdichiarazione

Nodo superiore del piano explain

Chiave distribuzione

Chiave di ordinamento

S1_ SIMPLE

select listid, dateid, qtysold from sales

XN Seq Scan on sales ...

LISTID DATEID
S2_ LIMIT

select listid, dateid, qtysold from sales limit 100

XN Limit ...

Nessuna () EVEN Nessuno
S3_ _DI_ ORDER LISTID

select listid, dateid, qtysold from sales order by listid

XN Sort ...

Sort Key: listid

LISTID LISTID
S4_ ORDER _DI_ QTY

select listid, dateid, qtysold from sales order by qtysold

XN Sort ...

Sort Key: qtysold

LISTID QTYSOLD
S5_ GROUP _DI

select listid, dateid, sum(qtysold) from sales group by listid, dateid

XN HashAggregate ...

Nessuno () EVEN Nessuno

È possibile specificare esplicitamente lo stile di distribuzione e la chiave di ordinamento nell'CTASistruzione. Ad esempio, l'istruzione seguente crea una tabella utilizzando la EVEN distribuzione e la specifica SALESID come chiave di ordinamento.

create table sales_disteven diststyle even sortkey (salesid) as select eventid, venueid, dateid, eventname from event;

Codifica di compressione

ENCODEAUTOviene utilizzato come impostazione predefinita per le tabelle. Amazon Redshift gestisce automaticamente la codifica di compressione per tutte le colonne della tabella.

Distribuzione dei dati in arrivo

Quando lo schema di distribuzione dell'hash dei dati in arrivo corrisponde a quello della tabella di destinazione, non è necessaria alcuna distribuzione fisica dei dati quando i dati vengono caricati. Ad esempio, se una chiave di distribuzione è impostata per la nuova tabella e i dati vengono inseriti da un'altra tabella che viene distribuita sulla stessa colonna chiave, i dati vengono caricati in posizione, utilizzando gli stessi nodi e sezioni. Tuttavia, se la tabella di origine e quella di destinazione sono entrambe impostate sulla EVEN distribuzione, i dati vengono ridistribuiti nella tabella di destinazione.

Operazioni automatiche ANALYZE

Amazon Redshift analizza automaticamente le tabelle create con i comandi. CTAS Non è necessario eseguire il ANALYZE comando su queste tabelle quando vengono create per la prima volta. Se le modifichi, devi analizzarle come fai per le altre tabelle.