Todos los productos
Search
Centro de documentos

AnalyticDB:Write data by using the Client SDK

Última actualización: Sep 04, 2026

El Client SDK de AnalyticDB for PostgreSQL ofrece una interfaz de alto rendimiento para escribir datos en AnalyticDB for PostgreSQL. Este SDK gestiona internamente el pool de conexiones, el almacenamiento en caché y el procesamiento paralelo, lo que le permite concentrarse en su pipeline de datos sin preocuparse por la infraestructura.

Nota

La función principal del Client SDK de AnalyticDB for PostgreSQL es escribir de manera eficiente los datos que usted proporciona. El SDK no lee ni procesa datos sin formato.

Cuándo usar el Client SDK

Utilice la siguiente tabla para elegir la herramienta adecuada según su caso de uso:

Escenario

Herramienta recomendada

Escrituras masivas de alto throughput (pipelines ETL, sincronización de datos)

Client SDK (esta página)

Consultas OLAP, DDL y todas las demás operaciones SQL

JDBC mediante getConnection()

El SDK supera el rendimiento de COPY o INSERT directos en escrituras de gran volumen, ya que su procesamiento paralelo interno agrupa y confirma los datos de forma eficiente. Para operaciones SQL distintas a las escrituras masivas, obtenga una conexión JDBC desde el SDK mediante getConnection() y utilice las interfaces JDBC estándar.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una instancia de AnalyticDB for PostgreSQL con una dirección de conexión y un puerto

  • Un usuario de base de datos con permisos de escritura en las tablas de destino

  • Maven o una herramienta de compilación de Java compatible

Instalación del SDK

Maven

Agregue la siguiente dependencia a su archivo pom.xml:

<dependency>
  <groupId>com.alibaba.cloud.analyticdb</groupId>
  <artifactId>adb4pgclient</artifactId>
  <version>1.0.16</version>
</dependency>

El SDK depende de los siguientes paquetes. Si se presentan conflictos de versiones, revise y resuelva estas dependencias:

JAR sin conexión

Descargue directamente los paquetes JAR sin conexión: adb4pgclient-1.0.16.jar y adb4pgclient-1.0.16-jar-with-dependencies.jar.

Inicio rápido

El siguiente ejemplo muestra el flujo de trabajo completo de escritura: configurar la conexión, agregar filas al búfer y confirmar los datos.

public class Adb4pgClientUsage {
    public void demo() {
        // 1. Configure the connection
        DatabaseConfig databaseConfig = new DatabaseConfig();
        databaseConfig.setHost("100.100.100.100");   // Connection address of the instance
        databaseConfig.setPort(8888);                // Default: 5432
        databaseConfig.setUser("your user name");
        databaseConfig.setPassword("your password");
        databaseConfig.setDatabase("your database name");

        // 2. Specify the target tables and columns
        // Call addTable separately for tables in different schemas.
        // Pass null for the schema to use the default schema 'public'.
        List<String> tables = new ArrayList<String>();
        tables.add("your table name 1");
        tables.add("your table name 2");
        databaseConfig.addTable(tables, "table schema name");

        // Specify columns per table. Use "*" to write to all columns.
        List<String> columns = new ArrayList<String>();
        columns.add("column1");
        columns.add("column2");
        databaseConfig.setColumns(columns, "your table name 1", "table schema name");
        databaseConfig.setColumns(Collections.singletonList("*"), "your table name 2", "table schema name");

        // 3. Set optional write behavior (all settings must be configured before creating the client)
        databaseConfig.setEmptyAsNull(false);      // Whether to treat empty strings as null. Default: false.
        databaseConfig.setInsertIgnore(true);      // Whether to ignore rows that cause primary key conflicts. Default: false (conflicts overwrite existing rows).
        databaseConfig.setRetryTimes(3);           // Retry count on commit exception. Default: 3.
        databaseConfig.setRetryIntervalTime(1000); // Retry interval in milliseconds. Default: 1000.

        // 4. Initialize the client. No DatabaseConfig changes take effect after this point.
        Adb4pgClient adbClient = new Adb4pgClient(databaseConfig);

        // 5. Add rows to the buffer using setColumn (creates a new Row per record)
        for (int i = 0; i < 10; i++) {
            Row row = new Row(columns.size());
            row.setColumn(0, i);                   // Column index must match the column order set above
            row.setColumn(1, "string value");
            // If the buffer exceeds commitSize, an autocommit triggers before the new row is added.
            // Handle AdbClientException with error code COMMIT_ERROR_DATA_LIST if autocommit fails.
            adbClient.addRow(row, "your table name 1", "table schema name");
        }

        // Use updateColumn when you want to reuse the same Row instance across records
        Row row = new Row();
        row.setColumn(0, 10);
        row.setColumn(1, "2018-01-01 08:00:00");
        adbClient.addRow(row, "your table name 1", "table schema name");
        row.updateColumn(0, 11);
        row.updateColumn(1, "2018-01-02 08:00:00");
        adbClient.addRow(row, "your table name 1", "table schema name");

        // Add rows in Map format (column name to value)
        Map<String, String> rowMap = new HashMap<String, String>();
        rowMap.put("t1", "12");
        rowMap.put("t2", "string value");
        adbClient.addMap(rowMap, "your table name 2", "table schema name");

        // 6. Commit the buffer. Data is written to AnalyticDB for PostgreSQL only after a successful commit.
        try {
            adbClient.commit();
        } catch (Exception e) {
            // Handle exception: inspect the error code and decide whether to retry or log and skip
        } finally {
            adbClient.stop(); // Releases thread pools. Throws an exception if uncommitted data remains.
        }
    }
}

Referencia de la API

Clase DatabaseConfig

DatabaseConfig almacena toda la configuración de conexión y del comportamiento de escritura. Configure todos los parámetros antes de pasar este objeto a Adb4pgClient. La configuración no se puede modificar después de inicializar el cliente.

Parámetros obligatorios

Método

Descripción

setHost(String adbHost)

Dirección de conexión de la instancia de AnalyticDB for PostgreSQL.

setPort(int port)

Puerto de la instancia. Valor predeterminado: 5432.

setDatabase(String database)

Nombre de la base de datos a la que se conectará.

setUser(String username)

Nombre de usuario para la conexión a la base de datos.

setPassword(String pwd)

Contraseña para la conexión a la base de datos.

addTable(List<String> table, String schema)

Tablas de destino para la escritura, agrupadas por esquema. Llame a este método varias veces si tiene tablas en distintos esquemas. No surte efecto después de construir Adb4pgClient.

setColumns(List<String> columns, String tableName, String schemaName)

Columnas de destino para la escritura en cada tabla. Utilice columnList.add("*") para escribir en todas las columnas. Debe configurarse para cada tabla incluida en la lista de tablas.

Parámetros opcionales

Método

Valor predeterminado

Descripción

setInsertIgnore(boolean insertIgnore)

false

Cuando es false, las filas que provocan conflictos de clave primaria sobrescriben las filas existentes. Establézcalo en true para omitir las filas conflictivas.

setEmptyAsNull(boolean emptyAsNull)

false

Indica si las cadenas vacías deben tratarse como valores nulos. Se aplica a todas las tablas configuradas.

setParallelNumber(int parallelNumber)

4

Número de hilos de escritura concurrentes. No se recomienda modificar este valor en la mayoría de los casos.

setLogger(Logger logger)

—

Logger del cliente. Utilice slf4j.Logger.

setRetryTimes(int retryTimes)

3

Número de reintentos cuando ocurre una excepción durante la confirmación.

setRetryIntervalTime(long retryIntervalTime)

1000 ms

Intervalo entre reintentos, en milisegundos.

setCommitSize(long commitSize)

10 MB

Tamaño del búfer que desencadena una confirmación automática, en bytes. No se recomienda modificar este valor.

setEnablePreHash(boolean enablePreHash)

—

Habilite esta opción cuando la tabla de destino utiliza almacenamiento Beam y se produce un interbloqueo durante la escritura. Mejora el rendimiento de escritura en este escenario.

setMetaDataSchedulerInterval(int metaDataSchedulerInterval)

1 min

Intervalo de actualización de metadatos para la tabla de escritura, en minutos.

Clase Row

Utilice Row para escribir datos registro por registro.

Método

Descripción

setColumn(int index, Object value)

Establece el valor de una columna por índice. Las columnas deben configurarse en orden. Las instancias de Row no pueden reutilizarse con este método; cree una nueva instancia de Row para cada registro.

setColumnValues(List<Object> values)

Escribe una fila completa a partir de una lista de valores.

updateColumn(int index, Object value)

Actualiza el valor de una columna por índice. Las instancias de Row sí pueden reutilizarse con este método; actualice los valores en el mismo lugar y vuelva a llamar a addRow.

Clase Adb4pgClient

Adb4pgClient es la interfaz principal de escritura. Todas las operaciones de escritura almacenan los datos en un búfer hasta que se llama a commit().

Método

Descripción

addRow(Row row, String tableName, String schemaName) / addRows(List<Row> rows, String tableName, String schemaName)

Agrega una o más filas al búfer. Si el búfer supera commitSize, se activa una confirmación automática antes de agregar los nuevos datos. Si la confirmación automática falla, se lanza una excepción AdbClientException con el código de error COMMIT_ERROR_DATA_LIST, que contiene la lista de registros fallidos.

addMap(Map<String, String> dataMap, String tableName, String schemaName) / addMaps(List<Map<String, String>> dataMaps, String tableName, String schemaName)

Agrega una o más filas en formato de mapa. Se comporta igual que addRow en cuanto a la gestión del búfer y la confirmación automática.

commit()

Confirma todos los datos almacenados en el búfer hacia AnalyticDB for PostgreSQL. Lanza una excepción con las sentencias fallidas si la confirmación no se completa correctamente.

TableInfo getTableInfo(String tableName, String schemaName)

Devuelve la información de estructura de la tabla especificada.

List<ColumnInfo> getColumnInfo(String tableName, String schemaName)

Devuelve la lista de columnas de la tabla especificada como objetos ColumnInfo. Utilice columnInfo.isNullable() para comprobar si una columna acepta valores nulos.

stop()

Libera los pools de hilos internos y los recursos. Lanza una excepción si quedan datos sin confirmar en memoria.

forceStop()

Libera forzosamente los pools de hilos internos y los recursos. Cualquier dato sin confirmar en memoria se pierde. Utilícelo solo cuando no sea posible detener el cliente de forma limpia.

Connection getConnection() throws SQLException

Obtiene una Connection JDBC del pool de conexiones del cliente para operaciones SQL que no sean COPY. Después de usarla, libere los objetos ResultSet, Statement y Connection asociados.

Clase ColumnInfo

Método

Descripción

boolean isNullable()

Devuelve true si la columna acepta valores nulos.

Códigos de error

Código

Número

Descripción

COMMIT_ERROR_DATA_LIST

101

Algunos registros fallaron durante la confirmación. Utilice e.getErrData() para recuperar los registros fallidos como List<String>. Este error puede ocurrir durante addMap(s), addRow(s) y commit. Manéjelo por separado para cada operación.

COMMIT_ERROR_OTHER

102

Otras excepciones durante la confirmación.

ADD_DATA_ERROR

103

Excepción al agregar datos.

CREATE_CONNECTION_ERROR

104

Excepción al crear una conexión.

CLOSE_CONNECTION_ERROR

105

Excepción al cerrar una conexión.

CONFIG_ERROR

106

Error de configuración en DatabaseConfig.

STOP_ERROR

107

Error al detener la instancia.

OTHER

999

Código de error de excepción predeterminado.

Notas de uso

Seguridad de hilos

El SDK no es seguro para hilos. En un entorno multiproceso, cada hilo debe mantener su propia instancia de Adb4pgClient. Compartir un solo cliente entre varios hilos genera contención en la escritura y convierte al cliente compartido en un cuello de botella de rendimiento.

Confirmación y durabilidad de los datos

Los datos se escriben en AnalyticDB for PostgreSQL únicamente después de que commit() se ejecuta correctamente. Cuando el cliente lanza una excepción, inspeccione el código de error para decidir si debe reintentar los registros fallidos o registrarlos y omitirlos.

Tamaño del lote

Evite realizar confirmaciones demasiado frecuentes con lotes pequeños, ya que las ventajas de eficiencia de la escritura por lotes se pierden cuando estos son reducidos. Procure agregar como mínimo 10,000 registros antes de llamar a commit(). Los lotes pequeños incrementan el número de viajes de ida y vuelta por la red y reducen el throughput.

Aumentar el número de hilos de escritura no siempre mejora el rendimiento. Dado que las aplicaciones suelen almacenar datos en memoria antes de confirmarlos, un número elevado de hilos puede aumentar la presión sobre la memoria y provocar una recolección de basura (GC) más frecuente. Supervise el estado de la GC de su aplicación al ajustar el recuento de hilos.

Bloqueo de la configuración

Finalice toda la configuración de DatabaseConfig antes de pasar el objeto de configuración a Adb4pgClient. Ningún cambio en la configuración surte efecto después de inicializar el cliente.

Operaciones SQL

El SDK está optimizado para escrituras masivas (INSERT). Para todas las demás operaciones SQL (consultas, DDL, actualizaciones y eliminaciones), utilice getConnection() para obtener una conexión JDBC y operar mediante las interfaces JDBC estándar.