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
queryTimeoutaos parâmetros avançados. O valor é definido em segundos; assim,queryTimeout=600estabelece um tempo limite de 600 segundos. Após a definição, esse parâmetro é anexado automaticamente à string de conexão JDBC. O parâmetroqueryTimeouttem efeito apenas no nível da fonte de dados. Não é possível configurarqueryTimeoutindividualmente 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.
Para detalhes sobre o procedimento de configuração, consulte Configure a batch synchronization task by using the codeless UI e Configure a batch synchronization task by using the code editor.
Para informações sobre todos os parâmetros configurados e o código executado ao usar o editor de código na configuração de uma tarefa de sincronização em lote, consulte Appendix: Code and parameters.
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:
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:
|
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.
|
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
|
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 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, |
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 |
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
Para gravar dados no formato JSON, use as seguintes configurações:
|
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"
}