sql >> Base de Datos >  >> RDS >> PostgreSQL

Exporte grandes datos de PostgreSQL a AWS s3

Al exportar un gran volcado de datos, su mayor preocupación debe ser mitigar las fallas. Incluso si pudiera saturar una conexión de red de GB, mover 10 TB de datos llevará más de 24 horas. No desea tener que reiniciarlo debido a una falla (como un tiempo de espera de conexión de base de datos).

Esto implica que debe dividir la exportación en varias partes. Puede hacer esto agregando un rango de ID a la declaración de selección dentro de la copia (acabo de editar su ejemplo, por lo que puede haber errores):

COPY (SELECT (ID, NAME, ADDRESS) FROM CUSTOMERS WHERE ID BETWEEN 0 and 1000000) TO ‘CUSTOMERS_DATA_0.CSV WITH DELIMITER '|' CSV;

Por supuesto, generaría estas declaraciones con un programa corto; no olvide cambiar el nombre del archivo de salida para cada uno. Recomiendo elegir un rango de ID que le proporcione aproximadamente un gigabyte por archivo de salida, lo que da como resultado 10 000 archivos intermedios.

El lugar donde escriba estos archivos depende de usted. Si S3FS es lo suficientemente confiable, creo que es una buena idea.

Al dividir la descarga en varias partes más pequeñas, también puede dividirla entre varias instancias de EC2. Probablemente saturará el ancho de banda de la máquina de la base de datos con solo unos pocos lectores. También tenga en cuenta que AWS cobra $0.01 por GB para la transferencia de datos entre zonas de disponibilidad (con 10 TB son $100), así que asegúrese de que estas máquinas EC2 estén en la misma zona de disponibilidad que la máquina de la base de datos.

También significa que puede realizar la descarga mientras la base de datos no está ocupada (es decir, fuera del horario laboral normal).

Por último, significa que puede probar su proceso y corregir cualquier error de datos sin tener que ejecutar la exportación completa (o procesar 10 TB de datos para cada corrección).

En el lado de la importación, Redshift puede cargar múltiples archivos en paralelo . Esto debería mejorar su tiempo total, aunque realmente no puedo decir cuánto.

Una advertencia:use un archivo de manifiesto en lugar de un prefijo de nombre de objeto. Me he encontrado con casos en los que la consistencia final de S3 provocó que los archivos se descartaran durante una carga.