Logstashで3階層のデータを生成したい

RDBMS上に3階層で構成されている表のデータを、
3階層のドキュメント構造でElasticsearchに反映させたいと考えています。

ほぼ以下のURLで語られているとおりなのですが、
このトピックのやりとりで解決したのかまでが不明で、
参考にして設定しても期待した形を実現できなかったため
質問させて下さい。

【RDBMS(MySQL)上の構造、データ】
表A->表B->表Cの3階層
表A->表Bは、1:N
表B->表Cは、1:N
表Bには表AのIDを持つ列がある
表Cには表BのIDを持つ列がある

【Elasticsearch上で実現したいこと】
以下のようなドキュメント構造でデータを保持したい。

{
 "表AのID" : "表AのIDの値",
 "表AのID以外の列" : "表AのID以外の列の値",
 "表B情報" : [
  {
   "表BのID" : "表BのIDの値",
   "表BのID以外の列" : "表BのID以外の列の値",
   "表Cの情報" : [
    {
     "表CのID" : "表CのIDの値",
     "表CのID以外の列" : "表CのID以外の列の値",
    }
   ]
  }
 ]
}

【Logstashの設定】

input jdbcプラグイン
表Aを更新日時のタイムスタンプで差分クロール

filter
(1)jdbc_streamingで表Bをクロール。
表B.表AのID情報列 = 表Aから取得したID値 を検索条件

(2)jdbc_streamingで表Cをクロール。
表C.表BのID情報列 = 表B((1)のjdbc_streaming)から取得したID値 を検索条件
・・・にしたいが、できなかったので、
表Aと表Bと表CをJOINした上で、表B.表AのID情報列 = 表A(input - JDBC)から取得したID値を検索条件に指定

output
elasticsearch
特別な設定無し。

先のURLを参考に
filter(1)にtarget=>"表B情報"
filter(2)にtarget=>"[表B情報][表C情報]"
のように書くと、表Cの情報は一切反映されませんでした。(表Bの情報までが反映される)

filter(1)にtarget=>"[表B情報][表B情報]"
filter(2)にtarget=>"[表B情報][表C情報]"
のように書くと、表Cの情報は反映されるものの、表Bの情報の構造が期待したものにならず、
以下のようになります。

{
 "表AのID" : "表AのIDの値",
 "表AのID以外の列" : "表AのID以外の列の値",
 "表B情報" : [
  {
   "表Bの情報" : [
    {
     "表BのID" : "表BのIDの値",
     "表BのID以外の列" : "表BのID以外の列の値",
    }
   ],
   "表Cの情報" : [
    {
     "表CのID" : "表CのIDの値",
     "表CのID以外の列" : "表CのID以外の列の値",
    }
   ]
  }
 ]
}

(Q1)前述のようなドキュメント構造で3階層のデータを反映する方法がありましたら教えて下さい。

(Q2)jdbc_streaming内のSQLで取得した情報を別のjdbc_streamingのパラメータとして使用することは、仕様上できないのでしょうか?

【環境】
Elasticsearch:7.9.1
Logstash:7.12.0 - OSS Only

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.