Tentei usar o comando COPY para carregar dados em uma nova tabela no Amazon Redshift. Até mesmo adicionei o parâmetro COMPUPDATE OFF. Por que COPY ANALYZE ainda está em execução?
Breve descrição
Antes de criar uma tabela no Amazon Redshift, selecione o estilo de distribuição dessa tabela. Se uma tabela não especificar um estilo de distribuição, ela assumirá como padrão a distribuição AUTO. Em seguida, o recurso de distribuição AUTO do Amazon Redshift usa o processo COPY ANALYZE para determinar se a tabela deve usar a distribuição EVEN ou ALL.
Observação: o parâmetro COMPUPDATE OFF ainda executa COPY ANALYZE em tabelas usando um estilo de distribuição AUTO. O parâmetro STATUPDATE OFF não desativa nem reprime o comando COPY ANALYZE.
Resolução
1. Verifique o estilo de distribuição atual de uma tabela executando SHOW TABLE:
SHOW TABLE [schema_name.]table_name
Observação: por padrão, o Amazon Redshift aplica a distribuição AUTO se um estilo de distribuição não é especificado na instrução CREATE TABLE.
2. Se a distribuição AUTO estiver ativada, crie uma tabela com um estilo de distribuição definido. A especificação de um estilo de distribuição impede a execução de COPY ANALYZE.
O exemplo a seguir especifica um estilo de distribuição EVEN:
create table rs_example_test (id int)diststyle even;
Para mais informações sobre estilos de distribuição, consulte Trabalhar com estilos de distribuição de dados.
3. Use o comando COPY para carregar os dados em sua tabela e, em seguida, anexá-los aos parâmetros STATUPDATE OFF.
Observação: a prática recomendada é usar o comando COPY para carregar grandes quantidades de dados, em vez de usar instruções INSERT individuais. Isso minimiza o risco de problemas de performance.
4. Execute uma consulta na tabela do sistema SVL_STATEMENTTEXT, e, em seguida, filtre pelo ID (PID) do processo relacionado a sua sessão:
select userid, xid, pid, trim(label) as label, starttime, endtime, sequence, trim(type) as type, left(text,60) text from svl_statementtext where pid = 26815 order by xid, starttime, sequence;
A sintaxe acima verifica se COPY ANALYZE foi executado como parte da transação COPY.
A saída será semelhante ao seguinte:
userid xid pid label starttime endtime sequence type text
100 78915 26815 default 2019-03-19 14:06:19 2019-03-19 14:06:21 0 QUERY copy rs_test3 from 's3://xxxxx-rs-log/AWSLogs/rs_test2.csv'\
100 78915 26815 default 2019-03-19 14:06:21 2019-03-19 14:06:21 0 UTILITY COMMIT
Isso confirma que COPY ANALYZE não é mais executado como parte da transação COPY.
Informações relacionadas
Use uma tabela de preparação para executar uma mesclagem (upsert)