Todos os produtos
Search
Central de documentação

AnalyticDB:Write data by using the Client SDK

Última atualização: Jun 27, 2026

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.

Nota

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 getConnection()

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

setHost(String adbHost)

Endereço de conexão da instância do AnalyticDB for PostgreSQL.

setPort(int port)

Porta da instância. Padrão: 5432.

setDatabase(String database)

Nome do banco de dados ao qual se conectar.

setUser(String username)

Nome de usuário para a conexão com o banco de dados.

setPassword(String pwd)

Senha para a conexão com o banco de dados.

addTable(List<String> table, String schema)

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 Adb4pgClient.

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

Colunas a serem gravadas por tabela. Use columnList.add("*") para gravar em todas as colunas. Defina este parâmetro para cada tabela na lista de tabelas.

Parâmetros opcionais

Método

Padrão

Descrição

setInsertIgnore(boolean insertIgnore)

false

Quando false, linhas que causam conflitos de chave primária sobrescrevem as linhas existentes. Defina como true para ignorar as linhas conflitantes.

setEmptyAsNull(boolean emptyAsNull)

false

Define se strings vazias devem ser tratadas como null. Aplica-se a todas as tabelas configuradas.

setParallelNumber(int parallelNumber)

4

Número de threads de gravação simultâneas. Alterar este valor não é recomendado na maioria dos casos.

setLogger(Logger logger)

Logger do cliente. Utilize slf4j.Logger.

setRetryTimes(int retryTimes)

3

Quantidade de tentativas em caso de exceção no commit.

setRetryIntervalTime(long retryIntervalTime)

1000 ms

Intervalo entre as tentativas, em milissegundos.

setCommitSize(long commitSize)

10 MB

Tamanho do buffer que aciona um autocommit, em bytes. Não é recomendado alterar este valor.

setEnablePreHash(boolean enablePreHash)

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.

setMetaDataSchedulerInterval(int metaDataSchedulerInterval)

1 min

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

setColumn(int index, Object value)

Define o valor de uma coluna por índice. As colunas devem ser definidas em ordem. Instâncias de Row não podem ser reutilizadas com este método — crie uma nova Row para cada registro.

setColumnValues(List<Object> values)

Grava uma linha inteira a partir de uma lista de valores.

updateColumn(int index, Object value)

Atualiza o valor de uma coluna por índice. Instâncias de Row podem ser reutilizadas com este método — atualize os valores no local e chame addRow novamente.

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

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

Adiciona uma ou mais linhas ao buffer. Se o buffer exceder commitSize, um autocommit é acionado antes da adição dos novos dados. Se o autocommit falhar, uma AdbClientException com o código de erro COMMIT_ERROR_DATA_LIST será lançada, contendo a lista de registros com falha.

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

Adiciona uma ou mais linhas no formato de mapa. Comporta-se da mesma forma que addRow quanto ao gerenciamento de buffer e autocommit.

commit()

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.

TableInfo getTableInfo(String tableName, String schemaName)

Retorna as informações de estrutura da tabela especificada.

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

Retorna a lista de colunas da tabela especificada como objetos ColumnInfo. Use columnInfo.isNullable() para verificar se uma coluna aceita valores null.

stop()

Libera pools de threads internos e recursos. Lança uma exceção se houver dados não confirmados na memória.

forceStop()

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.

Connection getConnection() throws SQLException

Obtém uma Connection JDBC do pool de conexões do cliente para operações SQL que não sejam COPY. Após o uso, libere os objetos ResultSet, Statement e Connection associados.

Classe ColumnInfo

Método

Descrição

boolean isNullable()

Retorna true se a coluna aceitar valores null.

Códigos de erro

Código

Número

Descrição

COMMIT_ERROR_DATA_LIST

101

Alguns registros falharam durante o commit. Use e.getErrData() para recuperar os registros com falha como List<String>. Este erro pode ocorrer durante addMap(s), addRow(s) e commit. Trate-o separadamente para cada operação.

COMMIT_ERROR_OTHER

102

Outras exceções durante o commit.

ADD_DATA_ERROR

103

Exceção ao adicionar dados.

CREATE_CONNECTION_ERROR

104

Exceção ao criar uma conexão.

CLOSE_CONNECTION_ERROR

105

Exceção ao fechar uma conexão.

CONFIG_ERROR

106

Erro de configuração em DatabaseConfig.

STOP_ERROR

107

Erro ao parar a instância.

OTHER

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.