View a markdown version of this page

Carga de datos en Aurora DSQL - Amazon Aurora DSQL

Carga de datos en Aurora DSQL

Tanto si está migrando desde una base de datos existente, importando archivos desde Amazon Simple Storage Service o cargando datos desde su sistema local, Aurora DSQL ofrece varios métodos para importar sus datos. En esta sección se describen las herramientas y técnicas recomendadas para cargas de datos de cualquier tamaño, desde gigabytes hasta cientos de terabytes.

Elección de un método de carga

Aurora DSQL es compatible con los comandos estándar de carga de datos de PostgreSQL, pero para cargar datos de forma eficiente a gran escala es necesario gestionar la paralelización, la administración de conexiones y la recuperación ante errores. En la siguiente tabla se resumen sus opciones:

Método Lo mejor para Consideraciones
Aurora DSQL Loader: utilidad de código abierto que facilita la paralelización de inserciones cuando se utiliza Aurora DSQL. La mayoría de los casos de carga de datos, especialmente las migraciones y las importaciones masivas. Gestiona automáticamente la paralelización, el uso compartido de conexiones, la resolución de conflictos y la autenticación de IAM. Disponible como código fuente o binario.
\copyPostgreSQL: metacomando psql del lado del cliente Se carga fácilmente cuando ya está conectado a través de psql. Lee archivos en el cliente y transmite datos a través de la conexión; usted mismo gestiona la paralelización.
Transacciones de INSERT: SQL DML estándar Conjuntos de datos pequeños o inserciones impulsadas por aplicaciones El método más simple, pero el más lento para los datos masivos.

Para la mayoría de las tareas de carga de datos, utilice Aurora DSQL Loader. Gestiona la complejidad operativa que supone la carga de datos en una base de datos distribuida, lo que incluye la ejecución en paralelo a través de varias conexiones y el reintento automático de las operaciones fallidas.

Aurora DSQL Loader

Aurora DSQL Loader es una utilidad de línea de comandos de código abierto diseñada para cargar datos de manera eficiente en los clústeres Aurora DSQL. Administra el agrupamiento de conexiones, paraleliza la transferencia de datos entre varios procesadores y gestiona automáticamente los conflictos y los reintentos.

Características principales de

Aurora DSQL Loader ofrece las siguientes funcionalidades:

Carga paralela

Los subprocesos de trabajo configurables permiten la carga simultánea de datos a través de varias conexiones, lo que mejora el rendimiento.

Grupo de conexiones

Administra un conjunto de conexiones a su clúster de Aurora DSQL, gestionando automáticamente la autenticación de IAM y el ciclo de vida de las conexiones.

Compatibilidad con varios formatos de archivo

Admite los formatos CSV (valores separados por comas), TSV (valores separados por tabulaciones) y el formato de columnas de Apache Parquet. El cargador detecta automáticamente el formato del archivo basándose en la extensión de la URI de origen.

Inferencia automática de esquemas

Cuando se utiliza con el indicador --if-not-exists, el cargador puede crear automáticamente tablas con los tipos de columna adecuados en función de los datos.

Gestión de conflictos

Cuando la tabla de destino tenga restricciones únicas, configure cómo gestiona el cargador los conflictos mediante la opción --on-conflict: omitir duplicados, actualizar o insertar registros, o devolver un error.

Tolerancia a errores

Las funciones de reintentos automáticos y reanudación de tareas garantizan que las cargas interrumpidas puedan continuar desde el punto en el que se detuvieron, en lugar de tener que reiniciarse por completo.

Fuentes locales y de S3

Cargue datos desde rutas del sistema de archivos local o directamente desde buckets de Amazon S3 utilizando URI de S3.

Requisitos previos

Antes de utilizar Aurora DSQL Loader, asegúrese de que dispone de lo siguiente:

  • Un clúster activo de Aurora DSQL con un punto de conexión válido.

  • Credenciales de AWS configuradas a través de AWS CLI (aws configure), AWS inicio de sesión único (aws sso login) o roles de IAM.

  • Permisos de IAM: dsql:DbConnectAdmin o dsql:DbConnect en su clúster de Aurora DSQL.

  • En el caso de las fuentes de S3, se requieren los permisos adecuados para leer desde el bucket de origen.

Instalación

Descargue la última versión desde la página de versiones de GitHub. Hay versiones precompiladas disponibles para las plataformas más habituales. Para obtener instrucciones sobre cómo compilar desde el código fuente, consulte el repositorio de Aurora DSQL Loader.

Ejemplos de uso

En los siguientes ejemplos se muestran casos de uso habituales de Aurora DSQL Loader.

ejemplo Carga de un archivo CSV local

En este ejemplo se carga un archivo CSV desde su sistema de archivos local en una tabla ya existente:

aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri data.csv \ --table my_table
ejemplo Carga de datos desde Amazon S3

En este ejemplo se carga un archivo Parquet desde un bucket de Amazon S3:

aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri s3://my-bucket/data.parquet \ --table my_table
ejemplo Creación automática de tablas

En este ejemplo se crea automáticamente una nueva tabla basándose en el esquema de datos:

aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri data.csv \ --table my_table \ --if-not-exists
ejemplo Validar antes de cargar

En este ejemplo se comprueba la configuración sin cargar realmente los datos:

aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri data.csv \ --table my_table \ --dry-run
ejemplo Reanudación de una carga interrumpida

Si se interrumpe una operación de carga, puede reanudarla utilizando el ID de trabajo de la ejecución anterior:

aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri data.csv \ --table my_table \ --resume-job-id job-id \ --manifest-dir ./loader-state
nota

Al reanudarla, el cargador omite la mayor parte del trabajo ya completado, pero puede volver a intentar procesar algunos registros. Si la tabla de destino tiene restricciones únicas, utilice la opción --on-conflict para gestionar los duplicados; por ejemplo, DO NOTHINGx para omitir o DO UPDATE para actualizar o insertar.

Opciones de línea de comandos

Aurora DSQL Loader admite las siguientes opciones de línea de comandos:

--endpoint

(Obligatorio) El punto de conexión del clúster de Aurora DSQL. Ejemplo:: cluster-id.dsql.region.on.aws

--source-uri

(Obligatorio) La ruta al archivo de datos. Puede ser una ruta de archivo local o un URI de S3 (por ejemplo, s3://bucket-name/file.parquet).

--table

(Obligatorio) El nombre de la tabla de destino de la base de datos de Aurora DSQL.

--if-not-exists

(Opcional) Cree automáticamente la tabla de destino si no existe. El cargador deduce el esquema a partir de los datos.

--dry-run

(Opcional) Compruebe la configuración y los datos sin cargarlos realmente en la base de datos.

--resume-job-id

(Opcional) Reanude una operación de carga interrumpida anteriormente utilizando el ID de trabajo especificado.

--manifest-dir

(Opcional) Directorio para almacenar el estado de los trabajos y los manifiestos, que se utiliza para reanudar los trabajos.

--on-conflict

(Opcional) Especifica cómo gestionar los conflictos al insertar filas que incumplan las restricciones únicas de la tabla de destino. Los valores válidos son error (devolver un error), do-nothing (omitir las filas duplicadas) o do-update (actualizar las filas existentes con valores nuevos).

Para obtener una lista completa de opciones y parámetros de configuración adicionales, ejecute:

aurora-dsql-loader load --help

Prácticas recomendadas

  • Utilizar una simulación para la validación: compruebe siempre la configuración de la carga con --dry-run antes de introducir datos en las tablas de producción.

  • Definir restricciones únicas para la reanudación: si necesita reanudar cargas interrumpidas, defina restricciones únicas en sus tablas de destino y utilice la opción --on-conflict para gestionar los registros ya cargados.

  • Utilizar Parquet para conjuntos de datos de gran tamaño: el formato de columnas de Parquet suele ofrecer una mejor compresión y una carga más rápida para conjuntos de datos de gran tamaño en comparación con los formatos CSV o TSV.

  • Conservar los directorios de manifiestos: conserve el directorio de manifiestos para los trabajos de carga hasta que confirme que la carga se ha completado correctamente, lo que permite la reanudación si es necesario.

  • Crear tablas previamente siempre que sea posible: defina la tabla de destino con los tipos de datos de las columnas y las claves principales de forma explícita antes de cargar los datos. Los esquemas predefinidos le permiten controlar la precisión de los tipos y la indexación, lo que suele traducirse en un mejor rendimiento de las consultas en comparación con los esquemas inferidos automáticamente.

Solución de problemas

Errores de autenticación

Compruebe que sus credenciales de AWS estén configuradas correctamente y que su identidad de IAM disponga de los permisos dsql:DbConnect o dsql:DbConnectAdmin necesarios en el clúster de destino.

Errores de acceso a S3

Asegúrese de que su identidad de IAM disponga de los permisos de lectura de S3 adecuados para el bucket de origen y los objetos.

Errores de inferencia de esquemas

Cuando utilice --if-not-exists, asegúrese de que su archivo de datos tenga tipos de columna coherentes. La presencia de tipos mixtos en una columna puede provocar que falle la inferencia del esquema.

Errores de claves duplicadas en la reanudación

Si se producen errores de claves duplicadas al reanudar una carga, añada restricciones únicas a la tabla de destino para que el cargador pueda utilizar ON CONFLICT DO NOTHING para omitir los registros ya cargados.

Para obtener más información sobre la resolución de problemas, consulte el repositorio de GitHub de Aurora DSQL Loader.

Rutas de migración

En las siguientes secciones se describe cómo migrar datos desde sistemas de origen habituales a Aurora DSQL.

Migración desde PostgreSQL

Para migrar datos de una base de datos de PostgreSQL existente a Aurora DSQL:

  1. Exporte sus datos de PostgreSQL a formato CSV o Parquet. Puede usar el comando COPY de PostgreSQL para exportar cada tabla:

    COPY my_table TO '/path/to/my_table.csv' WITH (FORMAT csv, HEADER true);
  2. Cree la tabla de destino en Aurora DSQL. Puede crear el esquema manualmente o utilizar el indicador --if-not-exists del cargador para que este deduzca el esquema a partir de sus datos.

  3. Cargue los datos exportados mediante Aurora DSQL Loader:

    aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri /path/to/my_table.csv \ --table my_table
sugerencia

En el caso de migraciones de gran volumen, considere la posibilidad de exportar al formato Parquet para obtener una mejor compresión y una carga más rápida. Herramientas como DuckDB pueden convertir archivos CSV a Parquet de manera eficiente.

Migración desde MySQL

Para migrar datos de MySQL a Aurora DSQL:

  1. Exporte sus datos de MySQL a formato CSV utilizando SELECT INTO OUTFILE o una herramienta como mysqldump con la opción --tab:

    SELECT * FROM my_table INTO OUTFILE '/path/to/my_table.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
  2. Cree la tabla de destino en Aurora DSQL con los tipos de datos compatibles con PostgreSQL adecuados.

  3. Cargue los datos exportados mediante Aurora DSQL Loader:

    aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri /path/to/my_table.csv \ --table my_table
nota

MySQL y PostgreSQL tienen sistemas de tipos de datos diferentes. Revise su esquema y ajuste los tipos de datos según sea necesario al crear tablas en Aurora DSQL.

Carga desde Amazon S3

Si sus datos ya se encuentran en Amazon S3, puede cargarlos directamente sin necesidad de descargarlos en su sistema local. Aurora DSQL Loader es compatible de forma nativa con las URI de S3:

aurora-dsql-loader load \ --endpoint cluster-id.dsql.region.on.aws \ --source-uri s3://my-bucket/path/to/data.parquet \ --table my_table

Asegúrese de que su identidad de IAM tenga el permiso s3:GetObject sobre los objetos de origen.

Uso de PostgreSQL \copy

Si ya está conectado a Aurora DSQL a través de una sesión psql que gestiona la autenticación de IAM, puede utilizar el metacomando \copy del lado del cliente para cargar datos desde su sistema de archivos local. A diferencia de la instrucción COPY del lado del servidor, \copy lee el archivo en el equipo cliente y transmite los datos a través de la conexión existente, por lo que no es necesario acceder al archivo desde el lado del servidor. Este método funciona bien para cargas sencillas y de un solo subproceso.

ejemplo Carga de un archivo CSV con \copy
\copy my_table FROM '/path/to/data.csv' WITH (FORMAT csv, HEADER true);

Si usa \copy directamente, usted es responsable de lo siguiente:

  • Administrar la paralelización al cargar varios archivos o conjuntos de datos de gran tamaño.

  • Gestionar la administración de conexiones y la actualización del token de autenticación.

  • Implementar la lógica de reintento para operaciones fallidas.

Prácticas recomendadas para las transacciones INSERT

Cuando utilice instrucciones INSERT para cargar datos en Aurora DSQL, siga estas prácticas para mejorar el rendimiento y la fiabilidad:

  • Agrupar filas en INSERT de varias filas: agrupe varias filas en una sola instrucción INSERT para reducir el número de idas y vueltas. Por ejemplo, INSERT INTO my_table VALUES (1, 'a'), (2, 'b'), (3, 'c') es más eficiente que tres instrucciones independientes.

  • Utilizar consultas parametrizadas: utilice instrucciones preparadas con enlace de parámetros en lugar de concatenación de cadenas. Esto evita los riesgos de inyección de código SQL y permite que la base de datos reutilice los planes de consultas.

  • Mantener las transacciones pequeñas: Aurora DSQL utiliza un control de simultaneidad optimista, por lo que las transacciones grandes que tocan muchas filas tienen más probabilidades de encontrar conflictos. Intente realizar transacciones de unos pocos cientos de filas en lugar de miles.

  • Implementar una lógica de reintento: en un sistema distribuido es habitual que se produzcan errores transitorios, como los conflictos derivados del control de simultaneidad optimista (OCC). Implemente un retroceso exponencial con reintentos para las transacciones fallidas.

  • Paralelizar entre conexiones: abra varias conexiones y distribuya las inserciones entre ellas. Cada conexión puede procesar un subconjunto de datos diferente de forma simultánea.

En la mayoría de los casos de uso, Aurora DSQL Loader ofrece un método más sencillo y fiable para la carga de datos.

Recursos adicionales