Todos los productos
Search
Centro de documentos

DataWorks:Origen de datos de Elasticsearch

Última actualización: Sep 25, 2026

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.

Nota

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.

Nota

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

Importante

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

    Scenario 2: Synchronize nested or object field properties

    En relaciones de uno a varios, despliegue una propiedad de tipo arreglo para dividir sus elementos en varias filas.

    property[*].sub-property

    Scenario 3: Split an array property into multiple rows

    Combine y deduplique los elementos de un arreglo de cadenas en una sola propiedad.

    property[]

    Scenario 4: Deduplicate and merge an array property

    Agrupe varias propiedades en una sola.

    property1,property2

    Scenario 5: Multi-property merge

    Seleccione la primera propiedad distinta de nulo en una lista.

    property1|property2

    Scenario 6: Multi-property selection

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)

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.

  • Un valor demasiado bajo puede hacer que el contexto de scroll expire durante intervalos largos entre lecturas de páginas, lo que provoca pérdida de datos.

  • Si establece un valor demasiado alto, podría producirse un error de consulta cuando las consultas simultáneas superen el límite max_open_scroll_context del servidor.

Sí

Ninguna

strictMode

Indica si se habilita el modo estricto. Si se establece en true, la tarea de lectura se detiene ante un error de shard.failed para evitar la lectura parcial de datos.

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.

  • true: el cliente se conecta a un nodo aleatorio del clúster, actualiza periódicamente la lista de servidores y envía solicitudes a los nodos detectados.

  • false: envía solicitudes únicamente al endpoint configurado.

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: "dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss".

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: multi.key y multi.mult. Para obtener más información, consulte la tabla en Advanced features.

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"
}
Nota

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.

  • true: elimina y vuelve a crear el índice antes de escribir, por lo que se quitan todos los datos existentes.

  • false: conserva los datos existentes en el índice.

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.

  • true: se conecta a un nodo aleatorio del clúster. Cuando la detección de nodos está habilitada, el cliente sondea y actualiza periódicamente la lista de servidores.

  • false: el cliente se conecta únicamente a los puntos de enlace configurados en el origen de datos.

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.

  • Si aliasMode se establece en append, el índice actual se agrega a la asignación del alias. Un alias puede asignarse a varios índices.

  • Si aliasMode se establece en exclusive, se elimina el alias existente y luego se agrega el índice actual a la asignación del alias. Un alias solo puede asignarse a un índice.

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:

- id  // The id type maps to _id in Elasticsearch and can be considered a unique primary key. When writing data, documents with the same id overwrite each other and are not indexed.
- string
- text
- keyword
- long
- integer
- short
- byte
- double
- float
- date
- boolean
- binary
- integer_range
- float_range
- long_range
- double_range
- date_range
- geo_point
- geo_shape
- ip
- token_count
- array
- object
- nested

Notas sobre los tipos de columna:

  • Para una columna de tipo text, configure parámetros como analyzer, norms y index_options. Ejemplo:

    {
            "name": "col_text",
            "type": "text",
            "analyzer": "ik_max_word"
            }
  • Para una columna de tipo date, utilice uno de los métodos siguientes para analizar sintácticamente los datos de origen. Aplique siempre el mismo método de forma consistente.

    • Método 1: escriba directamente el valor del campo del reader en el campo de es data.

      • Establezca origin:true. Este paso es obligatorio para escribir el valor original del campo directamente en es data.

      • Configure "format" para indicar que, al crear una mapping mediante es writer, se debe establecer la propiedad format para este campo. A continuación se muestra un ejemplo:

          {
             "parameter":{
               "column":[{
                   "name": "col_date",
                   "type": "date",
                   "format": "yyyy-MM-dd HH:mm:ss",
                   "origin": true
                }]
           }
        }
    • Método 2 (conversión de zona horaria): si desea que Data Integration convierta las zonas horarias, agregue el parámetro Timezone.

      El valor de "format" configurado especifica el formato de hora que Data Integration utiliza para el análisis sintáctico durante la conversión de zona horaria. Ejemplo:

        {
           "parameter" :{
             "column": [{
                "name": "col_date",
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss",
               "Timezone": "UTC"
             }]
         }
      }
  • Para una columna de tipo geo_shape, configure los atributos tree (geohash o quadtree) y precision. Ejemplo:

    {
            "name": "col_geo_shape",
            "type": "geo_shape",
            "tree": "quadtree",
            "precision": "10m"
            }

Para configurar atributos de Elasticsearch distintos de type en un campo de column, use el parámetro other_params. Al actualizar las asignaciones, este parámetro describe los demás atributos de Elasticsearch del campo.

 {
       "name": "guid",
       "other_params":
        {
           "doc_values": false
          },
        "type": "text"
      }

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.

  • true: conserva el comportamiento de asignación automática de Elasticsearch.

  • false: valor predeterminado. Las asignaciones de Elasticsearch se generan y actualizan según la configuración de columnas de la tarea de sincronización.

El type predeterminado en Elasticsearch 7.x es _doc. Si utiliza asignaciones automáticas, establezca el tipo en _doc y esVersion en 7.

Debe cambiar al modo de script y agregar el parámetro de versión: "esVersion": "7".

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:

  • index: internamente usa Index.Builder del SDK de Elasticsearch para construir solicitudes por lotes. Cuando se emplea la acción index de Elasticsearch para insertar un documento, primero se comprueba si los datos del documento incluyen un ID especificado:

    • Si no se especifica ningún ID, Elasticsearch genera un ID único y agrega el documento.

    • Si se especifica un ID, Elasticsearch reemplaza todo el documento. No admite actualizar únicamente campos específicos.

      Nota

      Esta operación de actualización no es igual que una actualización parcial en Elasticsearch.

  • update: actualiza un documento según un ID especificado por el usuario. Si el ID no existe en el índice, se inserta un documento nuevo. Si el ID existe, la operación actualiza los campos de column especificados y deja sin cambios los demás campos del documento. Cada operación de update recupera el documento completo para modificar campos específicos. Esta operación de update no admite filtrado condicional y realiza actualizaciones únicamente según el ID especificado. Dado que cada actualización requiere recuperar el documento original, esta operación puede afectar significativamente el rendimiento.

    Nota

    Si establece el tipo de acción en update, debe configurar el parámetro primaryKeyInfo.

No

index

primaryKeyInfo

Especifica cómo determinar la clave principal del documento en Elasticsearch.

  • Business Primary Key (pk): el valor de _id se establece con el valor de un campo específico.

    "parameter":{
    "primaryKeyInfo":{
    "type":"pk",
    "column":["id"]}
    }
  • Composite Primary Key (specific): el valor de _id es la concatenación de los valores de varios campos, separados por el delimitador especificado en Primary Key Delimiter.

    Nota

    Los nombres de campo corresponden a los campos que escribirá el writer. En la interfaz sin código, Configure Primary Key Columns enumera únicamente los campos que ya existen en el índice de Elasticsearch.

    "parameter":{
    "primaryKeyInfo":{
    "type":"specific",
    "fieldDelimiter":",",
    "column":["col1","col2"]}
    }
  • No Primary Key (nopk): el sistema genera automáticamente el _id cuando se escriben los datos en Elasticsearch.

    "primaryKeyInfo":{
    "type":"nopk"
    }

Sí

specific

esPartitionColumn

Indica si se habilitan las escrituras particionadas mediante la configuración del parámetro de enrutamiento de Elasticsearch.

  • Habilitar particionamiento: los valores de las columnas especificadas se concatenan sin delimitador y el resultado se usa como valor de enrutamiento. Al escribir datos, el sistema inserta o actualiza documentos en el fragmento especificado. Si habilita el particionamiento, debe especificar las columnas de partición.

    {    "esPartitionColumn": [
            {
                "name":"col1",
                "comment":"xx",
                "type":"STRING"
                }
            ],
        }
  • Si no configura este parámetro, se usa _id para el enrutamiento de forma predeterminada, lo cual ayuda a distribuir los documentos uniformemente y evita el sesgo de datos.

No

false

enableWriteNull

Indica si se escriben los campos nulos del origen en Elasticsearch. Valores válidos:

  • true: escribe los campos nulos. Después de la sincronización, el valor del campo correspondiente en Elasticsearch es null.

  • false: no escribe los campos nulos. El campo no aparece en el documento de Elasticsearch.

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.

    Nota

    Una 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" y col2="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 object o nested.

  • Sintaxis:

    • property

    • property.sub-property

    • property[0].sub-property

  • Configuración en el editor de código:

    "multi":{
        "multi":true
    }
    Nota

    La 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):  null
    Nota
    • Si un nodo antecesor de la ruta es una matriz, el resultado es null. Por ejemplo, recuperar level1.level2.level3 devuelve null porque level2 es una matriz. Para acceder a la propiedad, debe especificar un índice, como level1.level2[0].level3 o level1.level2[1].level3. La sintaxis de comodín level1.level2[*].level3 no es compatible.

    • Las claves que contienen un punto (.) no son compatibles. Por ejemplo, si los datos son {"level1.level2":{"level3":"testlevel3_1"}}, el resultado es null.

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-property

  • Ejemplo 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"
    }
    Nota
    • En 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 key debe 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 de toString() 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
    }
    Nota

    La 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
    }
    Nota

    La 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
    }
    Nota

    La 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.