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.
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 |
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 |
|
|
Dirección de conexión de la instancia de AnalyticDB for PostgreSQL. |
|
|
Puerto de la instancia. Valor predeterminado: |
|
|
Nombre de la base de datos a la que se conectará. |
|
|
Nombre de usuario para la conexión a la base de datos. |
|
|
Contraseña para la conexión a la base de datos. |
|
|
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 |
|
|
Columnas de destino para la escritura en cada tabla. Utilice |
Parámetros opcionales
|
Método |
Valor predeterminado |
Descripción |
|
|
|
Cuando es |
|
|
|
Indica si las cadenas vacías deben tratarse como valores nulos. Se aplica a todas las tablas configuradas. |
|
|
|
Número de hilos de escritura concurrentes. No se recomienda modificar este valor en la mayoría de los casos. |
|
|
— |
Logger del cliente. Utilice |
|
|
|
Número de reintentos cuando ocurre una excepción durante la confirmación. |
|
|
|
Intervalo entre reintentos, en milisegundos. |
|
|
10 MB |
Tamaño del búfer que desencadena una confirmación automática, en bytes. No se recomienda modificar este valor. |
|
|
— |
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. |
|
|
|
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 |
|
|
Establece el valor de una columna por índice. Las columnas deben configurarse en orden. Las instancias de |
|
|
Escribe una fila completa a partir de una lista de valores. |
|
|
Actualiza el valor de una columna por índice. Las instancias de |
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 |
|
|
Agrega una o más filas al búfer. Si el búfer supera |
|
|
Agrega una o más filas en formato de mapa. Se comporta igual que |
|
|
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. |
|
|
Devuelve la información de estructura de la tabla especificada. |
|
|
Devuelve la lista de columnas de la tabla especificada como objetos |
|
|
Libera los pools de hilos internos y los recursos. Lanza una excepción si quedan datos sin confirmar en memoria. |
|
|
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. |
|
|
Obtiene una |
Clase ColumnInfo
|
Método |
Descripción |
|
|
Devuelve |
Códigos de error
|
Código |
Número |
Descripción |
|
|
101 |
Algunos registros fallaron durante la confirmación. Utilice |
|
|
102 |
Otras excepciones durante la confirmación. |
|
|
103 |
Excepción al agregar datos. |
|
|
104 |
Excepción al crear una conexión. |
|
|
105 |
Excepción al cerrar una conexión. |
|
|
106 |
Error de configuración en |
|
|
107 |
Error al detener la instancia. |
|
|
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.