amazon-redshift - prices - redshift aws price
Descarga desde redshift a s3 con encabezados (6)
A partir de la versión de clúster 1.0.3945, Redshift ahora admite la descarga de datos a S3 con filas de encabezado en cada archivo, es decir
UNLOAD(''select column1, column2 from mytable;'')
TO ''s3://bucket/prefix/''
IAM_ROLE ''<role arn>''
HEADER;
Nota: no puede utilizar la opción HEADER
junto con FIXEDWIDTH
.
https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html
Ya sé cómo descargar un archivo desde redshift a s3 como un solo archivo. Necesito saber cómo descargar con los encabezados de columna. ¿Alguien por favor puede ayudarme o darme una pista?
No quiero tener que hacerlo manualmente en shell o python.
Desafortunadamente, el comando UNLOAD
no admite esta función de forma nativa (consulte otras respuestas sobre cómo hacerlo con soluciones provisionales).
He publicado una solicitud de función en los foros de AWS , así que espero que se agregue algún día.
Edición: ¡ La característica ahora se ha implementado de forma nativa en Redshift ! 🎉
No hay una opción directa proporcionada por la descarga de desplazamiento al rojo.
Pero podemos modificar las consultas para generar archivos con filas que tengan encabezados agregados.
Primero intentaremos con la opción de desactivación paralela para que se cree solo en el archivo.
"De forma predeterminada, UNLOAD escribe los datos en paralelo a varios archivos, de acuerdo con el número de segmentos en el clúster. La opción predeterminada es ON o TRUE. De acuerdo con la cláusula ORDER BY, si se usa una. El tamaño máximo para un archivo de datos es de 6.2 GB. Entonces, por ejemplo, si descarga 13.4 GB de datos, UNLOAD crea los siguientes tres archivos ".
Para tener encabezados en descargar archivos haremos lo siguiente.
Supongamos que tiene una tabla como la siguiente
create table mutable
(
name varchar(64) default NULL,
address varchar(512) default NULL
)
Luego intente usar el comando de selección de su descarga como se muestra a continuación para agregar encabezados
( select ''name'',''address'') union ( select name,address from mytable )
esto agregará el nombre y la dirección de los encabezados como primera línea en su salida.
Para facilitar el proceso, puede utilizar una imagen de ventana acoplable preconstruida para extraer e incluir la fila del encabezado.
https://github.com/openbridge/ob_redshift_unload
También hará algunas otras cosas, pero parece tener sentido empaquetar esto en un formato fácil de usar.
Si alguna de sus columnas no tiene carácter, entonces debe lanzarlas explícitamente como char o varchar porque la UNION fuerza una conversión.
Este es un ejemplo de la declaración completa que creará un archivo en S3 con los encabezados en la primera fila.
El archivo de salida será un solo archivo CSV con comillas.
Este ejemplo asume valores numéricos en column_1. Deberá ajustar la cláusula ORDER BY a una columna numérica para asegurarse de que la fila del encabezado esté en la fila 1 del archivo S3.
******************************************
/* Redshift export to S3 CSV single file with headers - limit 6.2GB */
UNLOAD (''
SELECT /'column_1/',/'column_2/'
UNION
SELECT
CAST(column_1 AS varchar(255)) AS column_1,
CAST(column_2 AS varchar(255)) AS column_2
FROM source_table_for_export_to_s3
ORDER BY 1 DESC
;
'')
TO ''s3://bucket/path/file_name_for_table_export_in_s3_'' credentials
''aws_access_key_id=<key_with_no_<>_brackets>;aws_secret_access_key=<secret_access_key_with_no_<>_brackets>''
PARALLEL OFF
ESCAPE
ADDQUOTES
DELIMITER '',''
ALLOWOVERWRITE
GZIP
;
****************************************
Solo para complementar la respuesta, para asegurarse de que la fila del encabezado esté primero, no tiene que ordenar por una columna específica de datos. Puede incluir las selecciones UNIONed dentro de otra selección, agregarles una columna ordinal y luego en el orden de selección externo de esa columna sin incluirla en la lista de columnas seleccionadas.
UNLOAD (''
SELECT column_1, column_2 FROM (
SELECT 1 AS i,/'column_1/' AS column_, /'column_2/' AS column_2
UNION ALL
SELECT 2 AS i, column_1::varchar(255), column_2::varchar(255)
FROM source_table_for_export_to_s3
) t ORDER BY i
'')
TO ''s3://bucket/path/file_name_for_table_export_in_s3_''
CREDENTIALS
''aws_access_key_id=...;aws_secret_access_key=...''
DELIMITER '',''
PARALLEL OFF
ESCAPE
ADDQUOTES;