Notas de uso de CTAS - Amazon Redshift

Notas de uso de CTAS

Límites

Amazon Redshift aplica una cuota del número de tablas por clúster según el tipo de nodo.

La cantidad máxima de caracteres para el nombre de una tabla es 127.

La cantidad máxima de columnas que se pueden definir en una única tabla es 1 600.

Herencia de atributos de columna y tabla

Las tablas CREATE TABLE AS (CTAS) no heredan restricciones, columnas de identidad, valores de columna predeterminados ni la clave principal de la tabla de la cual fueron creadas.

No se pueden especificar codificaciones de compresión de las columnas para tablas CTAS. Amazon Redshift asigna de forma automática la codificación de compresión de la siguiente manera:

  • A las columnas que están definidas como claves de ordenación se les asigna una compresión RAW.

  • A las columnas que están definidas como tipos de datos BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY o GEOGRAPHY se les asigna una compresión RAW.

  • A las columnas que se definen como SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP o TIMESTAMPTZ se les asigna la compresión AZ64.

  • A las columnas que se definen como CHAR, VARCHAR o VARBYTE se les asigna la compresión LZO.

Para obtener más información, consulte Codificaciones de compresión y Tipos de datos.

Para asignar explícitamente codificaciones de la columna, utilice CREATE TABLE.

CTAS determina el estilo de distribución y la clave de ordenación para la nueva tabla en función del plan de consulta para la cláusula SELECT.

Para consultas completas, como consultas que incluyen combinaciones, agregaciones, una cláusula de ordenación o una cláusula de límite, CTAS realiza su mejor esfuerzo por seleccionar el estilo de distribución y la clave de ordenación óptimos en función del plan de consulta.

nota

Para conseguir un mejor rendimiento con conjuntos de datos grandes o consultas complejas, recomendamos probar los conjuntos de datos típicos.

A menudo, puede predecir la clave de distribución y la clave de ordenación que CTAS selecciona al examinar el plan de consulta y ver cuáles son las columnas, si hay, que el optimizador de consultas selecciona para ordenar y distribuir datos. Si el nodo superior del plan de consulta es un análisis secuencial simple de una tabla única (XN Seq Scan), por lo general CTAS usa el estilo de distribución y la clave de ordenación de la tabla de origen. Si el nodo superior del plan de consulta no es un análisis secuencial (como XN Limit, XN Sort, XN HashAggregate, etc.), CTAS realiza su mejor esfuerzo por seleccionar el estilo de distribución y la clave de ordenación óptimos en función del plan de consulta.

Por ejemplo, supongamos que crea cinco tablas con los siguientes tipos de cláusulas SELECT:

  • Una instrucción de selección simple

  • Una cláusula de límite

  • Una cláusula de ordenación con LISTID

  • Una cláusula de ordenación con QTYSOLD

  • Una función de agregación SUM con una cláusula de agrupación.

En los siguientes ejemplos se muestra el plan de consulta para cada instrucción CTAS.

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)

Para ver la clave de distribución y la clave de ordenación de cada tabla, consulte la tabla de catálogo del sistema PG_TABLE_DEF como se muestra a continuación.

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

En la siguiente tabla se resumen los resultados. Para simplificar, omitimos detalles de ancho, filas y costo del plan de explicación.

Tabla

Instrucción CTAS SELECT

Explicar nodo superior del plan

Clave de distribución

Clave de clasificación

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

Ninguno (EVEN) Ninguna
S3_ORDER_BY_LISTID

select listid, dateid, qtysold from sales order by listid

XN Sort ...

Sort Key: listid

LISTID LISTID
S4_ORDER_BY_QTY

select listid, dateid, qtysold from sales order by qtysold

XN Sort ...

Sort Key: qtysold

LISTID QTYSOLD
S5_GROUP_BY

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

XN HashAggregate ...

Ninguno (EVEN) Ninguna

Puede especificar explícitamente el estilo de distribución y la clave de ordenación en la instrucción de CTAS. Por ejemplo, la siguiente instrucción crea una tabla con la distribución EVEN y especifica SALESID como la clave de ordenación.

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

Codificación de compresión

ENCODE AUTO se usa como la opción predeterminada para las tablas. Amazon Redshift administra de forma automática la codificación de compresión para todas las columnas de la tabla.

Distribución de datos entrantes

Cuando el esquema de distribución hash de los datos entrantes coincide con el de la tabla de destino, no es necesaria la distribución física de datos cuando se cargan los datos. Por ejemplo, si se configura una clave de distribución para la nueva tabla y los datos se insertan desde otra tabla que está distribuida en la misma columna clave, los datos se cargan en el lugar a través de los mismos nodos y sectores. No obstante, si las tablas de origen y destino se configuran en distribución EVEN, los datos se redistribuyen en la tabla de destino.

Operaciones ANALYZE automáticas

Amazon Redshift analiza de forma automática las tablas que usted crea con los comandos CTAS. No necesita ejecutar el comando ANALYZE en estas tablas cuando se crean. Si las modifica, debe analizarlas de la misma manera en que analiza las demás tablas.