COPIAR
Restricción: no utilice el comando COPY. Para operaciones de carga o descarga, utilice el comando nzload o los comandos CREATE EXTERNAL TABLE. Estos comandos son más rápidos y más estables que el comando COPY. El comando COPY se documenta aquí porque se utiliza para operaciones internas.
- Utilice el comando COPY TO para copiar todo el contenido de una tabla a un archivo. El comando COPY TO no actúa en los valores predeterminados de la columna.
- Utilice el comando COPY FROM para copiar datos de un archivo a una tabla. Si ya hay datos en la tabla, el comando se añade a la tabla.
No hay comando COPY en SQL92. Puede utilizar el comando COPY con tablas sencillas pero no con vistas.
Cuando utiliza un comando COPY, el sistema lee o escribe un archivo de texto con una línea por fila de tabla. El carácter delimitador separa las columnas (atributos) en una fila. Los valores de atributo son series que la función de salida genera para el tipo de datos de cada atributo o que son aceptables en la función de entrada. El sistema utiliza la serie de valor nulo especificada en lugar de los atributos que son nulos.
De forma predeterminada, una copia de texto utiliza un carácter separador ("\t") como delimitador entre campos. Puede cambiar el delimitador de campo a otro carácter único con la frase de palabra clave utilizando delimitadores. El sistema utiliza caracteres de cita de barra inclinada invertida para los campos de datos que coinciden con el carácter delimitador. Puede representar el final de los datos con una sola línea que contenga una barra invertida y un punto (\). Un marcador de fin de datos no es necesario cuando se lee desde un archivo UNIX, pero debe proporcionar un marcador de fin cuando esté copiando datos a o desde una aplicación cliente.
El comando COPY detiene la operación al primer error. Para el comando COPY FROM, esto no es un problema. Para el comando COPY TO, la relación de destino ya recibe filas anteriores. Estas filas no son visibles ni accesibles, pero aún ocupan espacio de disco. Esto puede llevar a una considerable cantidad de espacio de disco gastado si el error se produce en una operación de copia grande.
Puede utilizar caracteres de barra inclinada invertida (\) en los datos del comando COPY para los caracteres de datos de cita que, de lo contrario, se puede suponer que son delimitadores de fila o de columna. Específicamente, los siguientes caracteres deben ir precedidos de una barra inclinada invertida si se muestran como parte de un valor de atributo: el carácter delimitador de barra inclinada invertida mismo, de nueva línea o el carácter delimitador actual.
Cuando utiliza un nombre de archivo, especifique siempre la vía de acceso absoluta. El servidor de base de datos impone una vía de acceso absoluta en el caso del comando COPY TO, pero para el comando COPY FROM tiene la opción de leer desde un archivo especificado por una vía de acceso relativa. El sistema interpreta la ruta relativa al directorio de trabajo del servidor de base de datos, no al directorio de trabajo SQL Netezza Performance Server.
| Secuencia | Representa |
|---|---|
| \b | Retroceso (ASCII 8) |
| \f | Salto de página (ASCII 12) |
| \n | Nueva línea (ASCII 10) |
| \r | Retorno de carro (ASCII 13) |
| \t | Tabulador (ASCII 9) |
| \v | Separador vertical (ASCII 11) |
| \dígitos | Barra inclinada invertida seguida de uno a tres dígitos octales especifica el carácter con ese código numérico. |
El comando COPY TO no da salida a una secuencia de barra inclinada invertida de dígitos octales, pero utiliza las demás secuencias listadas en la tabla anterior para esos caracteres de control.
Aplicaciones que generan datos de comando de COPY convierten las líneas nuevas de datos en secuencias \n y convierten los retornos de carro en secuencias \r.
El final de cada fila se marca con una nueva línea ("\n") al estilo UNIX. El comando COPY FROM no funciona adecuadamente con un archivo que contiene líneas nuevas estilo DOS o Mac.
Sintaxis
COPY [BINARY] table
FROM { 'file name' | stdin }
[ [USING] DELIMITERS 'delimiter' ]
[ WITH NULL AS 'null string' ];COPY table
TO { 'file name' | stdout }
[ [USING] DELIMITERS 'delimiter' ]
[ WITH NULL AS 'null string' ];Entradas
El comando COPY toma las siguientes entradas:
| Entrada | Descripción |
|---|---|
| BINARIO | Cambia el comportamiento del formato de campo. Fuerza a almacenar o leer todos los datos en formato binario en lugar de texto. |
| delimitador | El carácter que separa campos dentro de cada una de las filas del archivo. |
| nombre de archivo | El nombre de la vía de acceso absoluta del archivo de entrada o de salida. |
| serie nula | La serie que representa un valor NULL. El valor predeterminado es "\N"
(backslash-N). En copy in, cualquier elemento de datos que coincide con esta serie se almacena como valor NULL. Asegúrese de que utiliza la misma serie que necesita en copy out. |
| stdin | La entrada procederá de la aplicación cliente. |
| .stdout | La salida irá a la aplicación cliente. |
| tabla | El nombre de una tabla existente. |
Resultados
| Resultado | Descripción |
|---|---|
| COPY | El sistema devuelve este mensaje si la copia se completa correctamente. |
| ERROR: reason | Si la copia falla, el sistema devuelve este mensaje con una razón para el fallo. |
Privilegios
Debe tener el privilegio Select en cualquier tabla cuyos valores los lea el comando COPY. Debe tener el privilegio Insert o Update para una tabla en la que se están insertando los valores por medio del comando COPY. El servidor de bases de datos debe tener los permisos adecuados para cualquier archivo que el comando COPY lea o escriba.
Uso
- Copiar una tabla a una salida estándar con el empleo de una barra vertical (|) como
delimitador de campo:
MYDB.SCH1(USER)=> COPY country TO stdout USING DELIMITERS '|'; - Copiar datos de un fichero UNIX en la tabla país:
MYDB.SCH1(USER)=> COPY country FROM '/usr1/proj/bray/sql/country_data'; - Este es un ejemplo de datos adecuados para copiar en una tabla desde
stdin (por lo tanto, tiene la secuencia de terminación en la última línea):
AF AFGHANISTAN AL ALBANIA DZ ALGERIA ZM ZAMBIA ZW ZIMBABWE \.