Parámetros de conversión de datos - Amazon Redshift

Parámetros de conversión de datos

A medida que carga la tabla, COPY intenta convertir de forma implícita las cadenas de los datos de origen al tipo de datos de la columna de destino. Si necesita especificar una conversión que sea diferente a la del comportamiento predeterminado, o si la conversión predeterminada da lugar a errores, puede administrar las conversiones de datos especificando los siguientes parámetros. Para obtener más información sobre la sintaxis de estos parámetros, consulte Sintaxis de COPY.

Parámetros de conversión de datos
ACCEPTANYDATE

Permite que se cargue cualquier formato de fecha, incluidos los formatos no válidos como 00/00/00 00:00:00, sin generar un error. Este parámetro aplica solo para las columnas TIMESTAMP y DATE. Siempre utilice ACCEPTANYDATE con el parámetro DATEFORMAT. Si el formato de fecha de los datos no coincide con la especificación DATEFORMAT, Amazon Redshift inserta un valor NULL en ese campo.

ACCEPTINVCHARS [AS] ['replacement_char']

Permite cargar datos en las columnas VARCHAR, aunque los datos contengan caracteres UTF-8 no válidos. Cuando se especifica ACCEPTINVCHARS, COPY sustituye todos los caracteres UTF-8 no válidos por una cadena de la misma longitud que se compone del carácter especificado en replacement_char (carácter_de_sustitución). Por ejemplo, si el carácter de sustitución es "^", un carácter de tres bytes no válido será sustituido por "^^^".

El carácter de sustitución puede ser cualquier carácter ASCII, excepto NULL. El carácter predeterminado es un signo de interrogación (?). Para obtener más información acerca de los caracteres UTF-8 no válidos, consulte Errores de carga de caracteres multibyte.

COPY devuelve el número de filas que contienen caracteres UTF-8 no válidos y agrega una entrada a la tabla de sistema STL_REPLACEMENTS por cada fila afectada, hasta un máximo de 100 filas por cada sector del nodo. También se sustituyen otros caracteres UTF-8 no válidos, pero esos eventos de sustitución no se registran.

Si no se especifica ACCEPTINVCHARS, COPY devuelve un error siempre que encuentra un carácter UTF-8 no válido.

ACCEPTINVCHARS es válido solo para las columnas VARCHAR.

BLANKSASNULL

Carga los campos en blanco, que estén compuestos solo por caracteres de espacios en blanco, como NULL. Esta opción aplica solo para las columnas CHAR y VARCHAR. Los campos en blanco para otros tipos de datos, como INT, siempre se cargan con NULL. Por ejemplo, una cadena que contiene tres caracteres de espacio de forma sucesiva (y ningún otro carácter) se carga como NULL. El comportamiento predeterminado, sin esta opción, es cargar los caracteres de espacio como están.

DATEFORMAT [AS] {'dateformat_string' | 'auto' }

Si no se especifica DATEFORMAT, el formato predeterminado es 'YYYY-MM-DD'. Por ejemplo, una alternativa de formato válida sería 'MM-DD-YYYY'.

Si el comando COPY no reconoce el formato de los valores de fecha u hora, o si los valores de fecha u hora usan formatos diferentes, utilice el argumento 'auto' con el parámetro DATEFORMAT o TIMEFORMAT. El argumento 'auto' reconoce varios formatos que no se admiten cuando se utiliza una cadena DATEFORMAT y TIMEFORMAT. La palabra clave 'auto' distingue entre mayúsculas y minúsculas. Para obtener más información, consulte Utilización del reconocimiento automático con DATEFORMAT y TIMEFORMAT.

El formato de fecha puede incluir información de hora (hora, minutos, segundos), pero esta información se ignora. La palabra clave AS es opcional. Para obtener más información, consulte Cadenas TIMEFORMAT y DATEFORMAT.

EMPTYASNULL

Indica que Amazon Redshift debe cargar los campos CHAR y VARCHAR vacíos como NULL. Los campos vacíos para otros tipos de datos, como INT, siempre se cargan con NULL. Los campos vacíos se producen cuando los datos contienen dos delimitadores de forma sucesiva sin caracteres entre los delimitadores. EMPTYASNULL y NULL AS '' (cadena vacía) producen el mismo comportamiento.

ENCODING [AS] file_encoding

Especifica el tipo de codificación de los datos de carga. El comando COPY convierte los datos de la codificación especificada a UTF-8 durante la carga.

Los valores válidos de file_encoding son los siguientes:

  • UTF8

  • UTF16

  • UTF16LE

  • UTF16BE

El valor predeterminado es UTF8.

Los nombres de archivo de origen deben utilizar la codificación UTF-8.

Los siguientes archivos deben utilizar la codificación UTF-8, aunque se especifique una codificación diferente para los datos de carga:

  • Archivos de manifiesto

  • Archivos JSONPaths

La cadena de argumentos proporcionada con los siguientes parámetros debe utilizar UTF-8:

  • FIXEDWIDTH 'fixedwidth_spec'

  • ACCEPTINVCHARS 'replacement_char'

  • DATEFORMAT 'dateformat_string'

  • TIMEFORMAT 'timeformat_string'

  • NULL AS 'null_string'

Los archivos de datos de ancho fijo deben utilizar la codificación UTF-8. Los anchos de campo se basan en la cantidad de caracteres, no en el número de bytes.

Todos los datos de carga deben utilizar la codificación especificada. Si COPY encuentra una codificación diferente, omite el archivo y devuelve un error.

Si especifica UTF16, los datos deben tener una marca de orden de bytes (BOM). Si sabe si los datos UTF-16 tienen el formato little-endian (LE) o big-endian (BE), puede utilizar UTF16LE o UTF16BE, independientemente de la presencia de una BOM.

ESCAPE

Cuando se especifica este parámetro, el carácter de barra oblicua inversa (\) en los datos de entrada se trata como un carácter de escape. El carácter que sigue inmediatamente al carácter de barra oblicua inversa se carga en la tabla como parte del valor actual de la columna, aunque sea un carácter que por lo general tiene un propósito especial. Por ejemplo, puede utilizar este parámetro para aplicar escape al carácter delimitador, a una comilla, a un carácter de línea nueva incrustado o al carácter de escape en sí cuando cualquiera de estos caracteres es una parte legítima del valor de una columna.

Si especifica el parámetro ESCAPE en combinación con el parámetro REMOVEQUOTES, puede aplicar escape y conservar las comillas (' o ") que, de otro modo, se podrían eliminar. La cadena nula predeterminada, \N, funciona como está, pero también se le puede aplicar escape en los datos de entrada como \\N. Mientras no especifique una cadena nula alternativa con el parámetro NULL AS, \N y \\N producirán los mismos resultados.

nota

Al carácter de control 0x00 (NUL) no se le puede aplicar escape y se debe eliminar de los datos de entrada o se debe convertir. Este carácter se trata como un marcador de fin de registro (EOR), lo que provoca que el resto del registro se trunque.

No se puede utilizar el parámetro ESCAPE para las cargas FIXEDWIDTH y no se puede especificar el carácter de escape en sí. El carácter de escape es siempre la barra inversa. También, debe asegurarse de que los datos de entrada contengan el carácter de escape en los lugares adecuados.

Estos son algunos ejemplos de los datos de entrada y los datos cargados que se obtienen cuando se especifica el parámetro ESCAPE. El resultado de la fila 4 supone que también se especifica el parámetro REMOVEQUOTES. Los datos de entrada se componen por dos campos delimitados por barras verticales:

1|The quick brown fox\[newline] jumped over the lazy dog. 2| A\\B\\C 3| A \| B \| C 4| 'A Midsummer Night\'s Dream'

Los datos cargados en la columna 2 tendrán este aspecto:

The quick brown fox jumped over the lazy dog. A\B\C A|B|C A Midsummer Night's Dream
nota

La aplicación del carácter de escape a los datos de entrada para una carga es responsabilidad del usuario. Existe una excepción a este requisito cuando vuelve a cargar datos que se descargaron anteriormente con el parámetro ESCAPE. En este caso, los datos ya contendrán los caracteres de escape necesarios.

El parámetro ESCAPE no interpreta los códigos octal, hexadecimal, Unicode ni otras notaciones de secuencias de escape. Por ejemplo, si los datos de origen contienen el valor de salto de línea octal (\012) e intenta cargar estos datos con el parámetro ESCAPE, Amazon Redshift cargará el valor 012 en la tabla y no interpretará este valor como un salto de línea al que se le está aplicando escape.

Para poder aplicar escape a los caracteres de línea nueva en datos que se originan en plataformas de Microsoft Windows, es posible que necesite utilizar dos caracteres de escape: uno para el retorno de carro y otro para el salto de línea. También puede eliminar los retornos de carro antes de cargar el archivo (por ejemplo, mediante la utilidad dos2unix).

EXPLICIT_IDS

Utilice EXPLICIT_IDS con tablas que tengan columnas IDENTITY si desea sustituir los valores autogenerados con valores explícitos de los archivos de datos de origen para las tablas. Si el comando incluye una lista de columnas, esa lista debe incluir las columnas IDENTITY para utilizar este parámetro. El formato de datos para los valores EXPLICIT_IDS debe coincidir con el formato de IDENTITY especificado por la definición CREATE TABLE.

Cuando ejecute un comando COPY en una tabla con la opción EXPLICIT_IDS, Amazon Redshift no comprueba la singularidad de las columnas IDENTITY de la tabla.

Si una columna se define con GENERATED BY DEFAULT AS IDENTITY, se puede copiar. Los valores se generan o se actualizan con los que se proporcionan. La opción EXPLICIT_IDS no es obligatoria. COPY no actualiza el límite máximo de la identidad.

Para ver un ejemplo de un comando COPY que utiliza EXPLICIT_IDS, consulte Carga de VENUE con valores explícitos para una columna IDENTITY.

FILLRECORD

Permite que se carguen los archivos de datos cuando faltan columnas contiguas al final de alguno de los registros. Las columnas que faltan se cargan como NULL. Para los formatos de texto y CSV, si la columna que falta es una columna VARCHAR, se cargan cadenas de longitud cero en lugar de NULL. Para cargar columnas NULL en columnas VARCHAR mediante texto y CSV, especifique la palabra clave EMPTYASNULL. La sustitución por NULL solo funciona si la definición de la columna permite NULL.

Por ejemplo, si la definición de la tabla contiene cuatro columnas CHAR con valores nulos y un registro contiene los valores apple, orange, banana, mango, el comando COPY podría cargar y completar un registro que solo contenga los valores apple, orange. Los valores CHAR faltantes se cargarían como valores NULL.

IGNOREBLANKLINES

Ignora las líneas en blanco que solo contienen un salto de línea en un archivo de datos y no prueba cargarlos.

IGNOREHEADER [ AS ] number_rows

Trata los valores number_rows (número_de_filas) especificados como un encabezado de archivo y no los carga. Utilice IGNOREHEADER para omitir encabezados de archivos de todos los archivos en una carga paralela.

NULL AS 'null_string'

Carga los campos en los que el valor de null_string es NULL, donde null_string puede ser cualquier cadena. Si los datos incluyen un carácter nulo, también denominado NUL (UTF-8 0000) o cero binario (0x000), COPY lo trata como cualquier otro carácter. Por ejemplo, un registro que contiene '1' || NUL || '2' se copia como cadena de 3 bytes de longitud. Si un campo solo contiene NUL, puede utilizar NULL AS para reemplazar el carácter nulo con NULL mediante la especificación de '\0' o '\000'; por ejemplo, NULL AS '\0' o NULL AS '\000'. Si un campo contiene una cadena que termina con NUL y se especifica NULL AS, la cadena se inserta con NUL al final. No utilice '\n' (línea nueva) para el valor de null_string. Amazon Redshift reserva '\n' para utilizarlo como delimitador de línea. El valor de null_string predeterminado es '\N'.

nota

Si intenta cargar valores nulos en una columna definida como NOT NULL, el comando COPY producirá un error.

REMOVEQUOTES

Elimina las comillas circundantes de las cadenas en los datos entrantes. Todos los caracteres dentro de las comillas, incluidos los delimitadores, se conservan. Si una cadena tiene una comilla de apertura simple o doble pero no su signo de cierre correspondiente, el comando COPY no puede cargar esa fila y devuelve un error. En la siguiente tabla, se muestran algunos ejemplos simples de cadenas que contienen comillas y los valores cargados que se obtienen.

Cadena de entrada Valor cargado con la opción REMOVEQUOTES
"The delimiter is a pipe (|) character" The delimiter is a pipe (|) character
'Black' Black
"White" White
Blue' Blue'
Blue' Value not loaded: error condition (Valor no cargado: condición de error)
"Blue Value not loaded: error condition (Valor no cargado: condición de error)
' ' 'Black' ' ' ' 'Black' '
' ' <white space>
ROUNDEC

Redondea hacia arriba los valores numéricos cuando la escala del valor de entrada es mayor que la escala de la columna. De manera predeterminada, COPY trunca los valores cuando sea necesario ajustar la escala de la columna. Por ejemplo, si un valor de 20.259 se carga en una columna DECIMAL(8,2), COPY trunca el valor a 20.25 de manera predeterminada. Si se especifica ROUNDEC, COPY redondea el valor a 20.26. El comando INSERT siempre redondea los valores cuando es necesario que coincidan con la escala de la columna, por lo que un comando COPY con el parámetro ROUNDEC se comporta igual que un comando INSERT.

TIMEFORMAT [AS] {'timeformat_string' | 'auto' | 'epochsecs' | 'epochmillisecs' }

Especifica el formato de hora. Si no se especifica TIMEFORMAT, el formato predeterminado es YYYY-MM-DD HH:MI:SS para las columnas TIMESTAMP o YYYY-MM-DD HH:MI:SSOF para las columnas TIMESTAMPTZ, donde OF es el desplazamiento de la hora universal coordinada (UTC). No puede incluir un especificador de zona horaria en timeformat_string. Para cargar datos TIMESTAMPTZ que estén en un formato diferente al predeterminado, especifique 'auto'. Para obtener más información, consulte Utilización del reconocimiento automático con DATEFORMAT y TIMEFORMAT. Para obtener más información acerca de timeformat_string, consulte Cadenas TIMEFORMAT y DATEFORMAT.

El argumento 'auto' reconoce varios formatos que no se admiten cuando se utiliza una cadena DATEFORMAT y TIMEFORMAT. Si el comando COPY no reconoce el formato de los valores de fecha u hora, o si los valores de fecha y hora usan formatos diferentes entre sí, utilice el argumento 'auto' con el parámetro DATEFORMAT o TIMEFORMAT. Para obtener más información, consulte Utilización del reconocimiento automático con DATEFORMAT y TIMEFORMAT.

Si los datos de origen se representan como un tiempo de fecha de inicio, que es el número de segundos o milisegundos desde las 00:00:00 UTC del 1 de enero de 1970, especifique 'epochsecs' o 'epochmillisecs'.

Las palabras clave 'auto', 'epochsecs' y 'epochmillisecs' distinguen entre mayúsculas y minúsculas.

La palabra clave AS es opcional.

TRIMBLANKS

Elimina los caracteres de espacio en blanco del final de una cadena VARCHAR. Este parámetro aplica solo para las columnas con un tipo de datos VARCHAR.

TRUNCATECOLUMNS

Trunca los datos de las columnas al número adecuado de caracteres de modo que se ajuste a la especificación de la columna. Aplica solo para las columnas con un tipo de datos CHAR o VARCHAR y filas de 4 MB de tamaño, o menos.