Los orígenes de datos de Elasticsearch proporcionan canales bidireccionales de lectura y escritura para sincronizar datos entre DataWorks y Elasticsearch.
Ámbito de aplicación
Los resource group públicos son compatibles con Elasticsearch 5.x. Por su parte, Serverless resource groups (recommended) y los resource group dedicados para integración de datos admiten las versiones 5.x, 6.x, 7.x y 8.x de Elasticsearch.
Para obtener más información sobre los resource group serverless, consulte Use a Serverless resource group.
Para conocer los detalles de los resource group dedicados para integración de datos, consulte Use a dedicated resource group for data integration.
Elasticsearch es un motor de búsqueda empresarial de código abierto desarrollado bajo la licencia Apache. Está basado en Lucene y ofrece capacidades de búsqueda distribuida y análisis de datos. A continuación se muestra una tabla que relaciona los conceptos principales de Elasticsearch con sus equivalentes en bases de datos relacionales.
|
Elasticsearch |
Base de datos relacional |
|
Elasticsearch (instancia) |
base de datos relacional (instancia) |
|
index |
base de datos |
|
type |
tabla |
|
document |
fila |
|
field |
columna |
Una instancia de Elasticsearch puede contener varios índices. Cada índice almacena varios tipos, cada tipo contiene varios documentos y cada documento se compone de varios campos. El plugin Elasticsearch Writer utiliza la API REST de Elasticsearch para escribir datos por lotes en este servicio.
Versiones compatibles
DataWorks admite las versiones 5.x, 6.x, 7.x y 8.x de Alibaba Cloud Elasticsearch, pero no es compatible con instalaciones de Elasticsearch administradas por el usuario.
Límites
A continuación se describen los límites aplicables a las lecturas y escrituras sin conexión en Elasticsearch:
Elasticsearch Reader obtiene la información de los fragmentos del servidor para sincronizar los datos. Todos los fragmentos deben estar activos durante la sincronización para evitar inconsistencias en los datos.
En Elasticsearch 6.x o versiones posteriores, puede usar un serverless resource group (recommended) o un exclusive resource group for Data Integration.
No es posible sincronizar los campos de tipo
scaled_float.Los índices no se pueden sincronizar si los nombres de sus campos contienen la palabra clave
$ref.
Tipos de campo compatibles
|
Tipo |
Lectura sin conexión |
Escritura sin conexión |
Escritura en tiempo real |
|
binary |
Compatible |
Compatible |
Compatible |
|
boolean |
Compatible |
Compatible |
Compatible |
|
keyword |
Compatible |
Compatible |
Compatible |
|
constant_keyword |
No compatible |
No compatible |
No compatible |
|
wildcard |
No compatible |
No compatible |
No compatible |
|
long |
Compatible |
Compatible |
Compatible |
|
integer |
Compatible |
Compatible |
Compatible |
|
short |
Compatible |
Compatible |
Compatible |
|
byte |
Compatible |
Compatible |
Compatible |
|
double |
Compatible |
Compatible |
Compatible |
|
float |
Compatible |
Compatible |
Compatible |
|
half_float |
No compatible |
No compatible |
No compatible |
|
scaled_float |
No compatible |
No compatible |
No compatible |
|
unsigned_long |
No compatible |
No compatible |
No compatible |
|
date |
Compatible |
Compatible |
Compatible |
|
date_nanos |
No compatible |
No compatible |
No compatible |
|
alias |
No compatible |
No compatible |
No compatible |
|
object |
Compatible |
Compatible |
Compatible |
|
flattened |
No compatible |
No compatible |
No compatible |
|
nested |
Compatible |
Compatible |
Compatible |
|
join |
No compatible |
No compatible |
No compatible |
|
integer_range |
Compatible |
Compatible |
Compatible |
|
float_range |
Compatible |
Compatible |
Compatible |
|
long_range |
Compatible |
Compatible |
Compatible |
|
double_range |
Compatible |
Compatible |
Compatible |
|
date_range |
Compatible |
Compatible |
Compatible |
|
ip_range |
No compatible |
Compatible |
Compatible |
|
ip |
Compatible |
Compatible |
Compatible |
|
version |
Compatible |
Compatible |
Compatible |
|
murmur3 |
No compatible |
No compatible |
No compatible |
|
aggregate_metric_double |
No compatible |
No compatible |
No compatible |
|
histogram |
No compatible |
No compatible |
No compatible |
|
text |
Compatible |
Compatible |
Compatible |
|
annotated-text |
No compatible |
No compatible |
No compatible |
|
completion |
Compatible |
No compatible |
No compatible |
|
search_as_you_type |
No compatible |
No compatible |
No compatible |
|
token_count |
Compatible |
No compatible |
No compatible |
|
dense_vector |
No compatible |
No compatible |
No compatible |
|
rank_feature |
No compatible |
No compatible |
No compatible |
|
rank_features |
No compatible |
No compatible |
No compatible |
|
geo_point |
Compatible |
Compatible |
Compatible |
|
geo_shape |
Compatible |
Compatible |
Compatible |
|
point |
No compatible |
No compatible |
No compatible |
|
shape |
No compatible |
No compatible |
No compatible |
|
percolator |
No compatible |
No compatible |
No compatible |
|
string |
Compatible |
Compatible |
Compatible |
Funcionamiento
Elasticsearch Reader funciona de la siguiente manera:
Utiliza la API _searchscrollslice de Elasticsearch. Para ello, combina la función scroll slice con la fragmentación multihilo de Data Integration.
Convierte los tipos de datos según la configuración de mapeo definida en Elasticsearch.
Para obtener más información, consulte la documentación oficial de Elasticsearch.
Elasticsearch Reader obtiene la información de los fragmentos del servidor para sincronizar los datos. Para evitar inconsistencias, asegúrese de que todos los fragmentos del servidor permanezcan activos durante la sincronización.
Configuración básica
En entornos de producción, elimine los comentarios del código antes de ejecutar el trabajo.
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // The error limit. The job stops if the error count exceeds this value.
},
"jvmOption":"",
"speed":{
"concurrent":3, // The number of concurrent threads.
"throttle":true,
"mbps":"12" // The maximum speed in MB/s.
}
},
"steps":[
{
"category":"reader",
"name":"Reader",
"parameter":{
"column":[ // The columns to read.
"id",
"name"
],
"endpoint":"", // The service endpoint.
"index":"", // The source index.
"password":"", // The password for authentication.
"scroll":"", // The scroll context duration.
"search":"", // The query body, same as the `query` object in an Elasticsearch `_search` request.
"type":"default",
"username":"" // The username for authentication.
},
"stepType":"elasticsearch"
},
{
"stepType": "elasticsearch",
"parameter": {
"column": [ // The columns to write.
{
"name": "id",
"type": "integer"
},
{
"name": "name",
"type": "text"
}
],
"index": "test", // The destination index.
"indexType": "", // The index type. Leave this empty for Elasticsearch v7.x or later.
"actionType": "index", // The write mode.
"cleanup": false, // Specifies whether to recreate the index before writing.
"datasource": "test", // The data source name.
"primaryKeyInfo": { // The primary key configuration.
"fieldDelimiterOrigin": ",",
"column": [
"id"
],
"type": "specific",
"fieldDelimiter": ","
},
"dynamic": false, // Specifies whether to enable dynamic mapping.
"batchSize": 1024 // The number of documents to write per batch.
},
"name": "Writer",
"category": "writer"
}
],
"type":"job",
"version":"2.0" // The version number.
}
Funciones avanzadas
-
Extracción completa de documentos
Es posible extraer todo el contenido de un documento de Elasticsearch hacia un solo campo. Para conocer los detalles de esta configuración, consulte Scenario 1: Full document pull.
-
Transformación de datos semiestructurados a estructurados
Categoría
Descripción
Referencias
Contexto
Los datos de Elasticsearch suelen tener campos dinámicos y estructuras muy anidadas. Esta función transforma los datos semiestructurados en datos estructurados para facilitar su procesamiento y almacenamiento posterior.
—
Funcionamiento
La solución analiza sintácticamente los datos JSON de Elasticsearch, aplana las estructuras anidadas mediante expresiones de ruta y asigna los resultados a tablas estructuradas. Los documentos complejos se pueden dividir en varias tablas según sea necesario.
—
Soluciones
Para datos JSON anidados, utilice una ruta para acceder a propiedades específicas.
-
property
-
property.sub-property
-
property[0].sub-property
En relaciones de uno a varios, despliegue una propiedad de tipo arreglo para dividir sus elementos en varias filas.
property[*].sub-property
Combine y deduplique los elementos de un arreglo de cadenas en una sola propiedad.
property[]
Agrupe varias propiedades en una sola.
property1,property2
Seleccione la primera propiedad distinta de nulo en una lista.
property1|property2
-
Agregar un origen de datos
Antes de desarrollar una tarea de sincronización en DataWorks, agregue el origen de datos correspondiente siguiendo las instrucciones de Data source configuration. Consulte las descripciones de parámetros en la consola de DataWorks para comprender el significado de cada parámetro al agregar un origen de datos.
Tareas de sincronización de datos
Para conocer el punto de entrada y el procedimiento de configuración de una tarea de sincronización, consulte las siguientes guías.
Tarea de sincronización sin conexión (tabla única)
Consulte Configure a task in the codeless UI o Configure a task in the code editor.
Para ver la referencia completa de parámetros y un script de ejemplo, consulte Appendix 1: Script demo and parameter descriptions.
Tarea de escritura en tiempo real (tabla única)
Consulte Configure a real-time synchronization task in DataStudio (Legacy).
Sincronización en tiempo real de toda la base de datos
Consulte Configure a real-time full-database synchronization task.
Apéndice 1: Script de ejemplo y parámetros
Configurar 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, defina los parámetros correspondientes en el script respetando los requisitos unificados de formato. Para obtener más información, consulte Script mode configuration. A continuación se describen los parámetros que debe configurar para los orígenes de datos al utilizar el editor de código.
Script de ejemplo de Reader
{
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
},
"setting":{
"errorLimit":{
"record":"0" // The number of error records allowed.
},
"jvmOption":"",
"speed":{
"concurrent":3,
"throttle":false
}
},
"steps":[
{
"category":"reader",
"name":"Reader",
"parameter":{
"column":[ // The columns to read.
"id",
"name"
],
"endpoint":"http://es-cn-xxx.elasticsearch.aliyuncs.com:9200", // The endpoint.
"index":"aliyun_es_xx", // The index.
"password":"*******", // The password.
"multiThread":true,
"scroll":"5m", // The scroll context duration.
"pageSize":5000,
"connTimeOut":600000,
"readTimeOut":600000,
"retryCount":30,
"retrySleepTime":"10000",
"search":{
"range":{
"gmt_modified":{
"gte":0
}
}
}, // Query parameter. The content is identical to the query body of the Elasticsearch _search API.
"type":"doc",
"username":"aliyun_di" // The username.
},
"stepType":"elasticsearch"
},
{
"category":"writer",
"name":"Writer",
"parameter":{ },
"stepType":"stream"
}
],
"type":"job",
"version":"2.0" // The version number.
}
Parámetros del script de Reader
|
Parámetro |
Descripción |
Obligatorio |
Predeterminado |
|
datasource |
El nombre de un origen de datos existente en DataWorks. |
Sí |
Ninguna |
|
index |
El nombre del index en Elasticsearch. |
Sí |
Ninguna |
|
type |
El nombre del type de un index en Elasticsearch. |
No |
Nombre del índice |
|
search |
El cuerpo de la consulta para Elasticsearch. |
Sí |
Ninguna |
|
pageSize |
La cantidad de registros que se leen por página. |
No |
100 |
|
scroll |
Define cuánto tiempo se mantiene activo el contexto de scroll de Elasticsearch para la paginación.
|
Sí |
Ninguna |
|
strictMode |
Indica si se habilita el modo estricto. Si se establece en |
No |
true |
|
sort |
El campo por el cual se ordenan los resultados. |
No |
Ninguna |
|
retryCount |
La cantidad de veces que se reintenta una operación con errores. |
No |
30 |
|
connTimeOut |
El tiempo de espera de conexión del cliente, en milisegundos. |
No |
600,000 |
|
readTimeOut |
El tiempo de espera de lectura del cliente, en milisegundos. |
No |
600,000 |
|
multiThread |
Indica si se usan varios hilos para las solicitudes HTTP. |
No |
true |
|
preemptiveAuth |
Indica si se utiliza autenticación preventiva para las solicitudes HTTP. |
No |
false |
|
retrySleepTime |
El intervalo entre reintentos, en milisegundos. |
No |
10,000 |
|
discovery |
Indica si se habilita la detección de nodos.
|
No |
false |
|
compression |
Indica si se usa GZIP para comprimir el cuerpo de la solicitud. Si utiliza GZIP, debe habilitar la configuración http.compression en el nodo de Elasticsearch. |
No |
false |
|
dateFormat |
Si un campo por sincronizar es de tipo fecha y el mapeo no especifica un formato, configure el parámetro dateFormat. Esta configuración debe incluir todos los formatos de los campos de tipo fecha que se van a sincronizar. Ejemplo: |
No |
Ninguna |
|
full |
Indica si se sincroniza todo el contenido del documento como un único campo hacia el destino. Para obtener más información, consulte Scenario 1: Full data pull. |
No |
Ninguna |
|
multi |
Una función avanzada con cinco casos de uso. Cuenta con dos subpropiedades: |
No |
Ninguna |
Script de ejemplo de Writer
{
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle":true, // If throttle is false, the mbps parameter is ignored and throttling is disabled. If throttle is true, throttling is enabled.
"concurrent":1, // The job concurrency.
"mbps":"12" // The maximum rate in Mbps (1 Mbps = 1 MB/s).
}
},
"steps": [
{
"category": "reader",
"name": "Reader",
"parameter": {
},
"stepType": "stream"
},
{
"category": "writer",
"name": "Writer",
"parameter": {
"datasource":"xxx",
"index": "test-1",
"type": "default",
"cleanup": true,
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"discovery": false,
"primaryKeyInfo":{
"type":"pk",
"fieldDelimiter":",",
"column":[]
},
"batchSize": 1000,
"dynamic":false,
"esPartitionColumn":[
{
"name":"col1",
"comment":"xx",
"type":"STRING"
}
],
"column": [
{
"name": "pk",
"type": "id"
},
{
"name": "col_ip",
"type": "ip"
},
{
"name": "col_array",
"type": "long",
"array": true
},
{
"name": "col_double",
"type": "double"
},
{
"name": "col_long",
"type": "long"
},
{
"name": "col_integer",
"type": "integer"
},
{
"name": "col_keyword",
"type": "keyword"
},
{
"name": "col_text",
"type": "text",
"analyzer": "ik_max_word",
"other_params":
{
"doc_values": false
}
},
{
"name": "col_geo_point",
"type": "geo_point"
},
{
"name": "col_date",
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
{
"name": "col_nested1",
"type": "nested"
},
{
"name": "col_nested2",
"type": "nested"
},
{
"name": "col_object1",
"type": "object"
},
{
"name": "col_object2",
"type": "object"
},
{
"name": "col_integer_array",
"type": "integer",
"array": true
},
{
"name": "col_geo_shape",
"type": "geo_shape",
"tree": "quadtree",
"precision": "10m"
}
]
},
"stepType": "elasticsearch"
}
],
"type": "job",
"version": "2.0"
}
Es posible que una instancia de Elasticsearch en un entorno VPC no sea accesible desde el resource group predeterminado. Para garantizar la conectividad durante la sincronización de datos, utilice un serverless resource group (recommended) o un resource group exclusivo para Data Integration que se conecte a la VPC. Para obtener más información sobre cómo agregar resource groups, consulte Serverless resource group.
Parámetros del script de writer
|
Parámetro |
Descripción |
Obligatorio |
Predeterminado |
|
datasource |
Nombre del origen de datos de Elasticsearch. Si el origen de datos no existe en DataWorks, cree uno primero. Para obtener más información, consulte Configure an Elasticsearch data source. |
Sí |
Ninguna |
|
index |
Nombre del índice en Elasticsearch. |
Sí |
Ninguna |
|
type |
Tipo del índice en Elasticsearch. |
No |
default |
|
cleanup |
Indica si se elimina y se vuelve a crear el índice de destino antes de la escritura.
|
No |
false |
|
batchSize |
Número de documentos por cada escritura por lotes en Elasticsearch. |
No |
1,000 |
|
trySize |
Número de reintentos después de una escritura con errores en Elasticsearch. |
No |
30 |
|
timeout |
Periodo de tiempo de espera del cliente. |
No |
600,000 |
|
discovery |
Indica si se habilita la detección de nodos para la tarea.
|
No |
false |
|
compression |
Indica si se habilita la compresión para las solicitudes HTTP. |
No |
true |
|
multiThread |
Indica si se usan varios subprocesos para las solicitudes HTTP. |
No |
true |
|
ignoreWriteError |
Indica si se ignoran los errores de escritura. Si se establece en true, el sistema omite la operación con errores y continúa escribiendo los datos posteriores. |
No |
false |
|
ignoreParseError |
Indica si se ignoran los errores de análisis sintáctico del formato de datos para continuar escribiendo los datos posteriores. |
No |
true |
|
alias |
Un alias de Elasticsearch funciona como una vista de base de datos. Por ejemplo, si crea un alias llamado my_index_alias para el índice my_index, las operaciones sobre my_index_alias se aplican a my_index. Si se configura, se crea un alias para el índice especificado una vez que finaliza la importación de datos. |
No |
Ninguna |
|
aliasMode |
Modo del alias después de que finaliza la importación de datos. Los valores válidos son append y exclusive.
El sistema resuelve el alias al nombre real del índice. Puede usar alias para la migración de índices, consultas unificadas en varios índices e implementar una funcionalidad similar a la de una vista. |
No |
append |
|
settings |
Configuración de creación del índice, con el mismo formato que la configuración oficial de Elasticsearch. |
No |
Ninguna |
|
column |
El parámetro column configura los campos de un documento. Para cada campo, puede establecer propiedades básicas como name y type, además de propiedades avanzadas como Analyzer, Format y Array. A continuación se muestran los tipos de campo compatibles con Elasticsearch:
Notas sobre los tipos de columna:
Para configurar atributos de Elasticsearch distintos de type en un campo de column, use el parámetro
Si desea escribir los datos de origen en Elasticsearch como una matriz, analice sintácticamente los datos de origen en formato JSON o mediante un delimitador específico. Para obtener más información, consulte Appendix 2: Write data to Elasticsearch as an array. |
Sí |
Ninguna |
|
dynamic |
Indica si se usa la asignación dinámica de Elasticsearch para agregar automáticamente asignaciones de nuevos campos en un documento.
El type predeterminado en Elasticsearch 7.x es _doc. Si utiliza asignaciones automáticas, establezca el tipo en _doc y esVersion en Debe cambiar al modo de script y agregar el parámetro de versión: Importante
Si encuentra errores de asignación de campos, habilite este parámetro para intentar resolver el problema. Sin embargo, esto podría provocar que los tipos de campo no coincidan con lo esperado o generar anomalías en los datos. Evalúe los riesgos para su estructura de datos antes de habilitarlo. |
No |
false |
|
actionType |
Especifica el tipo de acción de escritura. Los valores válidos son index y update:
|
No |
index |
|
primaryKeyInfo |
Especifica cómo determinar la clave principal del documento en Elasticsearch.
|
Sí |
specific |
|
esPartitionColumn |
Indica si se habilitan las escrituras particionadas mediante la configuración del parámetro de enrutamiento de Elasticsearch.
|
No |
false |
|
enableWriteNull |
Indica si se escriben los campos nulos del origen en Elasticsearch. Valores válidos:
|
No |
true |
Apéndice 2: Escritura de matrices en Elasticsearch
Puede escribir los datos de origen en Elasticsearch como una matriz mediante dos métodos.
-
Analizar sintácticamente los datos en formato JSON
Por ejemplo, si los datos de origen son
"[1,2,3,4,5]", analícelos estableciendo json_array=true. Posteriormente, se escriben en Elasticsearch como una matriz."parameter" : { { "name":"docs_1", "type":"keyword", "json_array":true } } -
Analizar sintácticamente los datos con un delimitador
Por ejemplo, si los datos de origen son
"1,2,3,4,5", analícelos estableciendo splitter=",". Posteriormente, se escriben en Elasticsearch como una matriz.NotaUna tarea admite únicamente un delimitador porque el parámetro splitter es global para la tarea. Por lo tanto, no puede configurar delimitadores distintos para varios campos de matriz. Por ejemplo, si sus datos de origen contienen las columnas
col1="1,2,3,4,5"ycol2="6-7-8-9-10", no puede configurar un delimitador independiente para cada columna."parameter" : { "column": [ { "name": "docs_2", "array": true, "type": "long" } ], "splitter":","// Note: The splitter parameter must be at the same level as the column parameter. }
Apéndice 3: Ejemplos de escenarios
Escenario 1: Extracción completa de datos
Contexto: extrae un documento completo de Elasticsearch en un solo campo.
-
Ejemplo de configuración:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "IXgdO4MB4GR_1DmrjTXP", "_score": 1.0, "_source": { "feature1": "value1", "feature2": "value2", "feature3": "value3" } }] ## Data Integration Elasticsearch reader configuration "parameter": { "column": [ "content" ], "full":true } ## writer result: Writes one row and one column to the destination. {"_index":"mutiltest_1","_type":"_doc","_id":"IXgdO4MB4GR_1DmrjTXP","_source":{"feature1":"value1","feature2":"value2","feature3":"value3"},"sort":["IXgdO4MB4GR_1DmrjTXP"]}
Escenario 2: Sincronizar propiedades de campos anidados u object
Contexto: usa una ruta para acceder a las propiedades de un campo
objectonested.-
Sintaxis:
property
property.sub-property
property[0].sub-property
-
Configuración en el editor de código:
"multi":{ "multi":true }NotaLa interfaz sin código no es compatible con esta función.
-
Ejemplo de configuración:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "7XAOOoMB4GR_1Dmrrust", "_score": 1.0, "_source": { "level1": { "level2": [ { "level3": "testlevel3_1" }, { "level3": "testlevel3_2" } ] } } } ] ## Data Integration Elasticsearch reader configuration "parameter": { "column": [ "level1", "level1.level2", "level1.level2[0]", "level1.level2.level3" ], "multi":{ "multi":true } } ## writer result: 1 row, 4 columns column1(level1): {"level2":[{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}]} column2(level1.level2): [{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}] column3(level1.level2[0]): {"level3":"testlevel3_1"} column4(level1.level2.level3): nullNotaSi un nodo antecesor de la ruta es una matriz, el resultado es
null. Por ejemplo, recuperarlevel1.level2.level3devuelvenullporquelevel2es una matriz. Para acceder a la propiedad, debe especificar un índice, comolevel1.level2[0].level3olevel1.level2[1].level3. La sintaxis de comodínlevel1.level2[*].level3no es compatible.Las claves que contienen un punto (
.) no son compatibles. Por ejemplo, si los datos son{"level1.level2":{"level3":"testlevel3_1"}}, el resultado esnull.
Escenario 3: Dividir una propiedad de matriz en varias filas
Contexto: para relaciones de uno a varios, puede desplegar una matriz al dividir cada elemento en una fila independiente.
Sintaxis:
property[*].sub-propertyEjemplo de efecto: los datos de origen como
{ "splitKey": [1, 2, 3, 4, 5] }se transforman en cinco filas, donde cada fila contiene un elemento de la matriz.-
Configuración en el editor de código:
"multi":{ "multi":true, "key": "headers" }NotaEn la interfaz sin código, establezca el parámetro split multi-row array column name para lograr el mismo efecto, ya que genera automáticamente la configuración de script correspondiente.
El valor de la propiedad especificada por
keydebe ser una lista. De lo contrario, se produce un error.
-
Ejemplo de configuración:
## reader: Original data in Elasticsearch [ { "_index": "lmtestjson", "_type": "_doc", "_id": "nhxmIYMBKDL4VkVLyXRN", "_score": 1.0, "_source": { "headers": [ { "remoteip": "192.0.2.1" }, { "remoteip": "192.0.2.2" } ] } }, { "_index": "lmtestjson", "_type": "_doc", "_id": "wRxsIYMBKDL4VkVLcXqf", "_score": 1.0, "_source": { "headers": [ { "remoteip": "192.0.2.3" }, { "remoteip": "192.0.2.4" } ] } } ] ## Data Integration Elasticsearch reader configuration { "column":[ "headers[*].remoteip" ] "multi":{ "multi":true, "key": "headers" } } ## writer result: 4 rows 192.0.2.1 192.0.2.2 192.0.2.3 192.0.2.4
Escenario 4: Deduplicar y combinar propiedades de matriz
Contexto: deduplica los elementos de la matriz y los combina en una cadena separada por comas. También funciona con subpropiedades como
name1.name2. La deduplicación se basa en el resultado detoString()de cada elemento.-
Sintaxis:
property[].Incluir
[]en el nombre de la columna activa esta operación de deduplicación y combinación. -
Configuración en el editor de código:
"multi":{ "multi":true }NotaLa interfaz sin código no es compatible con esta función.
-
Ejemplo de configuración:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "4nbUOoMB4GR_1Dmryj8O", "_score": 1.0, "_source": { "feature1": [ "value1", "value1", "value2", "value2", "value3" ] } } ] ## Data Integration Elasticsearch reader configuration "parameter": { "column":[ "feature1[]" ], "multi":{ "multi":true } } ## writer result: 1 row, 1 column "value1,value2,value3"
Escenario 5: Sincronizar selectivamente varias propiedades
Contexto: devuelve el primer valor de propiedad distinto de null de una lista especificada. Si todas las propiedades son null o están ausentes, se devuelve
null.-
Sintaxis:
property1|property2|...Incluir el carácter de tubería (
|) en el nombre de la columna activa esta selección de múltiples propiedades. -
Configuración en el editor de código:
"multi":{ "multi":true }NotaLa interfaz sin código no es compatible con esta función.
-
Ejemplo de configuración:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "v3ShOoMB4GR_1DmrZN22", "_score": 1.0, "_source": { "feature1": "feature1", "feature2": [ 1, 2, 3 ], "feature3": { "child": "feature3" } } }] ## Data Integration Elasticsearch reader configuration "parameter": { "column":[ "feature1|feature2|feature3" ], "multi":{ "multi":true } } ## writer result: 1 row, 1 column "feature1"
Escenario 6: Combinar y sincronizar varias propiedades
Contexto: concatena varios valores de propiedad en una sola cadena separada por comas.
-
Sintaxis:
property1,property2,...Incluir una coma (
,) en el nombre de la columna activa esta operación de combinación de múltiples propiedades. -
Configuración en el editor de código:
"multi":{ "multi":true }NotaLa interfaz sin código no es compatible con esta función.
-
Ejemplo de configuración:
## reader: Original data in Elasticsearch "hits": [ { "_index": "mutiltest_1", "_type": "_doc", "_id": "v3ShOoMB4GR_1DmrZN22", "_score": 1.0, "_source": { "feature1": "feature1", "feature2": [ 1, 2, 3 ], "feature3": { "child": "feature3" } } }] ## Data Integration Elasticsearch reader configuration "parameter": { "column":[ "feature1,feature2,feature3" ], "multi":{ "multi":true } } ## writer result: 1 row, 1 column "feature1,[1,2,3],{\"child\":\"feature3\"}"
Referencias
Data Integration es compatible con muchos otros orígenes de datos. Para consultar la lista completa, vea Supported data sources and synchronization solutions.