O Client SDK do AnalyticDB for PostgreSQL oferece uma interface de alto desempenho para gravar dados no AnalyticDB for PostgreSQL. Ele gerencia internamente o pool de conexões, o cache e o processamento paralelo, permitindo que você foque no pipeline de dados sem precisar administrar a infraestrutura.
A função principal do Client SDK do AnalyticDB for PostgreSQL é gravar com eficiência os dados fornecidos. O SDK não lê nem processa dados brutos.

Quando usar o Client SDK
Consulte a tabela a seguir para escolha a ferramenta adequada ao seu caso de uso:
|
Cenário |
Ferramenta recomendada |
|
Gravações em massa de alto throughput (pipelines ETL, sincronização de dados) |
Client SDK (esta página) |
|
Consultas OLAP, DDL e todas as outras operações SQL |
JDBC via |
O SDK supera o uso direto de COPY ou INSERT em gravações de grande volume, pois seu processamento paralelo interno agrupa e confirma os dados com eficiência. Para operações SQL que não sejam gravações em massa, obtenha uma conexão JDBC do SDK usando getConnection() e utilize as interfaces JDBC padrão.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância do AnalyticDB for PostgreSQL com endereço de conexão e porta
Um usuário de banco de dados com permissões de gravação nas tabelas de destino
Maven ou uma ferramenta de build Java compatível
Instale o SDK
Maven
Adicione a seguinte dependência ao seu arquivo pom.xml:
<dependency>
<groupId>com.alibaba.cloud.analyticdb</groupId>
<artifactId>adb4pgclient</artifactId>
<version>1.0.16</version>
</dependency>
O SDK depende dos seguintes pacotes. Caso ocorram conflitos de versão, verifique e resolva estas versões:
JAR offline
Baixe diretamente os pacotes JAR offline: adb4pgclient-1.0.16.jar e adb4pgclient-1.0.16-jar-with-dependencies.jar.
Início rápido
O exemplo a seguir demonstra o fluxo completo de gravação: configure a conexão, adicionar linhas ao buffer e confirmar a transação.
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.
}
}
}
Referência da API
Classe DatabaseConfig
A classe DatabaseConfig armazena todas as configurações de conexão e comportamento de gravação. Configure todos os parâmetros antes de passá-la para o Adb4pgClient. Não é possível alterar as configurações após a inicialização do cliente.
Parâmetros obrigatórios
|
Método |
Descrição |
|
|
Endereço de conexão da instância do AnalyticDB for PostgreSQL. |
|
|
Porta da instância. Padrão: |
|
|
Nome do banco de dados ao qual se conectar. |
|
|
Nome de usuário para a conexão com o banco de dados. |
|
|
Senha para a conexão com o banco de dados. |
|
|
Tabelas de destino para gravação, agrupadas por schema. Chame este método várias vezes para tabelas em schemas diferentes. Não surte efeito após a construção do |
|
|
Colunas a serem gravadas por tabela. Use |
Parâmetros opcionais
|
Método |
Padrão |
Descrição |
|
|
|
Quando |
|
|
|
Define se strings vazias devem ser tratadas como null. Aplica-se a todas as tabelas configuradas. |
|
|
|
Número de threads de gravação simultâneas. Alterar este valor não é recomendado na maioria dos casos. |
|
|
— |
Logger do cliente. Utilize |
|
|
|
Quantidade de tentativas em caso de exceção no commit. |
|
|
|
Intervalo entre as tentativas, em milissegundos. |
|
|
10 MB |
Tamanho do buffer que aciona um autocommit, em bytes. Não é recomendado alterar este valor. |
|
|
— |
Ative esta opção quando a tabela de destino usar armazenamento Beam e ocorrer um deadlock durante as gravações. Melhora o desempenho de gravação nesse cenário. |
|
|
|
Intervalo para atualizações de metadados da tabela de gravação, em minutos. |
Classe Row
Utilize a classe Row para gravar dados registro por registro.
|
Método |
Descrição |
|
|
Define o valor de uma coluna por índice. As colunas devem ser definidas em ordem. Instâncias de |
|
|
Grava uma linha inteira a partir de uma lista de valores. |
|
|
Atualiza o valor de uma coluna por índice. Instâncias de |
Classe Adb4pgClient
A classe Adb4pgClient é a interface principal de gravação. Todas as operações de gravação armazenam dados em buffer até que commit() seja chamado.
|
Método |
Descrição |
|
|
Adiciona uma ou mais linhas ao buffer. Se o buffer exceder |
|
|
Adiciona uma ou mais linhas no formato de mapa. Comporta-se da mesma forma que |
|
|
Confirma todos os dados em buffer no AnalyticDB for PostgreSQL. Lança uma exceção com as instruções com falha caso o commit não seja bem-sucedido. |
|
|
Retorna as informações de estrutura da tabela especificada. |
|
|
Retorna a lista de colunas da tabela especificada como objetos |
|
|
Libera pools de threads internos e recursos. Lança uma exceção se houver dados não confirmados na memória. |
|
|
Força a liberação de pools de threads internos e recursos. Quaisquer dados não confirmados na memória serão perdidos. Use apenas quando não for possível realizar uma parada limpa. |
|
|
Obtém uma |
Classe ColumnInfo
|
Método |
Descrição |
|
|
Retorna |
Códigos de erro
|
Código |
Número |
Descrição |
|
|
101 |
Alguns registros falharam durante o commit. Use |
|
|
102 |
Outras exceções durante o commit. |
|
|
103 |
Exceção ao adicionar dados. |
|
|
104 |
Exceção ao criar uma conexão. |
|
|
105 |
Exceção ao fechar uma conexão. |
|
|
106 |
Erro de configuração em |
|
|
107 |
Erro ao parar a instância. |
|
|
999 |
Código de erro de exceção padrão. |
Observações de uso
Segurança de threads
O SDK não é seguro para threads. Em um ambiente multithread, cada thread deve manter sua própria instância de Adb4pgClient. Compartilhar um único cliente entre threads cria contenção de gravação e transforma o cliente compartilhado em um gargalo de desempenho.
Commit e durabilidade dos dados
Os dados são gravados no AnalyticDB for PostgreSQL somente após o sucesso de commit(). Quando o cliente lançar uma exceção, inspecione o código de erro para decidir se deve tentar novamente os registros com falha ou registrá-los em log e ignorá-los.
Tamanho do lote
Evite confirmar transações com muita frequência usando lotes pequenos — os ganhos de eficiência da gravação em lote se perdem quando os lotes são reduzidos demais. Procure adicionar pelo menos 10.000 registros antes de chamar commit(). Lotes pequenos aumentam o número de idas e vindas na rede e reduzem o throughput.
Aumentar o número de threads de gravação nem sempre melhora o desempenho. Como os aplicativos geralmente armazenam dados em buffer na memória antes de confirmar, uma quantidade elevada de threads pode aumentar a pressão sobre a memória e acionar coletas de lixo (GC) mais frequentes. Monitore o status de GC do seu aplicativo ao ajustar a contagem de threads.
Bloqueio de configuração
Finalize todas as configurações de DatabaseConfig antes de passar o objeto de configuração para o Adb4pgClient. Nenhuma alteração de configuração surte efeito após a inicialização do cliente.
Operações SQL
O SDK é otimizado para gravações em massa (INSERT). Para todas as outras operações SQL — consultas, DDL, atualizações e exclusões — use getConnection() para obter uma conexão JDBC e opere por meio das interfaces JDBC padrão.