Todos os produtos
Search
Central de documentação

DataWorks:Doris

Última atualização: Sep 06, 2026

O Data Integration permite usar o Doris Reader para ler dados do Doris e o Doris Writer para gravar dados de tabela no Doris. Este tópico descreve os recursos do DataWorks Data Integration na sincronização de dados do Doris.

Versões suportadas do Doris

O Doris Writer utiliza o MySQL Driver 5.1.47. As versões de kernel compatíveis com o driver estão listadas abaixo. Para obter mais informações sobre os recursos do driver, consulte a documentação oficial do Doris.

Versão do Doris

Suportada

0.x.x

Sim

1.1.x

Sim

1.2.x

Sim

2.x

Sim

Restrições de uso

O Data Integration suporta sincronização offline de dados do Doris (leitura offline e escrita offline).

Tipos de dados suportados

Cada versão do Doris oferece suporte a diferentes tipos de dados e modelos de agregação. Para detalhes sobre todos os tipos de dados suportados em cada versão, consulte a documentação oficial do Doris. A tabela a seguir lista os principais tipos de dados suportados.

Tipo de dado

Modelo suportado

Versão do Doris

Escrita offline (Doris Writer)

SMALLINT

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

INT

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

BIGINT

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

LARGEINT

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

FLOAT

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

DOUBLE

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

DECIMAL

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

DECIMALV3

Aggregate,Unique,Duplicate

Versões posteriores à 1.2.1, 2.x

Sim

DATE

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

DATETIME

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

DATEV2

Aggregate,Unique,Duplicate

1.2.x, 2.x

Sim

DATETIMEV2

Aggregate,Unique,Duplicate

1.2.x, 2.x

Sim

CHAR

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

VARCHAR

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

STRING

Aggregate,Unique,Duplicate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

ARRAY

Duplicate

1.2.x, 2.x

Sim

JSON

Aggregate,Unique,Duplicate

1.2.x, 2.x

Sim

HLL

Aggregate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

BITMAP

Aggregate

0.x.x, 1.1.x, 1.2.x, 2.x

Sim

QUANTILE_STATE

Aggregate

1.2.x, 2.x

Sim

Funcionamento

O Doris Writer grava dados usando o StreamLoad, recurso nativo do Doris. Ele armazena em memória os dados lidos pelo reader, concatena-os em formato de texto e importa esse texto para o banco de dados Doris em lotes. Para mais detalhes, consulte a documentação oficial do Doris.

Preparação do ambiente ApsaraDB for OceanBase antes da sincronização de dados

Antes de usar o DataWorks para sincronizar dados com uma fonte de dados Doris, prepare o ambiente Doris. Isso garante que a tarefa de sincronização possa ser configurada e execute a transferência de dados conforme o esperado. As informações a seguir descrevem como preparar o ambiente Doris para sincronização com uma fonte de dados Doris.

Confirmação da versão do Doris

O Data Integration possui requisitos específicos quanto às versões do Doris. Verifique se a versão do cluster Doris de origem atende aos requisitos descritos na seção Supported Doris versions. Baixe a versão desejada no site oficial do Doris e instale-a.

Criação de conta e concessão de permissões

Crie uma conta para fazer login no banco de dados Doris e realizar as operações subsequentes. Defina uma senha para essa conta, pois ela será necessária nas conexões futuras ao banco de dados. Caso prefira utilizar o usuário root padrão do Doris, defina uma senha para ele, já que, por padrão, o usuário root não possui senha. Execute a seguinte instrução SQL no Doris para definir a senha:

SET PASSWORD FOR 'root' = PASSWORD('Password')

Configuração da conexão de rede para o Doris

Para usar o método StreamLoad na escrita de dados, acesse o endereço IP privado de um nó FE. Ao acessar o endereço IP público do nó FE, ocorre um redirecionamento para o endereço IP privado de um nó BE. Para mais informações sobre esse redirecionamento, consulte Problemas de operação de dados. Nesse cenário, estabeleça conexões de rede entre sua fonte de dados e um serverless resource group ou um grupo de recursos exclusivo do Data Integration, permitindo que o grupo de recursos acesse a fonte de dados via rede interna. Para saber como estabelecer a conexão de rede entre o banco de dados Doris e um grupo de recursos, consulte Network connectivity solutions.

Adição de uma fonte de dados

Antes de desenvolver uma tarefa de sincronização no DataWorks, adicione a fonte de dados necessária seguindo as instruções em Data source configuration. Consulte as descrições dos parâmetros no console do DataWorks para compreender o significado de cada parâmetro durante a adição da fonte de dados.

Observe os requisitos de configuração para os seguintes itens da fonte de dados Doris:

  • JdbcUrl: Insira a string de conexão JDBC, incluindo endereço IP, número da porta, banco de dados e parâmetros de conexão. Endereços IP públicos e privados são suportados. Ao usar um endereço IP público, certifique-se de que o grupo de recursos do Data Integration tenha acesso ao host onde sua instância Doris está localizada.

  • FE endpoint: Informe os endereços IP e portas dos nós FE. Se o cluster possuir múltiplos nós FE, insira vários endpoints separados por vírgulas, por exemplo, ip1:port1,ip2:port2. Durante o teste de conexão, o DataWorks verifica a conectividade com todos os FE endpoints especificados.

  • Username: Insira o nome de usuário para acessar o banco de dados Doris.

  • Password: Insira a senha correspondente ao nome de usuário.

  • Advanced Parameters: A fonte de dados Doris aceita diversos parâmetros avançados que estendem a configuração de conexão. Por exemplo, para ajustar o tempo limite de consulta do Java Database Connectivity (JDBC), adicione o parâmetro queryTimeout aos parâmetros avançados. O valor é definido em segundos; assim, queryTimeout=600 estabelece um tempo limite de 600 segundos. Após a definição, esse parâmetro é anexado automaticamente à string de conexão JDBC. O parâmetro queryTimeout tem efeito apenas no nível da fonte de dados. Não é possível configurar queryTimeout individualmente para um nó de sincronização em lote; faça a configuração centralizada na fonte de dados.

Desenvolvimento de uma tarefa de sincronização de dados

Para informações sobre o ponto de entrada e o procedimento de configuração de uma tarefa de sincronização, consulte os guias de configuração a seguir.

Apêndice: Código e parâmetros

Configuração de uma tarefa de sincronização em lote pelo editor de código

Para configurar uma tarefa de sincronização em lote usando o editor de código, defina os parâmetros relevantes no script conforme os requisitos unificados de formato de script. Para mais informações, consulte Script mode configuration. As informações a seguir descrevem os parâmetros obrigatórios para fontes de dados ao configurar uma tarefa de sincronização em lote via editor de código.

Exemplo de script do Reader

{
  "type": "job",
  "version": "2.0",// The version number. 
  "steps": [
    {
      "stepType": "doris",// The plug-in name. 
      "parameter": {
        "column": [// The names of the columns. 
          "id"
        ],
        "connection": [
          {
            "querySql": [
              "select a,b from join1 c join join2 d on c.id = d.id;"
            ],
            "datasource": ""// The name of the data source. 
          }
        ],
        "where": "",// The WHERE clause. 
        "splitPk": "",// The shard key. 
        "encoding": "UTF-8"// The encoding format. 
      },
      "name": "Reader",
      "category": "reader"
    },
    {
      "stepType": "stream",
      "parameter": {},
      "name": "Writer",
      "category": "writer"
    }
  ],
  "setting": {
    "errorLimit": {
      "record": "0"// The maximum number of dirty data records allowed. 
    },
    "speed": {
      "throttle": true,// Specifies whether to enable throttling. The value false indicates that throttling is disabled, and the value true indicates that throttling is enabled. The mbps parameter takes effect only when the throttle parameter is set to true. 
      "concurrent": 1,// The maximum number of parallel threads. 
      "mbps": "12"// The maximum transmission rate. Unit: MB/s. 
    }
  },
  "order": {
    "hops": [
      {
        "from": "Reader",
        "to": "Writer"
      }
    ]
  }
}

Parâmetros do script do Reader

Parâmetro

Descrição

Obrigatório

Valor padrão

datasource

Nome da fonte de dados. Deve corresponder exatamente ao nome da fonte de dados adicionada. É possível adicionar fontes de dados pelo editor de código.

Sim

Sem valor padrão

table

Nome da tabela de origem dos dados. Cada tarefa de sincronização lê dados de apenas uma tabela.

Para tabelas particionadas (sharded), use o parâmetro table para especificar as partições de leitura. Exemplos:

  • Configure um intervalo para ler dados de bancos e tabelas particionados. Por exemplo, 'table_[0-99]' indica leitura de 'table_0', 'table_1' e 'table_2', até 'table_99'.

  • Se suas tabelas possuírem sufixos numéricos de mesmo comprimento, como 'table_000', 'table_001' e 'table_002', até 'table_999', configure o parâmetro como '"table": ["table_00[0-9]", "table_0[10-99]", "table_[100-999]"]'.

Nota

O Doris Reader lê dados das colunas especificadas pelo parâmetro column nas partições definidas pelo parâmetro table. Caso uma partição ou coluna especificada não exista, a tarefa de sincronização falhará.

Sim

Sem valor padrão

column

Colunas a serem sincronizadas, descritas em um array JSON. Por padrão, todas as colunas são sincronizadas. Exemplo: ["*"].

  • Poda de colunas: selecione um subconjunto de colunas para exportação.

  • A ordem das colunas pode ser alterada, permitindo especificar colunas em uma sequência diferente daquela definida pelo schema da tabela de origem.

  • Configuração de constantes: siga a sintaxe SQL do Doris. Exemplo: ["id","table","1","'mingya.wmy'","'null'","to_char(a+1)","2,3","true"].

    • id: nome de uma coluna.

    • table: nome de uma coluna que contém palavras-chave reservadas.

    • 1: constante inteira.

    • 'mingya.wmy': constante string, delimitada por aspas simples (').

    • null:

      • " " representa uma string vazia.

      • null representa um valor nulo.

      • 'null' representa a string "null".

    • to_char(a+1): expressão de função usada para calcular o comprimento de uma string.

    • 2,3: constante de ponto flutuante.

    • true: valor booleano.

  • O parâmetro column deve especificar explicitamente todas as colunas de leitura. Não deixe este parâmetro vazio.

Sim

Sem valor padrão

splitPk

Para melhorar o desempenho de leitura, use o parâmetro splitPk para definir uma chave de fragmentação. O Data Integration usa essa chave para particionar os dados e executar tarefas concorrentes.

  • Recomenda-se definir o parâmetro splitPk com o nome da coluna de chave primária da tabela. Assim, os dados são distribuídos uniformemente entre diferentes shards, evitando concentração em shards específicos.

  • O parâmetro splitPk suporta fragmentação apenas para dados de tipos inteiros. Se definido com um campo de tipo não suportado, como string, ponto flutuante ou data, a configuração será ignorada e a leitura ocorrerá em thread única.

  • Se o parâmetro splitPk não for fornecido ou estiver vazio, a leitura será feita em thread única.

Não

Sem valor padrão

where

Condição de filtro. Em muitos cenários de negócio, deseja-se sincronizar apenas os dados do dia atual. Para isso, defina a condição where como gmt_create > $bizdate.

  • Use a cláusula WHERE para ler dados incrementais. Se o parâmetro where não for fornecido ou estiver vazio, o Doris Reader lerá todos os dados.

  • Não defina o parâmetro where como limit 10. Esse valor não está em conformidade com as restrições do Doris para a cláusula SQL WHERE.

Não

Sem valor padrão

querySql (parâmetro avançado, disponível apenas no editor de código)

Em alguns cenários, o parâmetro where pode não ser suficiente para descrever as condições de filtro desejadas. Use este parâmetro para especificar uma consulta SQL personalizada para filtragem. Ao configurar este parâmetro, o Data Integration ignora os parâmetros table, column, where e splitPk, usando a consulta personalizada para recuperar dados. Por exemplo, para juntar várias tabelas antes da sincronização, use uma consulta como select a,b from table_a join table_b on table_a.id = table_b.id. O parâmetro querySql tem prioridade sobre os parâmetros table, column, where e splitPk. O parâmetro datasource ainda é necessário para que o sistema recupere detalhes de conexão, como nome de usuário e senha.

Nota

O nome do parâmetro querySql diferencia maiúsculas de minúsculas. Por exemplo, querysql não terá efeito.

Não

Sem valor padrão

Exemplo de script do Writer

{
  "stepType": "doris",// The plug-in name. 
  "parameter":
  {
    "postSql":// The SQL statement that you want to execute after the synchronization task is run. 
    [],
    "preSql":
    [],// The SQL statement that you want to execute before the synchronization task is run. 
    "datasource":"doris_datasource",// The name of the data source. 
    "table": "doris_table_name",// The name of the table. 
    "column":
    [
      "id",
      "table_id",
      "table_no",
      "table_name",
      "table_status"
    ],
    "loadProps":{
      "column_separator": "\\x01",// The column delimiter of data in the CSV format.
      "line_delimiter": "\\x02"// The row delimiter of data in the CSV format.
    }
  },
  "name": "Writer",
  "category": "writer"
}

Parâmetros do script do Writer

Parâmetro

Descrição

Obrigatório

Valor padrão

datasource

Nome da fonte de dados. Deve corresponder exatamente ao nome da fonte de dados adicionada. É possível adicionar fontes de dados pelo editor de código.

Sim

Sem valor padrão

table

Nome da tabela de destino para escrita dos dados.

Sim

Sem valor padrão

column

Colunas de destino para escrita de dados. Especifique os nomes das colunas em um array, por exemplo, "column":["id","name","age"]. Para gravar dados em todas as colunas sequencialmente, use um asterisco () no array, por exemplo, "column":[""].

Sim

Sem valor padrão

preSql

Instruções SQL a serem executadas antes do início da tarefa de sincronização de dados. Na interface visual sem código, é possível executar apenas uma instrução SQL. No editor de código, é possível executar múltiplas instruções. Por exemplo, use essas instruções para limpar dados existentes na tabela.

Não

Sem valor padrão

postSql

Instrução SQL a ser executada após a conclusão da tarefa de sincronização. Por exemplo, defina este parâmetro com a instrução SQL usada para adicionar um timestamp. Na interface visual sem código, é possível executar apenas uma instrução SQL; no editor de código, é possível executar múltiplas instruções.

Não

Sem valor padrão

maxBatchRows

Número máximo de linhas que podem ser gravadas na tabela de destino por vez. Este parâmetro, juntamente com o parâmetro batchSize, determina a quantidade de registros de dados gravados por vez na tabela de destino. Sempre que os dados em cache atingirem o valor de qualquer um desses parâmetros, o writer iniciará a gravação na tabela de destino.

Não

500.000

batchSize

Quantidade máxima de dados que podem ser gravados na tabela de destino por vez. Este parâmetro, juntamente com o parâmetro maxBatchRows, determina a quantidade de registros de dados gravados por vez na tabela de destino. Sempre que os dados em cache atingirem o valor de qualquer um desses parâmetros, o writer iniciará a gravação na tabela de destino.

Não

104.857.600

maxRetries

Número máximo de tentativas permitidas após falha na gravação em lote de múltiplos registros na tabela de destino.

Não

3

labelPrefix

Prefixo do rótulo para cada lote de arquivos carregados. O rótulo final combina labelPrefix + UUID para garantir que cada importação seja idempotente, prevenindo duplicação de dados.

Não

datax_doris_writer_

loadProps

Parâmetros de solicitação para o StreamLoad, usados principalmente para configurar o formato dos dados de importação. Por padrão, os dados são importados no formato CSV. Se o parâmetro loadProps não for configurado, o formato CSV padrão será utilizado, com \t como delimitador de coluna e \n como delimitador de linha. A configuração padrão é a seguinte:

"loadProps": {
        "format":"csv",
        "column_separator": "\t",
        "line_delimiter": "\n"
    }

Para gravar dados no formato JSON, use as seguintes configurações:

"loadProps": {
    "format": "json"
}

Não

Sem valor padrão

Escrita de dados de tipos de agregação

É possível usar o Doris Writer para gravar dados de tipos de agregação, mas configurações adicionais são necessárias no editor de código.

Por exemplo, na tabela Doris abaixo, uuid é do tipo bitmap (tipo de agregação) e sex é do tipo HLL (tipo de agregação).

CREATE TABLE `example_table_1` (
  `user_id` int(11) NOT NULL,
  `date` varchar(10) NOT NULL,
  `city` varchar(10) NOT NULL,
  `uuid` bitmap BITMAP_UNION, -- Aggregation type
  `sex` HLL HLL_UNION  -- Aggregation type
) ENGINE=OLAP AGGREGATE KEY(`user_id`, `date`, `city`)
COMMENT 'OLAP' DISTRIBUTED BY HASH(`user_id`) BUCKETS 32

Os dados brutos a serem sincronizados consistem em cinco colunas, conforme mostrado abaixo. Os valores nas colunas uuid e sex são valores brutos (números comuns e strings), e não valores dos tipos bitmap ou HLL:

user_id,date,city,uuid,sex
0,T0S4Pb,abc,43,'54'
1,T0S4Pd,fsd,34,'54'
2,T0S4Pb,fa3,53,'64'
4,T0S4Pb,fwe,87,'64'
5,T0S4Pb,gbr,90,'56'
2,iY3GiHkLF,234,100,'54'

Valores brutos não podem ser gravados diretamente em colunas bitmap ou HLL. A conversão deve ser feita usando funções de agregação. O parâmetro columns do Doris Stream Load realiza essa conversão. A regra de mapeamento é a seguinte: as colunas do arquivo são mapeadas sequencialmente para os nomes de colunas que não contêm sinal de igual (=) em columns; as entradas que contêm sinal de igual (=) representam transformações por expressão (os valores das colunas de destino são calculados a partir das expressões) e não ocupam posições de colunas do arquivo.

Portanto, os mapeamentos entre as colunas do arquivo e as colunas da tabela neste exemplo são:

  • Colunas 1 a 3 do arquivo (user_id, date e city): gravadas diretamente nas colunas da tabela com os mesmos nomes.

  • Coluna 4 do arquivo (valor bruto de uuid): atribuída à coluna temporária de espaço reservado k1, convertida em bitmap pela expressão uuid=bitmap_hash(k1) e gravada na coluna da tabela uuid.

  • Coluna 5 do arquivo (valor bruto de sex): atribuída à coluna temporária de espaço reservado k2, convertida em valor HLL pela expressão sex=hll_hash(k2) e gravada na coluna da tabela sex.

k1 e k2 são nomes temporários de espaço reservado que não são gravados na tabela. Altere esses nomes conforme necessário, desde que os nomes referenciados nas expressões correspondam aos nomes das colunas de espaço reservado.

Ao usar o Doris Writer para gravar dados de tipos de agregação, especifique as colunas de escrita em writer.parameter.column e configure as regras de conversão acima em writer.parameter.loadProps.columns. uuid e sex em writer.parameter.column referem-se aos nomes dos campos de valor bruto nos registros de sincronização. Eles determinam apenas quais campos serão gravados e a ordem de escrita. Como um arquivo CSV não contém nomes de colunas, o Stream Load identifica as colunas pela posição. Portanto, use nomes personalizados para a quarta e quinta colunas no parâmetro columns (k1 e k2 neste exemplo).

Código de exemplo:

{
    "stepType": "doris",
    "parameter": {
        "datasource": "doris_datasource",
        "table": "example_table_1",
        "column": [
            "user_id",
            "date",
            "city",
            "uuid",
            "sex"
        ],
        "loadProps": {
            "format": "csv",
            "column_separator": "\\x01",
            "line_delimiter": "\\x02",
            "columns": "user_id,date,city,k1,uuid=bitmap_hash(k1),k2,sex=hll_hash(k2)"
        },
        "preSql": [],
        "postSql": []
    },
    "name": "Writer",
    "category": "writer"
}