CTASnotes d'utilisation - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

CTASnotes d'utilisation

Limites

Amazon Redshift applique un quota correspondant au nombre de tables par cluster et par type de nœud.

Le nombre maximal de caractères pour un nom de table est 127.

Le nombre maximal de colonnes que vous pouvez définir dans une seule table est de 1 600.

Héritage des attributs de colonne et de table

CREATETABLELes tables AS (CTAS) n'héritent pas des contraintes, des colonnes d'identité, des valeurs de colonne par défaut ou de la clé primaire de la table à partir de laquelle elles ont été créées.

Vous ne pouvez pas spécifier les codages de compression des colonnes pour les CTAS tables. Amazon Redshift attribue automatiquement l’encodage de compression comme suit :

  • La RAW compression est affectée aux colonnes définies comme clés de tri.

  • La RAW compression est affectée aux colonnes définies comme BOOLEAN REAL DOUBLEPRECISION,GEOMETRY,, ou comme type de GEOGRAPHY données.

  • Colonnes définies commeSMALLINT,,,INTEGER,BIGINT,DECIMAL,DATE,TIME, TIMETZTIMESTAMP, ou TIMESTAMPTZ auxquelles une AZ64 compression est affectée.

  • Colonnes définies comme CHARVARCHAR, ou VARBYTE auxquelles une LZO compression est affectée.

Pour plus d’informations, consultez encodages de compression et Types de données.

Pour attribuer explicitement des encodages de colonne, utilisez CREATE TABLE.

CTASdétermine le style de distribution et la clé de tri pour la nouvelle table en fonction du plan de requête pour la SELECT clause.

Pour les requêtes complexes, telles que les requêtes qui incluent des jointures, des agrégations, une clause d'ordre par ou une clause de limite, faites CTAS de votre mieux pour choisir le style de distribution et la clé de tri optimaux en fonction du plan de requête.

Note

Pour de meilleures performances avec de grands ensembles de données ou des requêtes complexes, nous vous recommandons d’effectuer des tests à l’aide d’ensembles de données classiques.

Vous pouvez souvent prévoir la clé de distribution et la clé de tri CTAS choisies en examinant le plan de requête pour voir quelles colonnes, le cas échéant, l'optimiseur de requêtes choisit pour trier et distribuer les données. Si le nœud supérieur du plan de requête est un simple scan séquentiel à partir d'une seule table (XN Seq Scan), il utilise CTAS généralement le style de distribution et la clé de tri de la table source. Si le nœud supérieur du plan de requête est autre chose, un scan séquentiel (tel que XN Limit, XN Sort, XN HashAggregate, etc.) CTAS fait de son mieux pour choisir le style de distribution et la clé de tri optimaux en fonction du plan de requête.

Supposons, par exemple, que vous créiez cinq tables à l'aide des types de SELECT clauses suivants :

  • Une instruction select simple

  • Une clause limit

  • Un ordre par clause utilisant LISTID

  • Un ordre par clause utilisant QTYSOLD

  • Fonction d'SUMagrégation avec une clause group by.

Les exemples suivants montrent le plan de requête pour chaque CTAS instruction.

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)

Pour afficher la clé de distribution et la clé de tri pour chaque table, interrogez la table du catalogue DEF du système TABLE PG_ _, comme indiqué ci-dessous.

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

Le tableau suivant résume les résultats. Pour simplifier, nous choisissons d’ignorer les détails des coûts, des lignes et de la largeur du plan d’explication.

Tableau

CTASSELECTdéclaration

Nœud supérieur du plan d’explication

Clé de distribution

Clé de tri

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

Aucune (EVEN) Aucun
S3_ _PAR_ ORDER LISTID

select listid, dateid, qtysold from sales order by listid

XN Sort ...

Sort Key: listid

LISTID LISTID
S4_ _PAR_ ORDER QTY

select listid, dateid, qtysold from sales order by qtysold

XN Sort ...

Sort Key: qtysold

LISTID QTYSOLD
S5_ _PAR GROUP

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

XN HashAggregate ...

Aucune (EVEN) Aucun

Vous pouvez spécifier explicitement le style de distribution et la clé de tri dans l'CTASinstruction. Par exemple, l'instruction suivante crée une table à l'aide de EVEN la distribution et la spécifie SALESID comme clé de tri.

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

Encodage de compression

ENCODEAUTOest utilisé par défaut pour les tables. Amazon Redshift gère automatiquement l’encodage de compression pour toutes les colonnes de la table.

Distribution des données entrantes

Lorsque le schéma de distribution de hachage des données entrantes correspond à celui de la table cible, aucune distribution physique des données n’est réellement nécessaire lors du chargement des données. Par exemple, si une clé de distribution est définie pour la nouvelle table et que les données sont insérées à partir d’une autre table qui est distribuée sur la même colonne de clé, les données sont chargées en place, à l’aide des mêmes nœuds et tranches. Toutefois, si les tables source et cible sont toutes deux définies pour EVEN la distribution, les données sont redistribuées dans la table cible.

ANALYZEOpérations automatiques

Amazon Redshift analyse automatiquement les tables que vous créez à l'aide CTAS de commandes. Il n'est pas nécessaire d'exécuter la ANALYZE commande sur ces tables lors de leur création initiale. Si vous les modifiez, vous devez les analyser de la même manière que les autres tables.