¿Por qué Amazon Redshift ejecuta el proceso COPY ANALYZE cuando STATUPDATE está desactivado?

3 minutos de lectura
0

He Intentado usar el comando COPY para cargar datos en una tabla nueva en Amazon Redshift. Incluso he agregado el parámetro COMPUPDATE OFF. ¿Por qué sigue ejecutándose COPY ANALYZE?

Breve descripción

Antes de crear una tabla en Amazon Redshift, seleccione el estilo de distribución de la tabla. Si no se especifica ningún estilo de distribución para una tabla, se aplicará el valor predeterminado, que es la distribución AUTO. A continuación, la característica de distribución AUTO de Amazon Redshift utiliza el proceso COPY ANALYZE para determinar si la tabla debe utilizar la distribución ALL o EVEN.

**Nota:**El parámetro COMPUPDATE OFF sigue ejecutando COPY ANALYZE en tablas con un estilo de distribución AUTO. El parámetro STATUPDATE OFF no deshabilita ni contiene el comando COPY ANALYZE.

Solución

1.    Compruebe el estilo de distribución actual de una tabla mediante la ejecución de SHOW TABLE:

SHOW TABLE [schema_name.]table_name

Nota: De forma predeterminada, Amazon Redshift aplica la distribución AUTO si no se especifica un estilo de distribución en la instrucción CREATE TABLE.

2.    Si la distribución AUTO está activada, cree una tabla con un estilo de distribución definido. La especificación de un estilo de distribución impide que COPY ANALYZE se ejecute.

En el siguiente ejemplo se especifica un estilo de distribución EVEN:

create table rs_example_test (id int)diststyle even;

Para obtener más información sobre los estilos de distribución, consulte Uso de estilos de distribución de datos.

3.    Utilice el comando COPY para cargar los datos en la tabla y, a continuación, añádalos con los parámetros STATUPDATE OFF.

Nota: Se recomienda utilizar el comando COPY para cargar grandes cantidades de datos, en lugar de utilizar instrucciones INSERT individuales. Esto minimiza el riesgo de problemas de rendimiento.

4.    Ejecute una consulta en la tabla del sistema SVL_STATEMENTTEXT y, a continuación, filtre por el ID de proceso (PID) relacionado con la sesión:

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;

La sintaxis anterior comprueba si COPY ANALYZE se ha ejecutado como parte de la transacción COPY.

El resultado podría tener un aspecto similar al siguiente:

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

Esto confirma que COPY ANALYZE ya no se ejecuta como parte de la transacción COPY.


Información relacionada

Utilización de una tabla provisional para realizar una fusión (upsert)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año