sshota
(shota)
January 16, 2020, 6:33am
1
お世話になります。
TSVBとMetricのnull値の取り扱いの差について教えてください。
たとえば以下のようなデータの場合で、testdate を Time field としてソートした場合に、value の Top Hit ( Size=1 , ORDER BY DESC ) をとると、以下のとおり差があります。
TSVB
_id=1のnullが無視され、_id=2の10が取得(表示)される
Metric
_id=1のnullが取得され、値なし(ハイフン)で表示される。
{
"_index": "sample-index",
"_type": "sample-type",
"_id": "1",
"_score": 1,
"_source": {
"title": "testdata-1",
"testdate": "2020-01-03T00:00:00+09:00",
"value": null
}
},
{
"_index": "sample-index",
"_type": "sample-type",
"_id": "2",
"_score": 1,
"_source": {
"title": "testdata-2",
"testdate": "2020-01-02T00:00:00+09:00",
"value": 10
}
},
{
"_index": "sample-index",
"_type": "sample-type",
"_id": "3",
"_score": 1,
"_source": {
"title": "testdata-3",
"testdate": "2020-01-01T00:00:00+09:00",
"value": 20
}
}
実現したいこと
TSVBでも、Metricのときと同じ動きをしてほしい(nullを捉えてほしい)です。
必要な設定などありましたら、ご教示いただけますと幸いです。
動作環境
Elasticsearch 7.3.0
Kibana 7.3.0
@sshota さん
TSVBとMetricのnull値の違い、サンプルデータを使ってこちらでも試してみました。確かにおっしゃるとおりTSVBだとソート後にnull値を除外した値が表示されますね。
TSVBのMetric表示結果
同じaggsをMetricビジュアライゼーションで表示
違いが生まれるのはTSVBの描画ロジックだと思われます。そもそもMetricビジュアライゼーションでは index_name/_search
APIを使っています。一方、TSVBは /api/metrics/vis/data
というAPIを呼び出しています (searchプラス何かしてる)、その結果はnullが返っているので、TSVBのJavascript部分でnull
を描画時に外すロジックが入っているのかと思われます (ここは推測)。
解決策の一つになるかわかりませんが、mapping
でnull_value
を明示するのはいかがでしょうか。例えば以下のマッピングを行うと、nullの場合にTSVBのMetricと、Metricでどちらも0
を表示できます。
PUT test_index
{
"mappings": {
"properties": {
"testdate": {"type": "date"},
"title": {"type": "text"},
"value": {
"type": "long",
"null_value": 0
}}}}
TSVBのMetric, null_value=0
Metricビジュアライゼーション, null_value=0
テスト時に使ったバルクリクエストも貼っておきます。
POST test_index/_bulk
{"index":{"_id":"1"}}
{"title":"testdata-1","testdate":"2020-01-03T00:00:00+09:00","value":null}
{"index":{"_id":"2"}}
{"title":"testdata-2","testdate":"2020-01-02T00:00:00+09:00","value":10}
{"index":{"_id":"3"}}
{"title":"testdata-3","testdate":"2020-01-01T00:00:00+09:00","value":20}
sshota
(shota)
February 7, 2020, 1:48am
3
@Koji_Kawamura さん
丁寧なご回答ありがとうございます。
ロジックの違いについても大変参考になりました。
ご教示いただいた ” mapping
で null_value
を指定 ” ですが
実現したいことが、nullの場合に0を表示したい、ではなくその逆で、nullの場合にTSVBでもnull(値なし)として表示してほしい、という内容なのです。
Dashboardで、ある時間に取れたデータをMetricで並べて横並びに見ることをしているのですが、TSVBだとnullを無視されてしまうので、値が取れていない項目があると、そのMetricだけほかと時間軸がずれてしまうということが発生しており、それの解消法を探しております。
@sshota さん
なるほど、そういうことだったのですね。
Dashboardには複数のMetricを並べて見るということですが、TSVBのMetricと、VisualizationのMetricを併用しなくてはならない理由があるのでしょうか?
全てのMetricをVisualizationのMetricで統一すれば、解決されるのでは、とも思えます。
おそらくTSVBを使わないといけない理由があるんですよね。
TSVBのMetricだと一つのVisualizationで2つMetricを表示することができる利点がありますが。
sshota
(shota)
February 7, 2020, 4:55am
5
@Koji_Kawamura さん
はい、おっしゃるとおりです。
諸般の事情により全てのMetricをTSVBで統一したかったのですが、本事象があるため現在は
ご指摘のとおり、VisualizationのMetricで統一することで対応をしております。
それでも
nullの場合にTSVBでもnull(値なし)として表示
ができるのであれば、今からでもTSVBへ変更したかったのですが、
ひとまずは現状で対応することにしたいと思います。
いろいろとご教示ありがとうございました。
1 Like
system
(system)
Closed
March 6, 2020, 4:55am
6
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.