Todos os produtos
Search
Central de documentação

DataWorks:Fonte de dados do Elasticsearch

Última atualização: Sep 25, 2026

As fontes de dados do Elasticsearch fornecem canais bidirecionais de leitura e gravação para sincronizar dados entre o DataWorks e o Elasticsearch.

Aplicabilidade

Os grupos de recursos públicos suportam o Elasticsearch 5.x, enquanto Serverless resource groups (recommended) e os grupos de recursos dedicados para integração de dados suportam as versões 5.x, 6.x, 7.x e 8.x do Elasticsearch.

Nota

O Elasticsearch é um mecanismo de busca corporativo e de código aberto, desenvolvido sob a licença Apache. Construído sobre o Lucene, ele oferece recursos de busca distribuída e análise de dados. A tabela a seguir mapeia os conceitos principais do Elasticsearch para seus equivalentes em bancos de dados relacionais.

Elasticsearch

Banco de dados relacional

Elasticsearch (instância)

banco de dados relacional (instância)

índice

banco de dados

tipo

tabela

documento

linha

campo

coluna

Uma instância do Elasticsearch pode conter vários índices. Cada índice armazena vários tipos, cada tipo contém vários documentos e cada documento é composto por vários campos. O plugin Elasticsearch Writer usa a API REST do Elasticsearch para gravar dados em lote no Elasticsearch.

Versões suportadas

O DataWorks suporta as versões 5.x, 6.x, 7.x e 8.x do Alibaba Cloud Elasticsearch, mas não oferece suporte para o Elasticsearch autogerenciado.

Limitações

As seguintes limitações se aplicam às leituras e gravações offline no Elasticsearch:

  • O Elasticsearch Reader busca informações de shard no servidor para a sincronização de dados. Todos os shards devem estar ativos durante a sincronização para evitar inconsistências nos dados.

  • Para o Elasticsearch 6.x ou superior, use um serverless resource group (recommended) ou um exclusive resource group for Data Integration.

  • Os campos scaled_float não podem ser sincronizados.

  • Os índices não podem ser sincronizados se os nomes de seus campos contiverem a palavra-chave $ref.

Tipos de campo suportados

Tipo

Leitura offline

Gravação offline

Gravação em tempo real

binary

Suportado

Suportado

Suportado

boolean

Suportado

Suportado

Suportado

keyword

Suportado

Suportado

Suportado

constant_keyword

Não suportado

Não suportado

Não suportado

wildcard

Não suportado

Não suportado

Não suportado

long

Suportado

Suportado

Suportado

integer

Suportado

Suportado

Suportado

short

Suportado

Suportado

Suportado

byte

Suportado

Suportado

Suportado

double

Suportado

Suportado

Suportado

float

Suportado

Suportado

Suportado

half_float

Não suportado

Não suportado

Não suportado

scaled_float

Não suportado

Não suportado

Não suportado

unsigned_long

Não suportado

Não suportado

Não suportado

date

Suportado

Suportado

Suportado

date_nanos

Não suportado

Não suportado

Não suportado

alias

Não suportado

Não suportado

Não suportado

object

Suportado

Suportado

Suportado

flattened

Não suportado

Não suportado

Não suportado

nested

Suportado

Suportado

Suportado

join

Não suportado

Não suportado

Não suportado

integer_range

Suportado

Suportado

Suportado

float_range

Suportado

Suportado

Suportado

long_range

Suportado

Suportado

Suportado

double_range

Suportado

Suportado

Suportado

date_range

Suportado

Suportado

Suportado

ip_range

Não suportado

Suportado

Suportado

ip

Suportado

Suportado

Suportado

version

Suportado

Suportado

Suportado

murmur3

Não suportado

Não suportado

Não suportado

aggregate_metric_double

Não suportado

Não suportado

Não suportado

histogram

Não suportado

Não suportado

Não suportado

text

Suportado

Suportado

Suportado

annotated-text

Não suportado

Não suportado

Não suportado

completion

Suportado

Não suportado

Não suportado

search_as_you_type

Não suportado

Não suportado

Não suportado

token_count

Suportado

Não suportado

Não suportado

dense_vector

Não suportado

Não suportado

Não suportado

rank_feature

Não suportado

Não suportado

Não suportado

rank_features

Não suportado

Não suportado

Não suportado

geo_point

Suportado

Suportado

Suportado

geo_shape

Suportado

Suportado

Suportado

point

Não suportado

Não suportado

Não suportado

shape

Não suportado

Não suportado

Não suportado

percolator

Não suportado

Não suportado

Não suportado

string

Suportado

Suportado

Suportado

Como funciona

O Elasticsearch Reader funciona da seguinte maneira:

  • Ele usa a API _searchscrollslice do Elasticsearch, combinando seu recurso de scroll slice com o particionamento multithread do Data Integration.

  • Ele converte os tipos de dados com base na configuração de mapeamento no Elasticsearch.

Para mais informações, consulte a documentação oficial do Elasticsearch.

Nota

O Elasticsearch Reader busca informações de shard no servidor para a sincronização de dados. Para evitar inconsistências nos dados, certifique-se de que todos os shards no lado do servidor permaneçam ativos durante a sincronização.

Configuração básica

Importante

Em ambientes de produção, remova os comentários do código antes de executar a tarefa.

{
 "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.
}

Recursos avançados

  • Extração completa de documentos

    Extraia todo o conteúdo de um documento do Elasticsearch para um único campo. Para detalhes de configuração, consulte Scenario 1: Full document pull.

  • Transformar dados semiestruturados em dados estruturados

    Categoria

    Descrição

    Referências

    Contexto

    Os dados do Elasticsearch frequentemente possuem campos dinâmicos e aninhamento profundo. Este recurso transforma dados semiestruturados em dados estruturados para computação e armazenamento downstream.

    —

    Como funciona

    A solução analisa dados JSON do Elasticsearch, usa expressões de caminho para achatar estruturas aninhadas e mapeia os resultados para tabelas estruturadas. Documentos complexos podem ser divididos em várias tabelas conforme a necessidade.

    —

    Soluções

    Para dados JSON aninhados, use um caminho para acessar propriedades específicas.

    • propriedade

    • propriedade.subpropriedade

    • propriedade[0].subpropriedade

    Scenario 2: Synchronize nested or object field properties

    Para relacionamentos de um para muitos, expanda uma propriedade de array para dividir seus elementos em várias linhas.

    propriedade[*].subpropriedade

    Scenario 3: Split an array property into multiple rows

    Mescle e deduplique elementos de um array de strings em uma única propriedade.

    propriedade[]

    Scenario 4: Deduplicate and merge an array property

    Combine várias propriedades em uma única propriedade.

    propriedade1,propriedade2

    Scenario 5: Multi-property merge

    Selecione a primeira propriedade não nula de uma lista.

    propriedade1|propriedade2

    Scenario 6: Multi-property selection

Adicionar uma fonte de dados

Antes de desenvolver uma tarefa de sincronização no DataWorks, adicione a fonte de dados necessária ao DataWorks seguindo as instruções em Data source configuration. Visualize as descrições dos parâmetros no console do DataWorks para entender o significado dos parâmetros ao adicionar uma fonte de dados.

Tarefas de sincronização de dados

Para obter informações sobre o ponto de entrada e o procedimento de configuração de uma tarefa de sincronização, consulte os seguintes guias de configuração.

Tarefa de sincronização offline (tabela única)

Tarefa de gravação em tempo real (tabela única)

Consulte Configure a real-time synchronization task in DataStudio (Legacy).

Sincronização em tempo real de banco de dados completo

Consulte Configure a real-time full-database synchronization task.

Apêndice 1: Demonstração de script e parâmetros

Configurar uma tarefa de sincronização em lote usando o editor de código

Para configurar uma tarefa de sincronização em lote no editor de código, defina os parâmetros relacionados no script de acordo com os requisitos de formato unificado. Para mais informações, consulte Script mode configuration. As informações a seguir descrevem os parâmetros obrigatórios para as fontes de dados ao configurar uma tarefa de sincronização em lote no editor de código.

Demonstração de script do 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 do script do Reader

Parâmetro

Descrição

Obrigatório

Padrão

datasource

O nome de uma fonte de dados existente no DataWorks.

Sim

Nenhum

index

O nome do index no Elasticsearch.

Sim

Nenhum

type

O nome do type de um index no Elasticsearch.

Não

Nome do índice

search

O corpo da consulta para o Elasticsearch.

Sim

Nenhum

pageSize

O número de registros a serem lidos por página.

Não

100

scroll

Especifica por quanto tempo manter o contexto de scroll do Elasticsearch ativo para paginação.

  • Valores muito baixos podem fazer o contexto de scroll expirar durante longos intervalos entre as leituras de página, resultando em perda de dados.

  • Valores muito altos podem causar erros de consulta se as consultas simultâneas excederem o limite max_open_scroll_context do servidor.

Sim

Nenhum

strictMode

Especifica se o modo estrito está ativado. Se definido como true, a tarefa de leitura será interrompida em caso de erro shard.failed para evitar a leitura de dados parciais.

Não

true

sort

O campo usado para ordenar os resultados.

Não

Nenhum

retryCount

O número de tentativas de repetição após uma falha.

Não

30

connTimeOut

O tempo limite de conexão do cliente, em milissegundos.

Não

600.000

readTimeOut

O tempo limite de leitura do cliente, em milissegundos.

Não

600.000

multiThread

Especifica se várias threads serão usadas para requisições HTTP.

Não

true

preemptiveAuth

Especifica se a autenticação preemptiva será usada para requisições HTTP.

Não

false

retrySleepTime

O intervalo entre as tentativas, em milissegundos.

Não

10.000

discovery

Especifica se a descoberta de nós está ativada.

  • true: O cliente se conecta a um nó aleatório no cluster, atualizando periodicamente a lista de servidores e enviando requisições para os nós descobertos.

  • false: Envia requisições apenas para o endpoint configurado.

Não

false

compression

Especifica se o GZIP será usado para compactar o corpo da requisição. Ao usar o GZIP, ative a configuração http.compression no nó do Elasticsearch.

Não

false

dateFormat

Se um campo a ser sincronizado for do tipo data e o mapeamento de campo não especificar um formato, configure o parâmetro dateFormat. Essa configuração deve incluir todos os formatos dos campos do tipo data a serem sincronizados. Exemplo: "dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss".

Não

Nenhum

full

Especifica se todo o conteúdo do documento será sincronizado como um único campo para o destino. Para mais informações, consulte Scenario 1: Full data pull.

Não

Nenhum

multi

Um recurso avançado com cinco casos de uso. Possui duas subpropriedades: multi.key e multi.mult. Para mais informações, consulte a tabela em Advanced features.

Não

Nenhum

Demonstração de script do 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

Uma instância do Elasticsearch em um ambiente VPC pode estar inacessível a partir do grupo de recursos padrão. Para garantir a conectividade para a sincronização de dados, use um serverless resource group (recommended) ou um grupo de recursos exclusivo para o Data Integration para se conectar à VPC. Para mais informações sobre como adicionar grupos de recursos, consulte Serverless resource group.

Parâmetros do script do Writer

Parâmetro

Descrição

Obrigatório

Padrão

datasource

O nome da fonte de dados do Elasticsearch. Se a fonte de dados não existir no DataWorks, crie uma antes. Para mais informações, consulte Configure an Elasticsearch data source.

Sim

Nenhum

index

O nome do índice no Elasticsearch.

Sim

Nenhum

type

O tipo do índice no Elasticsearch.

Não

default

cleanup

Especifica se o índice de destino será excluído e recriado antes da gravação.

  • true: Exclua e recrie o índice antes da gravação, removendo todos os dados existentes.

  • false: Retém os dados existentes no índice.

Não

false

batchSize

O número de documentos por lote de gravação no Elasticsearch.

Não

1.000

trySize

O número de tentativas de repetição após uma falha de gravação no Elasticsearch.

Não

30

timeout

O tempo limite do cliente.

Não

600.000

discovery

Especifica se a descoberta de nós está ativada para a tarefa.

  • true: Conecta-se a um nó aleatório no cluster. Quando a descoberta de nós está ativada, o cliente faz polling e atualiza periodicamente a lista de servidores.

  • false: O cliente se conecta apenas aos endpoints configurados na fonte de dados.

Não

false

compression

Especifica se a compactação está ativada para requisições HTTP.

Não

true

multiThread

Especifica se várias threads serão usadas para requisições HTTP.

Não

true

ignoreWriteError

Especifica se os erros de gravação serão ignorados. Se definido como true, o sistema ignora a operação com falha e continua gravando os dados subsequentes.

Não

false

ignoreParseError

Especifica se os erros de análise de formato de dados serão ignorados, continuando a gravação dos dados subsequentes.

Não

true

alias

Um alias do Elasticsearch funciona como uma visualização de banco de dados. Por exemplo, se você criar um alias chamado my_index_alias para o índice my_index, as operações em my_index_alias serão aplicadas ao my_index.

Se configurado, um alias é criado para o índice especificado após a conclusão da importação de dados.

Não

Nenhum

aliasMode

O modo de alias após a conclusão da importação de dados. Os valores válidos são append e exclusive.

  • Se aliasMode for definido como append, o índice atual é adicionado ao mapeamento de alias. Um alias pode ser mapeado para vários índices.

  • Se aliasMode for definido como exclusive, o alias existente é removido e, em seguida, o índice atual é adicionado ao mapeamento de alias. Um alias pode ser mapeado para apenas um índice.

O sistema resolve o alias para o nome real do índice. Use aliases para migração de índices, consultas unificadas em vários índices e para implementar funcionalidades semelhantes a visualizações.

Não

append

settings

As configurações de criação de índice, no mesmo formato das configurações oficiais do Elasticsearch.

Não

Nenhum

column

O parâmetro column configura os campos em um documento. Para cada campo, você pode definir propriedades básicas como name e type, e propriedades avançadas como Analyzer, Format e Array.

Os seguintes tipos de campo são suportados pelo 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

Observações sobre os tipos de coluna:

  • Para uma coluna do tipo text, você pode configurar parâmetros como analyzer, norms e index_options. Exemplo:

    {
            "name": "col_text",
            "type": "text",
            "analyzer": "ik_max_word"
            }
  • Para uma coluna do tipo date, você pode usar um dos seguintes métodos para analisar os dados de origem. Use o mesmo método de forma consistente.

    • Método 1: Grave o valor do campo do reader diretamente no campo es data.

      • Defina origin:true. Isso é necessário para gravar o valor bruto do campo diretamente em es data.

      • Configure "format" para indicar que, ao criar um mapping usando o es writer, a propriedade format deve ser definida para este campo. Veja um exemplo:

          {
             "parameter":{
               "column":[{
                   "name": "col_date",
                   "type": "date",
                   "format": "yyyy-MM-dd HH:mm:ss",
                   "origin": true
                }]
           }
        }
    • Método 2 (Conversão de fuso horário): Se quiser que o Data Integration converta os fusos horários, adicione o parâmetro Timezone.

      O "format" configurado especifica o formato de hora que o Data Integration usa para análise durante a conversão de fuso horário. Exemplo:

        {
           "parameter" :{
             "column": [{
                "name": "col_date",
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss",
               "Timezone": "UTC"
             }]
         }
      }
  • Para uma coluna do tipo geo_shape, você pode configurar os atributos tree (geohash ou quadtree) e precision. Exemplo:

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

Para configurar atributos do Elasticsearch diferentes de type para um campo em column, use o parâmetro other_params. Ao atualizar os mapeamentos, esse parâmetro descreve os outros atributos do Elasticsearch do campo.

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

Para gravar dados de origem no Elasticsearch como um array, analise os dados de origem no formato JSON ou use um delimitador específico. Para mais informações, consulte Appendix 2: Write data to Elasticsearch as an array.

Sim

Nenhum

dynamic

Especifica se o mapeamento dinâmico do Elasticsearch será usado para adicionar automaticamente mapeamentos para novos campos em um documento.

  • true: Mantém o comportamento de mapeamento automático do Elasticsearch.

  • false: O valor padrão. Os mapeamentos do Elasticsearch são gerados e atualizados com base na configuração de colunas da tarefa de sincronização.

O type padrão no Elasticsearch 7.x é _doc. Ao usar mapeamentos automáticos, defina o type como _doc e o esVersion como 7.

Alterne para o modo de script e adicione o parâmetro de versão: "esVersion": "7".

Importante

Caso encontre erros de mapeamento de campo, ative este parâmetro para tentar resolver o problema. No entanto, isso pode causar inconsistências nos tipos de campo em relação ao esperado ou gerar anomalias nos dados. Avalie os riscos para sua estrutura de dados antes de ativá-lo.

Não

false

actionType

Especifica o tipo de ação de gravação. Os valores válidos são index e update:

  • index: Usa internamente o Index.Builder do SDK do Elasticsearch para construir requisições em lote. Ao usar a ação index do Elasticsearch para inserir um documento, ele primeiro verifica se um ID foi especificado nos dados do documento:

    • Se nenhum ID for especificado, o Elasticsearch gera um ID exclusivo e adiciona o documento.

    • Se um ID for especificado, o Elasticsearch substitui todo o documento. Ele não suporta a atualização de apenas campos específicos.

      Nota

      Esta operação de atualização não é a mesma que uma atualização parcial no Elasticsearch.

  • update: Atualiza um documento com base em um ID especificado pelo usuário. Se o ID não existir no índice, um novo documento será inserido. Se o ID existir, a operação atualiza os campos column especificados e deixa os outros campos do documento inalterados. Cada operação update recupera o documento inteiro para modificar campos específicos. Esta operação update não suporta filtragem condicional e executa atualizações apenas com base no ID especificado. Como cada atualização exige a recuperação do documento original, essa operação pode impactar significativamente o desempenho.

    Nota

    Ao definir o tipo de ação como update, configure o parâmetro primaryKeyInfo.

Não

index

primaryKeyInfo

Especifica como determinar a chave primária do documento no Elasticsearch.

  • Business Primary Key (pk): O valor de _id é definido como o valor de um campo específico.

    "parameter":{
    "primaryKeyInfo":{
    "type":"pk",
    "column":["id"]}
    }
  • Composite Primary Key (specific): O valor de _id é uma concatenação dos valores de vários campos, separados pelo delimitador especificado por Primary Key Delimiter.

    Nota

    Os nomes dos campos são os campos a serem gravados pelo writer. Na interface sem código, Configure Primary Key Columns lista apenas os campos que já existem no índice do Elasticsearch.

    "parameter":{
    "primaryKeyInfo":{
    "type":"specific",
    "fieldDelimiter":",",
    "column":["col1","col2"]}
    }
  • No Primary Key (nopk): O _id é gerado automaticamente pelo sistema quando os dados são gravados no Elasticsearch.

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

Sim

specific

esPartitionColumn

Especifica se as gravações particionadas serão ativadas ao definir o parâmetro de roteamento do Elasticsearch.

  • Ative particionamento: Os valores das colunas especificadas são concatenados sem delimitador, e o resultado é usado como valor de roteamento. Durante a gravação, o sistema insere ou atualiza documentos no shard especificado. Ao ativar o particionamento, especifique as colunas de partição.

    {    "esPartitionColumn": [
            {
                "name":"col1",
                "comment":"xx",
                "type":"STRING"
                }
            ],
        }
  • Se este parâmetro não for configurado, o _id será usado para roteamento por padrão, o que ajuda a distribuir os documentos uniformemente e a evitar a inclinação de dados (data skew).

Não

false

enableWriteNull

Especifica se os campos nulos da origem serão gravados no Elasticsearch. Valores válidos:

  • true: Grava campos nulos. Após a sincronização, o valor do campo correspondente no Elasticsearch é nulo.

  • false: Não grava campos nulos. O campo não aparece no documento do Elasticsearch.

Não

true

Apêndice 2: Gravação de arrays no Elasticsearch

Grave dados de origem no Elasticsearch como um array usando um dos dois métodos a seguir.

  • Analisar dados no formato JSON

    Por exemplo, se os dados de origem forem "[1,2,3,4,5]", analise os dados definindo json_array=true. Eles serão gravados no Elasticsearch como um array.

    "parameter" : {
      {
        "name":"docs_1",
        "type":"keyword",
        "json_array":true
      }
    }
  • Analisar dados usando um delimitador

    Por exemplo, se os dados de origem forem "1,2,3,4,5", analise os dados definindo splitter=",". Eles serão gravados no Elasticsearch como um array.

    Nota

    Uma tarefa suporta apenas um delimitador, pois o parâmetro splitter é global. Portanto, não é possível configurar delimitadores diferentes para vários campos de array. Por exemplo, se os dados de origem contiverem as colunas col1="1,2,3,4,5" e col2="6-7-8-9-10", não configure um delimitador separado para cada coluna.

    "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: Exemplos de cenários

Cenário 1: Extração completa de dados

  • Contexto: Extrai um documento inteiro do Elasticsearch para um único campo.

  • Configuração de exemplo:

    
    ## 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"]}

Cenário 2: Sincronizar propriedades de campos aninhados ou de objetos

  • Contexto: Usa um caminho para acessar propriedades de um campo object ou nested.

  • Sintaxe:

    • propriedade

    • propriedade.subpropriedade

    • propriedade[0].subpropriedade

  • Configuração do editor de código:

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

    Este recurso não é suportado na interface sem código.

  • Configuração de exemplo:

    ## 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
    • Se um nó ancestral no caminho for um array, o resultado será null. Por exemplo, recuperar level1.level2.level3 retorna null porque level2 é um array. Para acessar a propriedade, especifique um índice, como level1.level2[0].level3 ou level1.level2[1].level3. A sintaxe de curinga level1.level2[*].level3 não é suportada.

    • Chaves que contêm um ponto (.) não são suportadas. Por exemplo, se os dados forem {"level1.level2":{"level3":"testlevel3_1"}}, o resultado será null.

Cenário 3: Dividir uma propriedade de array em várias linhas

  • Contexto: Para relacionamentos de um para muitos, expanda um array dividindo cada elemento em uma linha separada.

  • Sintaxe: property[*].sub-property

  • Efeito de exemplo: Dados de origem como { "splitKey": [1, 2, 3, 4, 5] } são transformados em cinco linhas, com cada linha contendo um elemento do array.

  • Configuração do editor de código:

    "multi":{   
           "multi":true,    
            "key": "headers"
    }
    Nota
    • Na interface sem código, defina o parâmetro split multi-row array column name para obter o mesmo efeito gerando automaticamente a configuração de script correspondente.

    • O valor da propriedade especificada por key deve ser uma lista. Caso contrário, ocorrerá um erro.

  • Configuração de exemplo:

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

Cenário 4: Deduplicar e mesclar propriedades de array

  • Contexto: Deduplica elementos de array e os mescla em uma string separada por vírgulas. Isso também funciona com subpropriedades como name1.name2. A deduplicação é baseada no resultado toString() de cada elemento.

  • Sintaxe: property[].

    Incluir [] no nome da coluna aciona essa operação de deduplicação e mesclagem.

  • Configuração do editor de código:

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

    Este recurso não é suportado na interface sem código.

  • Configuração de exemplo:

    ## 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"

Cenário 5: Sincronizar seletivamente várias propriedades

  • Contexto: Retorna o primeiro valor de propriedade não nulo de uma lista especificada. Se todas as propriedades forem nulas ou estiverem ausentes, null será retornado.

  • Sintaxe: property1|property2|...

    Incluir o caractere pipe (|) no nome da coluna aciona essa seleção de múltiplas propriedades.

  • Configuração do editor de código:

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

    Este recurso não é suportado na interface sem código.

  • Configuração de exemplo:

    ## 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"

Cenário 6: Mesclar e sincronizar várias propriedades

  • Contexto: Concatena vários valores de propriedade em uma única string separada por vírgulas.

  • Sintaxe: property1,property2,...

    Incluir uma vírgula (,) no nome da coluna aciona essa operação de mesclagem de múltiplas propriedades.

  • Configuração do editor de código:

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

    Este recurso não é suportado na interface sem código.

  • Configuração de exemplo:

    ## 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\"}"

Referências

O Data Integration suporta muitas outras fontes de dados. Para a lista completa, consulte Supported data sources and synchronization solutions.