Notas de uso - Amazon Redshift

Notas de uso

Este tema contiene notas de uso para CREATE EXTERNAL TABLE. No puede ver los detalles de las tablas de Amazon Redshift Spectrum con los mismos recursos que utiliza para las tablas de Amazon Redshift estándar, como PG_TABLE_DEF, STV_TBL_PERM, PG_CLASS o information_schema. Si su herramienta de análisis o inteligencia empresarial no reconoce las tablas externas de Redshift Spectrum, configure la aplicación para consultar SVV_EXTERNAL_TABLES y SVV_EXTERNAL_COLUMNS.

CREATE EXTERNAL TABLE AS

En algunos casos, puede ejecutar el comando CREATE EXTERNAL TABLE AS en un catálogo de datos de AWS Glue, un catálogo externo de AWS Lake Formation o un metastore de Apache Hive. En tales casos, se utiliza un rol de AWS Identity and Access Management (IAM) para crear el esquema externo. Este rol de IAM debe tener permisos de lectura y escritura en Amazon S3.

Si utiliza un catálogo de Lake Formation, el rol de IAM debe tener permiso para crear tablas en el catálogo. En este caso, también debe tener el permiso de ubicación del lago de datos en la ruta de destino de Amazon S3. Este rol de IAM se convierte en el propietario de la nueva tabla AWS Lake Formation.

Para asegurarse de que los nombres de los archivos son únicos, Amazon Redshift utiliza el siguiente formato para el nombre de cada archivo cargado en Amazon S3 de manera predeterminada.

<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>.

Un ejemplo es 20200303_004509_810669_1007_0001_part_00.parquet.

Tenga en cuenta lo siguiente al ejecutar el comando CREATE EXTERNAL TABLE AS:

  • La ubicación de Amazon S3 debe estar vacía.

  • Amazon Redshift solo admite los formatos PARQUET y TEXTFILE cuando se utiliza la cláusula STORED AS.

  • No es necesario definir una lista de definición de columna. Los nombres de columna y los tipos de datos de columna de la nueva tabla externa se obtienen directamente de la consulta SELECT.

  • No es necesario definir el tipo de datos de la columna de partición en la cláusula PARTITIONED BY. Si especifica una clave de partición, el nombre de esta columna debe existir en el resultado de la consulta SELECT. Cuando tiene varias columnas de partición, no importa el orden en la consulta SELECT. Amazon Redshift utiliza el orden definido en la cláusula PARTITIONED BY para crear la tabla externa.

  • Amazon Redshift particiona de forma automática los archivos de salida en carpetas de partición en función de los valores de la clave de partición. De manera predeterminada, Amazon Redshift quita las columnas de partición de los archivos de salida.

  • No se admite la cláusula LINES TERMINATED BY 'delimitador'.

  • No se admite la cláusula ROW FORMAT SERDE 'serde_name'.

  • No se admite el uso de archivos de manifiesto. Por lo tanto, no se puede definir la cláusula LOCATION en un archivo de manifiesto en Amazon S3.

  • Amazon Redshift actualiza de forma automática la propiedad de la tabla 'numRows' al final del comando.

  • La propiedad de tabla 'compression_type' sólo acepta 'none' o 'snappy' para el formato de archivo PARQUET.

  • Amazon Redshift no admite la cláusula LIMIT en la consulta SELECT externa. En su lugar, puede utilizar una cláusula LIMIT anidada.

  • Puede utilizar STL_UNLOAD_LOG para realizar un seguimiento de los archivos que cada operación CREATE EXTERNAL TABLE AS escribe en Amazon S3.

Permisos necesarios para crear y consultar tablas externas

Para crear tablas externas, asegúrese de que es el propietario del esquema externo o un superusuario. Para transferir la propiedad de un esquema externo, utilice ALTER SCHEMA. En el siguiente ejemplo, se modifica el propietario del esquema spectrum_schema a newowner.

alter schema spectrum_schema owner to newowner;

Para ejecutar una consulta de Redshift Spectrum, necesita los siguientes permisos:

  • Permiso de uso para el esquema

  • Permiso para crear tablas temporales en la base de datos actual

En el siguiente ejemplo, se concede permiso de uso para el esquema spectrum_schema al grupo de usuarios spectrumusers.

grant usage on schema spectrum_schema to group spectrumusers;

En el siguiente ejemplo, se concede un permiso temporal para la base de datos spectrumdb al grupo de usuarios spectrumusers.

grant temp on database spectrumdb to group spectrumusers;

Pseudocolumnas

De manera predeterminada, Amazon Redshift crea tablas externas con las pseudocolumnas $path y $size. Seleccione estas columnas para ver la ruta a los archivos de datos en Amazon S3 y el tamaño de los archivos de datos de cada fila devuelta por una consulta. Los nombres de las columnas $path y $size deben estar delimitados con comillas dobles. Las cláusulas SELECT * no devuelven las pseudocolumnas. Debe incluir explícitamente los nombres de columna $path y $size en la consulta, tal y como se muestra en el siguiente ejemplo.

select "$path", "$size" from spectrum.sales_part where saledate = '2008-12-01';

Puede deshabilitar la creación de pseudocolumnas en una sesión estableciendo el parámetro de configuración spectrum_enable_pseudo_columns en false.

importante

La selección de $size o $path genera cargos, ya que Redshift Spectrum analiza los archivos de datos en Amazon S3 para determinar el tamaño del conjunto de resultados. Para obtener más información, consulte Precios de Amazon Redshift.

Configuración de opciones de control de datos

Puede establecer parámetros de tabla para especificar el control de entrada de los datos que se consultan en tablas externas, incluidos los siguientes:

  • Caracteres sobrantes en columnas que contengan datos de VARCHAR, CHAR y cadenas. Para obtener más información, consulte la propiedad de tabla externa surplus_char_handling.

  • Caracteres no válidos en columnas que contengan datos de VARCHAR, CHAR y cadenas. Para obtener más información, consulte la propiedad de tabla externa invalid_char_handling.

  • Carácter de reemplazo que se utilizará al especificar REPLACE para la propiedad de tabla externa invalid_char_handling.

  • Control de desbordamiento de conversión en columnas que contengan datos enteros y decimales. Para obtener más información, consulte la propiedad de tabla externa numeric_overflow_handling.

  • Surplus_bytes_handling para especificar la gestión de entrada de los bytes sobrantes en las columnas que contienen datos varbyte. Para obtener más información, consulte la propiedad de tabla externa surplus_bytes_handling.