すべてのプロダクト
Search
ドキュメントセンター

DataWorks:Elasticsearch データソース

最終更新日:Jul 18, 2026

Elasticsearch データソースは、DataWorks と Elasticsearch 間のデータ同期のための双方向読み取り・書き込みチャンネルを提供します。

適用範囲

パブリックリソースグループは Elasticsearch 5.x をサポートしています。一方、サーバーレスリソースグループ(推奨)およびデータ統合専用リソースグループは、Elasticsearch 5.x、6.x、7.x、8.x をサポートしています。

説明

Elasticsearch は Apache ライセンスのもとで開発されたオープンソースのエンタープライズグレード検索エンジンです。Lucene をベースに構築されており、分散型検索およびデータ分析機能を提供します。以下の表は、Elasticsearch の主要な概念とリレーショナルデータベースの対応関係を示しています。

Elasticsearch

リレーショナルデータベース

Elasticsearch(インスタンス)

リレーショナルデータベース(インスタンス)

インデックス

データベース

タイプ

テーブル

ドキュメント

フィールド

Elasticsearch インスタンスには複数のインデックスを含めることができます。各インデックスには複数のタイプが含まれ、各タイプには複数のドキュメントが含まれ、各ドキュメントは複数のフィールドで構成されます。Elasticsearch Writer プラグインは、Elasticsearch REST API を使用してデータをバッチで Elasticsearch に書き込みます。

サポートされるバージョン

DataWorks は Alibaba Cloud Elasticsearch のバージョン 5.x、6.x、7.x、8.x をサポートしていますが、セルフマネージド Elasticsearch はサポートしていません。

制限事項

Elasticsearch からのオフライン読み取りおよび書き込みには、以下の制限事項が適用されます。

  • Elasticsearch Reader は、データ同期のためにサーバーからシャード情報をフェッチします。データの不整合を防ぐため、同期中はすべてのシャードがアクティブである必要があります。

  • Elasticsearch 6.x 以降を使用する場合は、サーバーレスリソースグループ(推奨)またはデータ統合専用リソースグループを使用できます。

  • scaled_float フィールドは同期できません。

  • フィールド名にキーワード $ref を含むインデックスは同期できません。

サポートされるフィールドタイプ

タイプ

オフライン読み取り

オフライン書き込み

リアルタイム書き込み

binary

サポート

サポート

サポート

boolean

サポート

サポート

サポート

keyword

サポート

サポート

サポート

constant_keyword

未サポート

未サポート

未サポート

wildcard

未サポート

未サポート

未サポート

long

サポート

サポート

サポート

integer

サポート

サポート

サポート

short

サポート

サポート

サポート

byte

サポート

サポート

サポート

double

サポート

サポート

サポート

float

サポート

サポート

サポート

half_float

未サポート

未サポート

未サポート

scaled_float

未サポート

未サポート

未サポート

unsigned_long

未サポート

未サポート

未サポート

date

サポート

サポート

サポート

date_nanos

未サポート

未サポート

未サポート

alias

未サポート

未サポート

未サポート

object

サポート

サポート

サポート

flattened

未サポート

未サポート

未サポート

nested

サポート

サポート

サポート

join

未サポート

未サポート

未サポート

integer_range

サポート

サポート

サポート

float_range

サポート

サポート

サポート

long_range

サポート

サポート

サポート

double_range

サポート

サポート

サポート

date_range

サポート

サポート

サポート

ip_range

未サポート

サポート

サポート

ip

サポート

サポート

サポート

version

サポート

サポート

サポート

murmur3

未サポート

未サポート

未サポート

aggregate_metric_double

未サポート

未サポート

未サポート

histogram

未サポート

未サポート

未サポート

text

サポート

サポート

サポート

annotated-text

未サポート

未サポート

未サポート

completion

サポート

未サポート

未サポート

search_as_you_type

未サポート

未サポート

未サポート

token_count

サポート

未サポート

未サポート

dense_vector

未サポート

未サポート

未サポート

rank_feature

未サポート

未サポート

未サポート

rank_features

未サポート

未サポート

未サポート

geo_point

サポート

サポート

サポート

geo_shape

サポート

サポート

サポート

point

未サポート

未サポート

未サポート

shape

未サポート

未サポート

未サポート

percolator

未サポート

未サポート

未サポート

string

サポート

サポート

サポート

仕組み

Elasticsearch Reader は、次のように動作します。

  • Elasticsearch の _searchscrollslice API を使用し、そのスクロールスライス機能と Data Integration のマルチスレッドシャーディングを組み合わせます。

  • Elasticsearch のマッピング設定に基づいてデータ型を変換します。

詳細については、Elasticsearch 公式ドキュメントをご参照ください。

説明

Elasticsearch Reader は、データ同期のためにサーバーからシャード情報をフェッチします。データの不整合を防ぐため、データ同期中はすべてのサーバー側シャードがアクティブであることを確認してください。

基本構成

重要

本番環境では、ジョブを実行する前にコード内のコメントを削除してください。

{
 "order":{
  "hops":[
   {
    "from":"Reader",
    "to":"Writer"
   }
  ]
 },
 "setting":{
  "errorLimit":{
   "record":"0" // エラー許容数。エラー数がこの値を超えるとジョブが停止します。
  },
  "jvmOption":"",
  "speed":{
   "concurrent":3, // 同時スレッド数。
   "throttle":true,
   "mbps":"12"    // 最大速度(MB/s)。
  }
 },
 "steps":[
  {
   "category":"reader",
   "name":"Reader",
   "parameter":{
    "column":[ // 読み取るカラム。
     "id",
     "name"
    ],
    "endpoint":"", // サービスエンドポイント。
    "index":"",  // ソースインデックス。
    "password":"",  // 認証用パスワード。
    "scroll":"",  // スクロールコンテキストの持続時間。
    "search":"",  // クエリ本文。Elasticsearch `_search` リクエストの `query` オブジェクトと同じです。
    "type":"default",
    "username":""  // 認証用ユーザー名。
   },
   "stepType":"elasticsearch"
  },
  {
   "stepType": "elasticsearch",
            "parameter": {
                "column": [ // 書き込むカラム。
                    {
                        "name": "id",
                        "type": "integer"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    }
                ],
                "index": "test",   // 送信先インデックス。
                 "indexType": "",   // インデックスタイプ。Elasticsearch v7.x 以降の場合は空のままにしてください。
                "actionType": "index",  // 書き込みモード。
                "cleanup": false,         // 書き込み前にインデックスを再作成するかどうかを指定します。
                "datasource": "test",   // データソース名。
                "primaryKeyInfo": {     // プライマリキー構成。
                    "fieldDelimiterOrigin": ",",
                    "column": [
                        "id"
                    ],
                    "type": "specific",
                    "fieldDelimiter": ","
                },
                "dynamic": false,  // 動的マッピングを有効にするかどうかを指定します。
                "batchSize": 1024   // 1 バッチあたりの書き込みドキュメント数。
            },
            "name": "Writer",
            "category": "writer"
  }
 ],
 "type":"job",
 "version":"2.0" // バージョン番号。
}

高度な機能

  • ドキュメント全体のプル

    Elasticsearch ドキュメントの全内容を単一フィールドにプルできます。構成の詳細については、「シナリオ 1:ドキュメント全体のプル」をご参照ください。

  • 半構造化データを構造化データに変換

    カテゴリ

    説明

    リファレンス

    背景情報

    Elasticsearch データは動的フィールドや深いネストを持つことがよくあります。この機能により、半構造化データを構造化データに変換し、ダウンストリームでの計算およびストレージが可能になります。

    仕組み

    このソリューションは、Elasticsearch から JSON データを解析し、パス式を使用してネストされた構造をフラット化し、結果を構造化テーブルにマッピングします。必要に応じて、複雑なドキュメントを複数のテーブルに分割できます。

    ソリューション

    ネストされた JSON データの場合、特定のプロパティにアクセスするためにパスを使用します。

    • property

    • property.sub-property

    • property[0].sub-property

    シナリオ 2:ネストまたはオブジェクトフィールドプロパティの同期

    1 対多の関係の場合、配列プロパティを展開して、その要素を複数の行に分割します。

    property[*].sub-property

    シナリオ 3:配列プロパティを複数の行に分割

    文字列配列の要素をマージおよび重複排除し、単一のプロパティにまとめます。

    property[]

    シナリオ 4:配列プロパティの重複排除およびマージ

    複数のプロパティを単一のプロパティに結合します。

    property1,property2

    シナリオ 5:マルチプロパティマージ

    リスト内の最初の null でないプロパティを選択します。

    property1|property2

    シナリオ 6:マルチプロパティ選択

データソースの追加

DataWorks で同期タスクを開発する前に、「データソース管理」の手順に従って、必要なデータソースを DataWorks に追加する必要があります。DataWorks コンソールでパラメーターの説明を確認し、データソースを追加する際の各パラメーターの意味を理解してください

データ同期タスク

同期タスクの設定エントリポイントおよび手順については、以下の構成ガイドをご参照ください。

オフライン同期タスク(単一テーブル)

リアルタイム書き込みタスク(単一テーブル)

DataStudio(旧バージョン)でのリアルタイム同期タスクの構成」をご参照ください。

フルデータベースリアルタイム同期

リアルタイムフルデータベース同期タスクの構成」をご参照ください。

付録 1:スクリプトデモおよびパラメーター

コードエディタを使用したバッチ同期タスクの構成

コードエディタを使用してバッチ同期タスクを構成する場合は、統一されたスクリプト形式要件に基づいて、スクリプト内で関連パラメーターを構成する必要があります。詳細については、「スクリプトモード構成」をご参照ください。以下は、コードエディタを使用してバッチ同期タスクを構成する際にデータソースに対して構成する必要があるパラメーターについて説明しています。

Reader スクリプトデモ

{
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    },
    "setting":{
        "errorLimit":{
            "record":"0" // 許容されるエラーレコード数。
        },
        "jvmOption":"",
        "speed":{
            "concurrent":3,
            "throttle":false
        }
    },
    "steps":[
        {
            "category":"reader",
            "name":"Reader",
            "parameter":{
                "column":[ // 読み取るカラム。
                    "id",
                    "name"
                ],
                "endpoint":"http://es-cn-xxx.elasticsearch.aliyuncs.com:9200", // エンドポイント。
                "index":"aliyun_es_xx",  // インデックス。
                "password":"*******",  // パスワード。
                "multiThread":true,
                "scroll":"5m",  // スクロールコンテキストの持続時間。
                "pageSize":5000,
                "connTimeOut":600000,
                "readTimeOut":600000,
                "retryCount":30,
                "retrySleepTime":"10000",
                "search":{
                            "range":{
                                "gmt_modified":{
                                    "gte":0
                                }
                            }
                        },  // クエリパラメーター。内容は Elasticsearch _search API のクエリ本文と同じです。
                "type":"doc",
                "username":"aliyun_di"  // ユーザー名。
            },
            "stepType":"elasticsearch"
        },
        {
            "category":"writer",
            "name":"Writer",
            "parameter":{ },
            "stepType":"stream"
        }
    ],
    "type":"job",
    "version":"2.0" // バージョン番号。
}

Reader スクリプトパラメーター

パラメーター

説明

必須

デフォルト

datasource

既存の DataWorks データソースの名前。

はい

なし

index

Elasticsearch の インデックス 名。

はい

なし

type

Elasticsearch の インデックスタイプ 名。

いいえ

インデックス名

search

Elasticsearch のクエリ本文。

はい

なし

pageSize

1 ページあたりに読み取るレコード数。

いいえ

100

scroll

Elasticsearch スクロールコンテキストをページネーション中に維持する時間を指定します。

  • この値を低く設定すると、ページ読み取り間隔が長くなる場合にスクロールコンテキストが期限切れになり、データ損失が発生する可能性があります。

  • この値を高く設定すると、同時クエリ数がサーバーの max_open_scroll_context 制限を超えた場合にクエリエラーが発生する可能性があります。

はい

なし

strictMode

厳格モードを有効にするかどうかを指定します。true に設定すると、shard.failed エラーが発生した場合に部分的なデータ読み取りを防ぐために読み取りタスクが停止します。

いいえ

true

sort

結果をソートするフィールド。

いいえ

なし

retryCount

失敗した操作のリトライ回数。

いいえ

30

connTimeOut

クライアント接続タイムアウト(ミリ秒単位)。

いいえ

600,000

readTimeOut

クライアント読み取りタイムアウト(ミリ秒単位)。

いいえ

600,000

multiThread

HTTP リクエストに複数のスレッドを使用するかどうかを指定します。

いいえ

true

preemptiveAuth

HTTP リクエストにプリエンプティブ認証を使用するかどうかを指定します。

いいえ

false

retrySleepTime

リトライ間隔(ミリ秒単位)。

いいえ

10,000

discovery

ノードディスカバリーを有効にするかどうかを指定します。

  • true:クライアントはクラスター内のランダムなノードに接続し、定期的にサーバーリストを更新して、検出されたノードにリクエストを送信します。

  • false:構成済みのエンドポイントにのみリクエストを送信します。

いいえ

false

compression

GZIP を使用してリクエストボディを圧縮するかどうかを指定します。GZIP を使用する場合は、Elasticsearch ノードで http.compression 設定を有効にする必要があります。

いいえ

false

dateFormat

同期するフィールドが日付型で、フィールドマッピングにフォーマットが指定されていない場合は、dateFormat パラメーターを構成する必要があります。この構成には、同期する日付型フィールドのすべてのフォーマットを含める必要があります。例:"dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss"

いいえ

なし

full

ドキュメントの全内容を単一フィールドとして送信先に同期するかどうかを指定します。詳細については、「シナリオ 1:全データプル」をご参照ください。

いいえ

なし

multi

5 つのユースケースを持つ高度な機能です。multi.key および multi.mult の 2 つのサブプロパティがあります。詳細については、「高度な機能」の表をご参照ください。

いいえ

なし

Writer スクリプトデモ

{
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    },
    "setting": {
        "errorLimit": {
            "record": "0"
        },
        "speed": {
            "throttle":true, // throttle が false の場合、mbps パラメーターは無視され、速度制限は無効になります。throttle が true の場合、速度制限が有効になります。
            "concurrent":1, // ジョブの同時実行数。
            "mbps":"12" // 最大レート(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"
}
説明

VPC 環境内の Elasticsearch インスタンスは、デフォルトリソースグループから到達不能な場合があります。データ同期の接続性を確保するには、サーバーレスリソースグループ(推奨)またはデータ統合専用リソースグループを使用して VPC に接続する必要があります。リソースグループの追加方法の詳細については、「サーバーレスリソースグループ」をご参照ください。

Writer スクリプトパラメーター

パラメーター

説明

必須

デフォルト

datasource

Elasticsearch データソースの名前。DataWorks にデータソースが存在しない場合は、事前に作成してください。詳細については、「Elasticsearch データソースの構成」をご参照ください。

はい

なし

index

Elasticsearch のインデックス名。

はい

なし

type

Elasticsearch のインデックスタイプ。

いいえ

default

cleanup

書き込み前に送信先インデックスを削除して再作成するかどうかを指定します。

  • true:書き込み前にインデックスを削除して再作成し、既存のすべてのデータを削除します。

  • false:インデックス内の既存データを保持します。

いいえ

false

batchSize

Elasticsearch への 1 バッチあたりの書き込みドキュメント数。

いいえ

1,000

trySize

Elasticsearch への書き込み失敗後のリトライ回数。

いいえ

30

timeout

クライアントタイムアウト期間。

いいえ

600,000

discovery

タスクのノードディスカバリーを有効にするかどうかを指定します。

  • true:クラスター内のランダムなノードに接続します。ノードディスカバリーが有効な場合、クライアントはポーリングを行い、定期的にサーバーリストを更新します。

  • false:クライアントはデータソースで構成されたエンドポイントにのみ接続します。

いいえ

false

compression

HTTP リクエストの圧縮を有効にするかどうかを指定します。

いいえ

true

multiThread

HTTP リクエストに複数のスレッドを使用するかどうかを指定します。

いいえ

true

ignoreWriteError

書き込みエラーを無視するかどうかを指定します。true に設定すると、失敗した操作をスキップして後続のデータの書き込みを継続します。

いいえ

false

ignoreParseError

データ形式の解析エラーを無視して後続のデータの書き込みを継続するかどうかを指定します。

いいえ

true

alias

Elasticsearch のエイリアスはデータベースビューのような働きをします。たとえば、インデックス my_index に対して my_index_alias という名前のエイリアスを作成すると、my_index_alias に対する操作は my_index に適用されます。

構成されている場合、データインポート完了後に指定されたインデックスのエイリアスが作成されます。

いいえ

なし

aliasMode

データインポート完了後のエイリアスモード。有効な値は append および exclusive です。

  • aliasModeappend に設定されている場合、現在のインデックスがエイリアスマッピングに追加されます。エイリアスは複数のインデックスにマッピングできます。

  • aliasModeexclusive に設定されている場合、既存のエイリアスが削除され、その後現在のインデックスがエイリアスマッピングに追加されます。エイリアスは 1 つのインデックスにのみマッピングできます。

システムはエイリアスを実際のインデックス名に解決します。エイリアスを使用して、インデックス移行、複数のインデックスにわたる統一クエリ、ビューのような機能を実装できます。

いいえ

append

settings

インデックス作成設定。公式 Elasticsearch 設定と同じ形式です。

いいえ

なし

column

column パラメーターは、ドキュメント内のフィールドを構成します。各フィールドに対して、nametype などの基本プロパティに加え、AnalyzerFormatArray などの高度なプロパティを設定できます。

Elasticsearch でサポートされているフィールドタイプは次のとおりです。

- id  // id タイプは Elasticsearch の _id にマッピングされ、一意のプライマリキーと見なせます。データを書き込む際、同じ id を持つドキュメントは互いに上書きされ、インデックスされません。
- 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

カラムタイプに関する注意事項:

  • text タイプのカラムの場合、analyzernormsindex_options などのパラメーターを構成できます。例:

    {
        "name": "col_text",
        "type": "text",
        "analyzer": "ik_max_word"
        }
  • date タイプのカラムの場合、次のいずれかの方法でソースデータを解析できます。同じ方法を一貫して使用してください。

    • 方法 1: reader のフィールド値を直接 es data フィールドに書き込みます。

      • origin:true を設定します。これは、生のフィールド値を直接 es data に書き込むために必要です。

      • "フォーマット" を設定して、es writer を使用して マッピング を作成する際に、このフィールドに対して フォーマット プロパティを設定する必要があることを示します。以下に例を示します。

          {
             "parameter":{
               "column":[{
                   "name": "col_date",
                   "type": "date",
                   "format": "yyyy-MM-dd HH:mm:ss",
                   "origin": true
                }]
           }
        }
    • 方法 2(タイムゾーン変換):Data Integration によるタイムゾーン変換を希望する場合は、Timezone パラメーターを追加します。

      構成された "format" は、タイムゾーン変換中に Data Integration が解析に使用する時刻フォーマットを指定します。例:

        {
           "parameter" :{
             "column": [{
                "name": "col_date",
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss",
               "Timezone": "UTC"
             }]
         }
      }
  • geo_shape タイプのカラムの場合、treegeohash または quadtree)および precision 属性を構成できます。例:

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

column 内のフィールドに対して type 以外の Elasticsearch 属性を構成するには、other_params パラメーターを使用します。マッピングを更新する際、このパラメーターはフィールドの他の Elasticsearch 属性を記述します。

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

ソースデータを Elasticsearch に配列として書き込む場合は、JSON 形式で解析するか、指定されたデリミタを使用して解析できます。詳細については、「付録 2:Elasticsearch への配列データの書き込み」をご参照ください。

はい

なし

dynamic

Elasticsearch の動的マッピングを使用して、ドキュメント内の新しいフィールドのマッピングを自動的に追加するかどうかを指定します。

  • true:Elasticsearch の自動マッピング動作を保持します。

  • false:デフォルト値。Elasticsearch マッピングは、同期タスクのカラム構成に基づいて生成および更新されます。

Elasticsearch 7.x のデフォルト type_doc です。自動マッピングを使用する場合は、タイプを _doc に設定し、esVersion7 に設定する必要があります。

スクリプトモードに切り替えて、バージョンパラメーターを追加する必要があります:"esVersion": "7"

重要

フィールドマッピングエラーが発生した場合は、このパラメーターを有効にして問題を解決できる可能性があります。ただし、これによりフィールドタイプが期待と異なるものになったり、データ異常が発生したりする可能性があります。有効にする前に、データ構造に関するリスクを評価してください。

いいえ

false

actionType

書き込みアクションタイプを指定します。有効な値は index および update です。

  • index:内部的には、Elasticsearch SDK の Index.Builder を使用してバッチリクエストを構築します。Elasticsearch の index アクションを使用してドキュメントを挿入する場合、まずドキュメントデータに ID が指定されているかどうかをチェックします。

    • ID が指定されていない場合、Elasticsearch は一意の ID を生成してドキュメントを追加します。

    • ID が指定されている場合、Elasticsearch はドキュメント全体を置き換えます。特定のフィールドのみを更新することはサポートしていません。

      説明

      この更新操作は、Elasticsearch の部分更新とは異なります。

  • update:ユーザー指定の ID に基づいてドキュメントを更新します。ID がインデックスに存在しない場合、新しいドキュメントが挿入されます。ID が存在する場合、指定された column フィールドが更新され、他のドキュメントフィールドは変更されません。各 update 操作は、特定のフィールドを変更するためにドキュメント全体を取得します。この update 操作は条件付きフィルタリングをサポートしておらず、指定された ID のみに基づいて更新を実行します。各更新で元のドキュメントを取得する必要があるため、この操作はパフォーマンスに大きな影響を与える可能性があります。

    説明

    アクションタイプを update に設定する場合は、primaryKeyInfo パラメーターを構成する必要があります。

いいえ

index

primaryKeyInfo

Elasticsearch におけるドキュメントプライマリキーの決定方法を指定します。

  • 業務プライマリキー (pk):_id 値は特定のフィールドの値に設定されます。

    "parameter":{
    "primaryKeyInfo":{
    "type":"pk",
    "column":["id"]}
    }
  • 複合プライマリキー (specific):_id 値は、プライマリキー区切り文字 で指定されたデリミタで区切られた複数のフィールドの値を連結したものです。

    説明

    フィールド名は、Writer によって書き込まれるフィールドです。コードレス UI では、プライマリキー列の構成 には、すでに Elasticsearch インデックスに存在するフィールドのみが表示されます。

    "parameter":{
    "primaryKeyInfo":{
    "type":"specific",
    "fieldDelimiter":",",
    "column":["col1","col2"]}
    }
  • プライマリキーなし (nopk):_id は、データが Elasticsearch に書き込まれる際にシステムによって自動生成されます。

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

はい

specific

esPartitionColumn

Elasticsearch の routing パラメーターを設定して、パーティション書き込みを有効にするかどうかを指定します。

  • パーティションを有効化:指定されたカラムの値をデリミタなしで連結し、その結果を routing 値として使用します。データを書き込む際、システムは指定されたシャードにドキュメントを挿入または更新します。パーティションを有効化する場合は、パーティションカラムを指定する必要があります。

    {    "esPartitionColumn": [
            {
                "name":"col1",
                "comment":"xx",
                "type":"STRING"
                }
            ],
        }
  • このパラメーターを構成しない場合、デフォルトで _id が routing に使用され、ドキュメントが均等に分散され、データスキューを防ぐのに役立ちます。

いいえ

false

enableWriteNull

ソースの null フィールドを Elasticsearch に書き込むかどうかを指定します。有効な値:

  • true:null フィールドを書き込みます。同期後、Elasticsearch の対応フィールドの値は null になります。

  • false:null フィールドを書き込みません。フィールドは Elasticsearch ドキュメントに表示されません。

いいえ

true

付録 2:Elasticsearch への配列の書き込み

ソースデータを Elasticsearch に配列として書き込むには、次の 2 つの方法のいずれかを使用できます。

  • JSON 形式でデータを解析

    たとえば、ソースデータが "[1,2,3,4,5]" の場合、json_array=true を設定してデータを解析します。その後、Elasticsearch に配列として書き込まれます。

    "parameter" : {
      {
        "name":"docs_1",
        "type":"keyword",
        "json_array":true
      }
    }
  • デリミタを使用してデータを解析

    たとえば、ソースデータが "1,2,3,4,5" の場合、splitter="," を設定してデータを解析します。その後、Elasticsearch に配列として書き込まれます。

    説明

    タスクは 1 つのデリミタのみをサポートします。splitter パラメーターはタスク全体でグローバルであるため、複数の配列フィールドに対して異なるデリミタを構成することはできません。たとえば、ソースデータに col1="1,2,3,4,5" および col2="6-7-8-9-10" というカラムが含まれている場合、各カラムに対して個別のデリミタを構成することはできません。

    "parameter" : {
          "column": [
            {
              "name": "docs_2",
              "array": true,
              "type": "long"
            }
          ],
          "splitter":","// 注:splitter パラメーターは column パラメーターと同じレベルに配置する必要があります。
    }

付録 3:シナリオ例

シナリオ 1:全データプル

  • 背景情報:Elasticsearch ドキュメント全体を単一フィールドにプルします。

  • 構成例:

    
    ## reader:Elasticsearch の元データ
    "hits": [
        {
            "_index": "mutiltest_1",
            "_type": "_doc",
            "_id": "IXgdO4MB4GR_1DmrjTXP",
            "_score": 1.0,
            "_source": {
                "feature1": "value1",
                "feature2": "value2",
                "feature3": "value3"
            }
        }]
    
    ## Data Integration Elasticsearch reader 構成
    "parameter": {
      "column": [
          "content"
      ],
      "full":true
    }
    
    ## writer 結果:送信先に 1 行 1 カラムを書き込みます。
    {"_index":"mutiltest_1","_type":"_doc","_id":"IXgdO4MB4GR_1DmrjTXP","_source":{"feature1":"value1","feature2":"value2","feature3":"value3"},"sort":["IXgdO4MB4GR_1DmrjTXP"]}

シナリオ 2:ネストまたはオブジェクトフィールドプロパティの同期

  • 背景情報:object または nested フィールドのプロパティにパスを使用してアクセスします。

  • 構文:

    • property

    • property.sub-property

    • property[0].sub-property

  • コードエディタ構成:

    "multi":{
        "multi":true
    }
    説明

    この機能はコードレス UI ではサポートされていません。

  • 構成例:

    ## reader: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 構成
    "parameter": {
      "column": [
          "level1",
          "level1.level2",
          "level1.level2[0]",
          "level1.level2.level3"
      ],
      "multi":{
            "multi":true
        }
    }
    
    ## writer 結果:1 行、4 カラム
    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
    説明
    • パス内の先祖ノードが配列の場合、結果は null になります。たとえば、level1.level2.level3 を取得すると、level2 が配列であるため null が返されます。プロパティにアクセスするには、level1.level2[0].level3 または level1.level2[1].level3 のようにインデックスを指定する必要があります。level1.level2[*].level3 というワイルドカード構文はサポートされていません。

    • ピリオド(.)を含むキーはサポートされていません。たとえば、データが {"level1.level2":{"level3":"testlevel3_1"}} の場合、結果は null になります。

シナリオ 3:配列プロパティを複数の行に分割

  • 背景情報:1 対多の関係の場合、配列を展開して各要素を別々の行に分割できます。

  • 構文:property[*].sub-property

  • 例: { "splitKey": [1, 2, 3, 4, 5] } などのソースデータは、各配列要素を 1 行ずつ含む 5 行に変換されます。

  • コードエディタ構成:

    "multi":{   
           "multi":true,    
            "key": "headers"
    }
    説明
    • コードレス UI では、複数行配列カラム名の分割 パラメーターを設定することで、同じ効果を得られ、対応するスクリプト構成が自動生成されます。

    • key で指定されたプロパティの値はリストである必要があります。そうでない場合、エラーが発生します。

  • 構成例:

    ## reader: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 構成
    {
       "column":[
          "headers[*].remoteip"
      ]
      "multi":{
          "multi":true,
          "key": "headers"
      }
    }
    
    ## writer 結果:4 行
    192.0.2.1
    192.0.2.2
    192.0.2.3
    192.0.2.4

シナリオ 4:配列プロパティの重複排除およびマージ

  • 背景情報:配列要素の重複を排除し、カンマ区切りの文字列にマージします。これは name1.name2 のようなサブプロパティにも適用できます。重複排除は、各要素の toString() 結果に基づいて行われます。

  • 構文:property[]

    カラム名に [] を含めると、この重複排除およびマージ操作がトリガーされます。

  • コードエディタ構成:

    "multi":{
        "multi":true
    }
    説明

    この機能はコードレス UI ではサポートされていません。

  • 構成例:

    ## reader:Elasticsearch の元データ
    "hits": [
    {
        "_index": "mutiltest_1",
        "_type": "_doc",
        "_id": "4nbUOoMB4GR_1Dmryj8O",
        "_score": 1.0,
        "_source": {
            "feature1": [
                "value1",
                "value1",
                "value2",
                "value2",
                "value3"
            ]
        }
    }
    ]
    ## Data Integration Elasticsearch reader 構成
    "parameter": {
      "column":[
            "feature1[]"
      ],
      "multi":{
            "multi":true
        }
    }
    
    ## writer 結果:1 行、1 カラム
    "value1,value2,value3"

シナリオ 5:複数プロパティの選択的同期

  • 背景情報:指定されたリスト内の最初の null でないプロパティ値を返します。すべてのプロパティが null または存在しない場合は、null が返されます。

  • 構文:property1|property2|...

    カラム名にパイプ(|)文字を含めると、このマルチプロパティ選択がトリガーされます。

  • コードエディタ構成:

    "multi":{    
        "multi":true
    }
    説明

    この機能はコードレス UI ではサポートされていません。

  • 構成例:

    ## reader: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 構成
    "parameter": {
      "column":[
            "feature1|feature2|feature3"
      ],
      "multi":{
            "multi":true
        }
    }
    
    ## writer 結果:1 行、1 カラム
    "feature1"

シナリオ 6:複数プロパティのマージおよび同期

  • 背景情報:複数のプロパティ値を連結して、単一のカンマ区切り文字列にします。

  • 構文:property1,property2,...

    カラム名にカンマ(,)を含めると、このマルチプロパティマージ操作がトリガーされます。

  • コードエディタ構成:

    "multi":{
        "multi":true
    }
    説明

    この機能はコードレス UI ではサポートされていません。

  • 構成例:

    ## reader: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 構成
    "parameter": {
      "column":[
            "feature1,feature2,feature3"
      ],
      "multi":{
            "multi":true
        }
    }
    
    ## writer 結果:1 行、1 カラム
    "feature1,[1,2,3],{\"child\":\"feature3\"}"

参考資料

Data Integration は他にも多くのデータソースをサポートしています。完全なリストについては、「サポートされるデータソースおよび同期ソリューション」をご参照ください。