Observações de uso CTAS - Amazon Redshift

Observações de uso CTAS

Limites

O Amazon Redshift impõe uma cota do número de tabelas por cluster por tipo de nó.

O número máximo de caracteres para um nome de tabela é 127.

O número máximo de colunas que você pode definir em uma única tabela é 1.600.

Herança de atributos de coluna e tabela

Tabelas CREATE TABLE AS (CTAS) não herdam restrições, colunas de identidade, valores de coluna padrão ou a chave primária da tabela com base na qual foram criadas.

Você não pode especificar codificações de compactação de coluna para tabelas CTAS. O Amazon Redshift atribui automaticamente a codificação de compactação da seguinte maneira:

  • Colunas que são definidas como chaves de classificação são designadas a compactação RAW.

  • Colunas que são definidas como tipos de dados BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY ou GEOGRAPHY recebem a compactação RAW.

  • As colunas definidas como SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ recebem a compactação AZ64.

  • As colunas definidas como CHAR, VARCHAR ou VARBYTE recebem a compactação LZO.

Para ter mais informações, consulte Codificações de compactação e Tipos de dados.

Para atribuir explicitamente codificações de coluna, use CRIAR TABELA.

O CTAS determina o estilo de distribuição e a chave de classificação para a nova tabela com base no plano de consulta para a cláusula SELECT.

Para consultas complexas, como consultas incluindo junções, agregações, classificação por cláusula ou uma cláusula de limite, o CTAS se esforça para escolher o melhor estilo de distribuição e chave de classificação com base no plano de consulta.

nota

Para uma melhor performance com grandes conjuntos de dados ou consultas complexas, recomendamos testar usando conjuntos de dados típicos.

Muitas vezes você pode prever qual chave de distribuição e chave de classificação o CTAS escolhe examinando o plano de consulta para ver quais colunas, se houver, o otimizador de consulta escolherá para classificação e distribuição de dados. Se o nó superior do plano de consulta for uma varredura sequencial simples de uma tabela única (XN Seq Scan), o CTAS usará o estilo de distribuição e a chave de classificação da tabela de origem. Se o nó superior do plano de consulta for qualquer outra varredura sequencial (como XN Limit, XN Sort, XN HashAggregate, etc.), o CTAS se esforça para escolher o melhor estilo de distribuição e chave de classificação com base no plano de consulta.

Por exemplo, suponhamos que você crie cinco tabelas usando os seguintes tipos de cláusulas SELECT:

  • Um instrução simples de seleção

  • Uma cláusula de limitação

  • Um classificação por cláusula usando LISTID

  • Um classificação por cláusula usando QTYSOLD

  • Uma função agregada SUM com um agrupamento por cláusula.

Os exemplos a seguir mostram o plano de consulta para cada comando 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 exibir a chave de distribuição e a chave de classificação para cada tabela, consulte a tabela de catálogo de sistema PG_TABLE_DEF, como mostrado a seguir.

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

A tabela a seguir resume os resultados. Para simplificar, omitimos os custos, as linhas e os detalhes de largura do plano de explicação.

Tabela

Instrução CTAS SELECT

Nó superior do plano de explicação

Chave de distribuição

Chave de classificação

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

None (EVEN) Nenhum
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 ...

None (EVEN) Nenhum

Você pode especificar explicitamente o estilo de distribuição e a chave de classificação da instrução CTAS. Por exemplo, a instrução a seguir cria uma tabela usando a distribuição EVEN e especifica SALESID como a chave de classificação.

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

Codificação de compactação

ENCODE AUTO é usado como o padrão para tabelas. O Amazon Redshift gerencia automaticamente a codificação de compactação para todas as colunas da tabela.

Distribuição de dados de entrada

Quando o esquema de distribuição de hash de dados de entrada corresponder aos dados da tabela de destino, nenhuma distribuição física de dados é realmente necessária quando os dados são carregados. Por exemplo, se uma chave de distribuição for definida para a nova tabela e os dados estiverem sendo introduzidos a partir de outra tabela que é distribuída na mesma coluna chave, os dados serão carregados no local, usando os mesmos nós e fatias. No entanto, se as tabelas de origem e de destino forem definidas com a distribuição EVEN, os dados serão redistribuídos em uma tabela de destino.

Operações ANALYZE automáticas

O Amazon Redshift analisa automaticamente tabelas criadas com comandos CTAS. Não precisar executar o comando ANALYZE nessas tabelas quando elas são inicialmente criadas. Se você as modificar, você deve analisá-las da mesma forma que outras tabelas.