A fonte de dados Doris permite ler e gravar dados em bancos de dados Doris para processamento de dados em grande escala. Este tópico descreve como usar o DataWorks para sincronizar dados com o Doris.
Tipos de dados suportados
Diferentes versões do Doris suportam diferentes tipos de dados e modelos de agregação. Para informações sobre todos os tipos de dados suportados em cada versão do Doris, consulte a documentação oficial do Doris. A tabela a seguir descreve os principais tipos de dados suportados.
|
Tipo de dados |
Modelo suportado |
Versão do Doris |
|
SMALLINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
INT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
BIGINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
LARGEINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
FLOAT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
DOUBLE |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
DECIMAL |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
DECIMALV3 |
Aggregate,Unique,Duplicate |
Versões posteriores a 1.2.1, 2.x |
|
DATE |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
DATETIME |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
DATEV2 |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
|
DATATIMEV2 |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
|
CHAR |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
VARCHAR |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
STRING |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
VARCHAR |
Aggregate,Unique,Duplicate |
1.1.x, 1.2.x, 2.x |
|
ARRAY |
Duplicate |
1.2.x, 2.x |
|
JSONB |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
|
HLL |
Aggregate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
BITMAP |
Aggregate |
0.x.x, 1.1.x, 1.2.x, 2.x |
|
QUANTILE_STATE |
Aggregate |
1.2.x, 2.x |
Preparar um ambiente do ApsaraDB for OceanBase antes da sincronização de dados
Antes de usar o DataWorks para sincronizar dados com uma fonte de dados Doris, prepare um ambiente Doris. Isso garante que a tarefa de sincronização de dados possa ser configurada e sincronize dados com a fonte de dados Doris conforme o esperado. As informações a seguir descrevem como preparar um ambiente Doris para sincronização de dados com uma fonte de dados Doris.
Criar uma conta e conceder permissões
Crie uma conta para fazer login no banco de dados Doris e realizar operações subsequentes. Defina uma senha para a conta, que será usada nas conexões subsequentes ao banco de dados Doris. Se preferir usar o usuário padrão root do Doris para fazer login no banco de dados, defina uma senha para o usuário root. 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')
Configurar a conexão de rede do Doris
Para usar o método StreamLoad para gravar dados, acesse o endereço IP privado de um nó FE. Se você acessar o endereço IP público do nó FE, será redirecionado para o endereço IP privado de um nó BE. Para mais informações sobre o redirecionamento, consulte Problemas de operação de dados. Nesse caso, estabeleça conexões de rede entre a fonte de dados e um grupo de recursos serverless ou um grupo de recursos exclusivo do Data Integration para permitir que o grupo de recursos acesse a fonte de dados pela rede interna. Para mais informações sobre como estabelecer uma conexão de rede entre o banco de dados Doris e um grupo de recursos, consulte Soluções de conectividade de rede.
Add a data source
Before you develop a synchronization task in DataWorks, you must add the required data source to DataWorks by following the instructions in Data source management. You can view parameter descriptions in the DataWorks console to understand the meanings of the parameters when you add a data source.
Observe os requisitos de configuração para os seguintes itens da fonte de dados Doris:
-
JdbcUrl: insira a string de conexão JDBC, que inclui o endereço IP, o número da porta, o banco de dados e os parâmetros de conexão. Endereços IP públicos e privados são suportados. Se usar um endereço IP público, certifique-se de que o grupo de recursos do Data Integration possa acessar o host onde a instância do Doris está localizada.
-
FE endpoint: insira os endereços IP e as portas dos nós FE. Se o cluster possuir vários 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 testa a conectividade de todos os endpoints FE 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.
Desenvolver uma tarefa de sincronização de dados
For information about the entry point for and the procedure of configuring a synchronization task, see the following configuration guides.
-
Para mais informações sobre o procedimento de configuração, consulte Configurar uma tarefa de sincronização em lote pela interface sem código e Configurar uma tarefa de sincronização em lote pelo editor de código.
-
Para informações sobre todos os parâmetros configurados e o código executado ao usar o editor de código para configurar uma tarefa de sincronização em lote, consulte Apêndice: Código e parâmetros.
Apêndice: Código e parâmetros
Configure a batch synchronization task by using the code editor
If you want to configure a batch synchronization task by using the code editor, you must configure the related parameters in the script based on the unified script format requirements. For more information, see Script mode configuration. The following information describes the parameters that you must configure for data sources when you configure a batch synchronization task by using the code editor.
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 |
O nome da fonte de dados. Deve ser igual ao nome da fonte de dados adicionada. Você pode adicionar fontes de dados pelo editor de código. |
Sim |
Sem valor padrão |
|
table |
O nome da tabela da qual deseja ler dados. Cada tarefa de sincronização pode ser usada para sincronizar dados de apenas uma tabela. Para uma tabela fragmentada, use o parâmetro table para especificar as partições das quais deseja ler dados. Exemplos:
Nota
O Doris Reader lê dados das colunas especificadas pelo parâmetro column nas partições especificadas pelo parâmetro table. Se uma partição ou coluna especificada não existir, a tarefa de sincronização falhará. |
Sim |
Sem valor padrão |
|
column |
As colunas que deseja sincronizar. As colunas são descritas em um array JSON. Por padrão, todas as colunas são sincronizadas. Por exemplo, use
|
Sim |
Sem valor padrão |
|
splitPk |
Para melhorar o desempenho de leitura, use o parâmetro splitPk para especificar 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 |
A condição de filtro. Em muitos cenários de negócio, pode ser necessário 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 de negócio, o parâmetro where pode não ser suficiente para descrever as condições de filtro desejadas. Use esse parâmetro para especificar uma consulta SQL personalizada para filtragem. Se configurar esse parâmetro, o Data Integration ignora os parâmetros table, column, where e splitPk, e usa 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 tem 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 |
O nome da fonte de dados. Deve ser igual ao nome da fonte de dados adicionada. Você pode adicionar fontes de dados pelo editor de código. |
Sim |
Sem valor padrão |
|
table |
O nome da tabela na qual deseja gravar dados. |
Sim |
Sem valor padrão |
|
column |
As colunas de destino nas quais gravar dados. Especifique os nomes das colunas em um array, por exemplo, |
Sim |
Sem valor padrão |
|
preSql |
As instruções SQL a serem executadas antes do início da tarefa de sincronização de dados. Na interface sem código, execute apenas uma instrução SQL. No editor de código, execute várias instruções SQL. Por exemplo, use essas instruções para limpar dados existentes da tabela. |
Não |
Sem valor padrão |
|
postSql |
A instrução SQL a ser executada após a execução da tarefa de sincronização. Por exemplo, defina esse parâmetro como a instrução SQL usada para adicionar um carimbo de data/hora. Execute apenas uma instrução SQL na interface sem código e várias instruções SQL no editor de código. |
Não |
Sem valor padrão |
|
maxBatchRows |
O número máximo de linhas que podem ser gravadas na tabela de destino por vez. Este parâmetro e o parâmetro batchSize determinam juntos o número de registros de dados que podem ser gravados na tabela de destino por vez. Cada vez que os dados em cache atingem o valor de qualquer um dos parâmetros, o writer começa a gravar os dados na tabela de destino. |
Não |
500000 |
|
batchSize |
A quantidade máxima de dados que podem ser gravados na tabela de destino por vez. Este parâmetro e o parâmetro maxBatchRows determinam juntos o número de registros de dados que podem ser gravados na tabela de destino por vez. Cada vez que os dados em cache atingem o valor de qualquer um dos parâmetros, o writer começa a gravar os dados na tabela de destino. |
Não |
104857600 |
|
maxRetries |
O número máximo de tentativas permitidas após falha ao gravar vários registros de dados na tabela de destino por vez. |
Não |
3 |
|
labelPrefix |
O prefixo de rótulo para cada lote de arquivos enviados. O rótulo final é uma combinação de |
Não |
datax_doris_writer_ |
|
loadProps |
Os parâmetros de solicitação do StreamLoad, usados principalmente para configurar o formato de importação de dados. 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á usado, com
Para gravar dados no formato JSON, use as seguintes configurações:
|
Não |
Sem valor padrão |
Gravar dados de tipos de agregação
Use o Doris Writer para gravar dados em colunas de tipos de agregação específicos. Ao usar o Doris Writer para gravar dados em colunas de tipos de agregação específicos, configure os parâmetros adicionais.
Por exemplo, na seguinte tabela do Doris, 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) NULL,
`date` varchar(10) NULL DEFAULT "10.5",
`city` varchar(10) NULL,
`uuid` bitmap BITMAP_UNION NULL, -- 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
Insira dados brutos na tabela:
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'
Ao usar o Doris Writer para gravar dados em uma coluna de tipo de agregação, especifique a coluna em writer.parameter.column e configure uma função de agregação em writer.parameter.loadProps.columns. Por exemplo, use a função de agregação bitmap_hash para a coluna uuid e a função de agregação hll_hash para a coluna sex.
Código de exemplo:
{
"stepType": "doris",// The plug-in name.
"writer":
{
"parameter":
{
"column":
[
"user_id",
"date",
"city",
"uuid",// The aggregation type is bitmap.
"sex"// The aggregation type is HLL.
],
"loadProps":
{
"format": "csv",
"column_separator": "\\x01",
"line_delimiter": "\\x02",
"columns": "user_id,date,city,k1,uuid=bitmap_hash(k1),k2,sex=hll_hash(k2)"// You must specify the aggregate functions.
},
"postSql":
[
"select count(1) from example_tbl_3"
],
"preSql":
[],
"datasource":"doris_datasource",// The name of the data source.
"table": "doris_table_name",// The name of the table.
}
"name": "Writer",
"category": "writer"
}
}