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
1 対多の関係の場合、配列プロパティを展開して、その要素を複数の行に分割します。
property[*].sub-property
文字列配列の要素をマージおよび重複排除し、単一のプロパティにまとめます。
property[]
複数のプロパティを単一のプロパティに結合します。
property1,property2
リスト内の最初の null でないプロパティを選択します。
property1|property2
-
データソースの追加
DataWorks で同期タスクを開発する前に、「データソース管理」の手順に従って、必要なデータソースを DataWorks に追加する必要があります。DataWorks コンソールでパラメーターの説明を確認し、データソースを追加する際の各パラメーターの意味を理解してください。
データ同期タスク
同期タスクの設定エントリポイントおよび手順については、以下の構成ガイドをご参照ください。
オフライン同期タスク(単一テーブル)
-
「コードレス UI でのタスク構成」または「コードエディタでのタスク構成」をご参照ください。
-
完全なパラメーターリファレンスおよびスクリプトデモについては、「付録 1:スクリプトデモおよびパラメーターの説明」をご参照ください。
リアルタイム書き込みタスク(単一テーブル)
「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 スクロールコンテキストをページネーション中に維持する時間を指定します。
|
はい |
なし |
|
strictMode |
厳格モードを有効にするかどうかを指定します。 |
いいえ |
true |
|
sort |
結果をソートするフィールド。 |
いいえ |
なし |
|
retryCount |
失敗した操作のリトライ回数。 |
いいえ |
30 |
|
connTimeOut |
クライアント接続タイムアウト(ミリ秒単位)。 |
いいえ |
600,000 |
|
readTimeOut |
クライアント読み取りタイムアウト(ミリ秒単位)。 |
いいえ |
600,000 |
|
multiThread |
HTTP リクエストに複数のスレッドを使用するかどうかを指定します。 |
いいえ |
true |
|
preemptiveAuth |
HTTP リクエストにプリエンプティブ認証を使用するかどうかを指定します。 |
いいえ |
false |
|
retrySleepTime |
リトライ間隔(ミリ秒単位)。 |
いいえ |
10,000 |
|
discovery |
ノードディスカバリーを有効にするかどうかを指定します。
|
いいえ |
false |
|
compression |
GZIP を使用してリクエストボディを圧縮するかどうかを指定します。GZIP を使用する場合は、Elasticsearch ノードで http.compression 設定を有効にする必要があります。 |
いいえ |
false |
|
dateFormat |
同期するフィールドが日付型で、フィールドマッピングにフォーマットが指定されていない場合は、dateFormat パラメーターを構成する必要があります。この構成には、同期する日付型フィールドのすべてのフォーマットを含める必要があります。例: |
いいえ |
なし |
|
full |
ドキュメントの全内容を単一フィールドとして送信先に同期するかどうかを指定します。詳細については、「シナリオ 1:全データプル」をご参照ください。 |
いいえ |
なし |
|
multi |
5 つのユースケースを持つ高度な機能です。 |
いいえ |
なし |
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 |
書き込み前に送信先インデックスを削除して再作成するかどうかを指定します。
|
いいえ |
false |
|
batchSize |
Elasticsearch への 1 バッチあたりの書き込みドキュメント数。 |
いいえ |
1,000 |
|
trySize |
Elasticsearch への書き込み失敗後のリトライ回数。 |
いいえ |
30 |
|
timeout |
クライアントタイムアウト期間。 |
いいえ |
600,000 |
|
discovery |
タスクのノードディスカバリーを有効にするかどうかを指定します。
|
いいえ |
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 です。
システムはエイリアスを実際のインデックス名に解決します。エイリアスを使用して、インデックス移行、複数のインデックスにわたる統一クエリ、ビューのような機能を実装できます。 |
いいえ |
append |
|
settings |
インデックス作成設定。公式 Elasticsearch 設定と同じ形式です。 |
いいえ |
なし |
|
column |
column パラメーターは、ドキュメント内のフィールドを構成します。各フィールドに対して、name や type などの基本プロパティに加え、Analyzer、Format、Array などの高度なプロパティを設定できます。 Elasticsearch でサポートされているフィールドタイプは次のとおりです。
カラムタイプに関する注意事項:
column 内のフィールドに対して type 以外の Elasticsearch 属性を構成するには、
ソースデータを Elasticsearch に配列として書き込む場合は、JSON 形式で解析するか、指定されたデリミタを使用して解析できます。詳細については、「付録 2:Elasticsearch への配列データの書き込み」をご参照ください。 |
はい |
なし |
|
dynamic |
Elasticsearch の動的マッピングを使用して、ドキュメント内の新しいフィールドのマッピングを自動的に追加するかどうかを指定します。
Elasticsearch 7.x のデフォルト type は _doc です。自動マッピングを使用する場合は、タイプを _doc に設定し、esVersion を スクリプトモードに切り替えて、バージョンパラメーターを追加する必要があります: 重要
フィールドマッピングエラーが発生した場合は、このパラメーターを有効にして問題を解決できる可能性があります。ただし、これによりフィールドタイプが期待と異なるものになったり、データ異常が発生したりする可能性があります。有効にする前に、データ構造に関するリスクを評価してください。 |
いいえ |
false |
|
actionType |
書き込みアクションタイプを指定します。有効な値は index および update です。
|
いいえ |
index |
|
primaryKeyInfo |
Elasticsearch におけるドキュメントプライマリキーの決定方法を指定します。
|
はい |
specific |
|
esPartitionColumn |
Elasticsearch の routing パラメーターを設定して、パーティション書き込みを有効にするかどうかを指定します。
|
いいえ |
false |
|
enableWriteNull |
ソースの 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 は他にも多くのデータソースをサポートしています。完全なリストについては、「サポートされるデータソースおよび同期ソリューション」をご参照ください。