Data Integration le permite usar Doris Reader para leer datos de Doris y usar Doris Writer para escribir datos de tabla en Doris. Este tema describe las capacidades de DataWorks Data Integration en la sincronización de datos de Doris.
Versiones de Doris compatibles
Doris Writer usa MySQL Driver 5.1.47. Las versiones del kernel compatibles con el controlador se muestran a continuación. Para obtener más información sobre las capacidades del controlador, consulte la documentación oficial de Doris.
|
Versión de Doris |
Compatible |
|
0.x.x |
Sí |
|
1.1.x |
Sí |
|
1.2.x |
Sí |
|
2.x |
Sí |
Restricciones de uso
Data Integration admite la sincronización sin conexión de datos de Doris (lectura sin conexión y escritura sin conexión).
Tipos de datos compatibles
Las distintas versiones de Doris admiten diferentes tipos de datos y modelos de agregación. Para obtener información sobre todos los tipos de datos compatibles en cada versión de Doris, consulte la documentación oficial de Doris. La tabla que aparece a continuación describe los principales tipos de datos compatibles.
|
Tipo de datos |
Modelo compatible |
Versión de Doris |
Escritura sin conexión (Doris Writer) |
|
SMALLINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
INT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
BIGINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
LARGEINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
FLOAT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
DOUBLE |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
DECIMAL |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
DECIMALV3 |
Aggregate,Unique,Duplicate |
Versiones posteriores a 1.2.1, 2.x |
Sí |
|
DATE |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
DATETIME |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
DATEV2 |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
Sí |
|
DATETIMEV2 |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
Sí |
|
CHAR |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
VARCHAR |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
STRING |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
ARRAY |
Duplicate |
1.2.x, 2.x |
Sí |
|
JSON |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
Sí |
|
HLL |
Aggregate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
BITMAP |
Aggregate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Sí |
|
QUANTILE_STATE |
Aggregate |
1.2.x, 2.x |
Sí |
Funcionamiento
Doris Writer escribe datos mediante StreamLoad, que Doris admite de forma nativa. Doris Writer almacena en caché en memoria los datos que lee el lector, concatena los datos en texto y, a continuación, importa el texto a la base de datos de Doris en lotes. Para obtener más información, consulte la documentación oficial de Doris.
Prepare un entorno de ApsaraDB for OceanBase antes de sincronizar datos
Antes de usar DataWorks para sincronizar datos con un origen de datos de Doris, debe preparar un entorno de Doris. Esto garantiza que la tarea de sincronización de datos pueda configurarse y sincronizar datos con el origen de datos de Doris según lo esperado. La información que aparece a continuación describe cómo preparar un entorno de Doris para la sincronización de datos con un origen de datos de Doris.
Confirme la versión de Doris
Data Integration tiene requisitos sobre las versiones de Doris. Compruebe si la versión del clúster de Doris desde el que desea sincronizar datos cumple los requisitos según la sección Supported Doris versions. Descargue una versión específica desde el sitio web oficial de Doris e instálela.
Cree una cuenta y conceda permisos
Cree una cuenta que se utilizará para iniciar sesión en la base de datos de Doris en operaciones posteriores. Especifique una contraseña para la cuenta para las conexiones posteriores a la base de datos de Doris. Si desea usar el usuario root predeterminado de Doris para iniciar sesión en la base de datos de Doris, especifique una contraseña para el usuario root. De forma predeterminada, el usuario root no tiene contraseña. Ejecute una sentencia SQL en Doris para especificar la contraseña:
SET PASSWORD FOR 'root' = PASSWORD('Password')
Configure la conexión de red para Doris
Para usar el método StreamLoad para escribir datos, debe acceder a la dirección IP privada de un nodo FE. Si accede a la dirección IP pública del nodo FE, se le redirige a la dirección IP privada de un nodo BE. Para obtener más información sobre la redirección, consulte Problemas de operaciones de datos. En este caso, debe establecer conexiones de red entre su origen de datos y un serverless resource group o un resource group exclusivo para Data Integration para que el resource group pueda acceder al origen de datos a través de una red interna. Para obtener más información sobre cómo establecer una conexión de red entre la base de datos de Doris y un resource group, consulte Network connectivity solutions.
Agregue un origen de datos
Antes de desarrollar una tarea de sincronización en DataWorks, agregue el origen de datos obligatorio a DataWorks siguiendo las instrucciones de Data source configuration. Consulte las descripciones de los parámetros en la consola de DataWorks para comprender el significado de los parámetros cuando agregue un origen de datos.
Tome nota de los requisitos de configuración de los elementos de configuración que se indican a continuación para el origen de datos de Doris:
JdbcUrl: Introduzca la cadena de conexión JDBC, que incluye la dirección IP, el número de puerto, la base de datos y los parámetros de conexión. Se admiten direcciones IP públicas y privadas. Si usa una dirección IP pública, asegúrese de que el resource group de Data Integration pueda acceder al host donde se encuentra la instancia de Doris.
FE endpoint: Introduzca las direcciones IP y los puertos de los nodos FE. Si su clúster tiene varios nodos FE, introduzca varios endpoints separados por comas, por ejemplo,
ip1:port1,ip2:port2. Cuando pruebe la conexión, DataWorks prueba la conectividad con todos los FE endpoints especificados.Username: Introduzca el nombre de usuario para acceder a la base de datos de Doris.
Password: Introduzca la contraseña correspondiente al nombre de usuario.
Advanced Parameters: El origen de datos de Doris admite varios parámetros avanzados que amplían la configuración de conexión. Por ejemplo, para ajustar el tiempo de espera de consulta de Java Database Connectivity (JDBC), agregue el parámetro
queryTimeouta los parámetros avanzados. El valor se especifica en segundos yqueryTimeout=600establece el tiempo de espera en 600 segundos. Después de que establezca este parámetro, se anexa automáticamente a la cadena de conexión JDBC.queryTimeoutsolo tiene efecto en el origen de datos. No puede configurarqueryTimeoutpor separado para un nodo de sincronización por lotes. Configúrelo de forma centralizada en el origen de datos.
Desarrolle una tarea de sincronización de datos
Para obtener información sobre el punto de entrada y el procedimiento para configurar una tarea de sincronización, consulte las guías de configuración que aparecen a continuación.
Para obtener más información sobre el procedimiento de configuración, consulte Configure a batch synchronization task by using the codeless UI y Configure a batch synchronization task by using the code editor.
Para obtener información sobre todos los parámetros que se configuran y el código que se ejecuta cuando usa el editor de código para configurar una tarea de sincronización por lotes, consulte Appendix: Code and parameters.
Anexo: Código y parámetros
Configure una tarea de sincronización por lotes mediante el editor de código
Si desea configurar una tarea de sincronización por lotes mediante el editor de código, configure los parámetros relacionados en el script según los requisitos de formato unificado de script. Para obtener más información, consulte Script mode configuration. La información que aparece a continuación describe los parámetros que debe configurar para los orígenes de datos cuando configure una tarea de sincronización por lotes mediante el editor de código.
Ejemplo de script de 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 del script de Reader
|
Parámetro |
Descripción |
Obligatorio |
Valor predeterminado |
|
datasource |
El nombre del origen de datos. Debe ser igual al nombre del origen de datos agregado. Puede agregar orígenes de datos mediante el editor de código. |
Sí |
Sin valor predeterminado |
|
table |
El nombre de la tabla de la que desea leer datos. Cada tarea de sincronización se puede usar para sincronizar datos de una sola tabla. Para una tabla fragmentada, puede usar el parámetro table para especificar las particiones de las que desea leer datos. Ejemplos:
Nota
Doris Reader lee los datos de las columnas especificadas por el parámetro column en las particiones especificadas por el parámetro table. Si una partición o columna especificada no existe, la tarea de sincronización falla. |
Sí |
Sin valor predeterminado |
|
column |
Las columnas que desea sincronizar. Las columnas se describen en una matriz JSON. De forma predeterminada, se sincronizan todas las columnas. Por ejemplo, use
|
Sí |
Sin valor predeterminado |
|
splitPk |
Para mejorar el rendimiento de lectura, puede usar el parámetro splitPk para especificar una clave de fragmentación. Data Integration usa esta clave para particionar los datos y ejecutar tareas simultáneas.
|
No |
Sin valor predeterminado |
|
where |
La condición de filtro. En muchos escenarios de negocio, quizá desee sincronizar solo los datos del día actual. Para ello, puede especificar la condición where como
|
No |
Sin valor predeterminado |
|
querySql (parámetro avanzado, disponible solo en el editor de código) |
En algunos escenarios de negocio, el parámetro where puede no ser suficiente para describir las condiciones de filtro deseadas. Puede usar este parámetro para especificar una consulta SQL personalizada para filtrar. Si configura este parámetro, Data Integration ignora los parámetros table, column, where y splitPk, y usa la consulta personalizada para recuperar datos. Por ejemplo, para unir varias tablas antes de la sincronización, puede usar una consulta como Nota
El nombre del parámetro querySql distingue mayúsculas y minúsculas. Por ejemplo, querysql no surte efecto. |
No |
Sin valor predeterminado |
Ejemplo de script de 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 del script de Writer
|
Parámetro |
Descripción |
Obligatorio |
Valor predeterminado |
|
datasource |
El nombre del origen de datos. Debe ser igual al nombre del origen de datos agregado. Puede agregar orígenes de datos mediante el editor de código. |
Sí |
Sin valor predeterminado |
|
table |
El nombre de la tabla de la que desea leer datos. |
Sí |
Sin valor predeterminado |
|
column |
Las columnas de destino donde se escribirán los datos. Especifique los nombres de columna en una matriz, por ejemplo, |
Sí |
Sin valor predeterminado |
|
preSql |
Las sentencias SQL que se ejecutarán antes de que inicie la tarea de sincronización de datos. En la interfaz sin código, solo puede ejecutar una sentencia SQL. En el editor de código, puede ejecutar varias sentencias SQL. Por ejemplo, puede usar estas sentencias para limpiar los datos existentes de la tabla. |
No |
Sin valor predeterminado |
|
postSql |
La sentencia SQL que desea ejecutar después de que se ejecute la tarea de sincronización. Por ejemplo, puede establecer este parámetro en la sentencia SQL que se usa para agregar una marca de tiempo. Solo puede ejecutar una sentencia SQL en la interfaz sin código y varias sentencias SQL en el editor de código. |
No |
Sin valor predeterminado |
|
maxBatchRows |
El número máximo de filas que puede escribir en la tabla de destino cada vez. Tanto este parámetro como el parámetro batchSize determinan la cantidad de registros de datos que puede escribir en la tabla de destino cada vez. Cada vez que los datos almacenados en caché alcanzan el valor de cualquiera de los dos parámetros, el escritor comienza a escribir los datos en la tabla de destino. |
No |
500000 |
|
batchSize |
La cantidad máxima de datos que puede escribir en la tabla de destino cada vez. Tanto este parámetro como el parámetro maxBatchRows determinan la cantidad de registros de datos que puede escribir en la tabla de destino cada vez. Cada vez que los datos almacenados en caché alcanzan el valor de cualquiera de los dos parámetros, el escritor comienza a escribir los datos en la tabla de destino. |
No |
104857600 |
|
maxRetries |
El número máximo de reintentos permitidos después de una operación con errores al escribir varios registros de datos en la tabla de destino a la vez. |
No |
3 |
|
labelPrefix |
El prefijo de etiqueta para cada lote de archivos cargados. La etiqueta final es una combinación de |
No |
datax_doris_writer_ |
|
loadProps |
Los parámetros de solicitud para StreamLoad, que se usan principalmente para configurar el formato de importación de datos. De forma predeterminada, los datos se importan en formato CSV. Si no se configura el parámetro loadProps, se usa el formato CSV predeterminado, con
Si desea escribir datos en formato JSON, use la configuración que se muestra a continuación:
|
No |
Sin valor predeterminado |
Escriba datos de tipos agregados
Puede usar Doris Writer para escribir datos de tipos agregados, pero debe aplicar configuraciones adicionales en el editor de código.
Por ejemplo, en la tabla de Doris que se muestra a continuación, uuid es de tipo bitmap (tipo de agregación) y sex es de tipo HLL (tipo de agregación).
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
Los datos sin procesar que se sincronizarán constan de cinco columnas, como se muestra a continuación. Los valores de las columnas uuid y sex son valores sin procesar (números y cadenas comunes) en lugar de valores de tipo bitmap o 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'
Los valores sin procesar no pueden escribirse directamente en columnas bitmap o HLL. Los valores deben convertirse mediante funciones de agregación. El parámetro columns de Doris Stream Load puede completar la conversión. La regla de asignación es la siguiente: las columnas del archivo se asignan en secuencia a los nombres de columna que no contienen un signo igual (=) en columns, y las entradas que contienen un signo igual (=) son transformaciones de expresión (los valores de las columnas de destino se calculan a partir de las expresiones) y no ocupan posiciones de columna del archivo.
Por lo tanto, las asignaciones entre las columnas del archivo y las columnas de la tabla en este ejemplo se indican a continuación:
Las columnas 1 a 3 del archivo (user_id, date y city): se escriben directamente en las columnas de la tabla con los mismos nombres.
La columna 4 del archivo (el valor sin procesar de uuid): se asigna a la columna de marcador de posición temporal k1, se convierte en un bitmap mediante la expresión
uuid=bitmap_hash(k1)y se escribe en la columna de tabla uuid.La columna 5 del archivo (el valor sin procesar de sex): se asigna a la columna de marcador de posición temporal k2, se convierte en un valor HLL mediante la expresión
sex=hll_hash(k2)y se escribe en la columna de tabla sex.
k1 y k2 son nombres de marcador de posición temporales que no se escriben en la tabla. Puede cambiar los nombres a cualquier otro nombre, siempre que los nombres referenciados en las expresiones coincidan con los nombres de las columnas de marcador de posición.
Cuando use Doris Writer para escribir datos de tipos agregados, especifique las columnas que se escribirán en writer.parameter.column y configure las reglas de conversión anteriores en writer.parameter.loadProps.columns. uuid y sex en writer.parameter.column son los nombres de los campos de valores sin procesar en los registros de sincronización. Solo determinan los campos que se escribirán y el orden de escritura. Un archivo CSV no contiene nombres de columna y Stream Load identifica las columnas por posición. Por lo tanto, puede usar nombres personalizados para las columnas cuarta y quinta en el parámetro columns (k1 y k2 en este ejemplo).
Código de ejemplo:
{
"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"
}