当在Redash中使用Elasticsearch作为数据源时遇到的问题

由于Redash作为数据源可以使用Elasticsearch,因此我尝试了一下,发现了一些问题。

环境

Redash(v7.0.0):红色用户界面(v7.0.0)
Elasticsearch(v7.3.2):弹性搜索引擎(v7.3.2)

請問一下

无法将 Elasticsearch 查询结果正确地(按预期)转化为表格形式。

当在Redash中执行查询时,通过QueryRunner来发出查询并显示结果,如下所示。

从画面上执行查询 → 查询运行器 → Elasticsearch → 查询运行器 → 以表格形式在画面上显示结果。

我确认了Elasticsearch查询结果与预期相符,因此我发现了问题所在:无法通过QueryRunner将Elasticsearch查询结果解析为表格形式。

执行多个聚合查询的结果

执行嵌套了下列聚合的查询。

{
    "index": "インデックス名",
    "size": 1000,
    "aggs": {
        "1st": {
            "terms": {
                "field": "LogDate"
            },
            "aggs": {
                "2nd": {
                    "terms": {
                        "field": "SectionName"
                    }
                }
            }
        }
    }
}

从形象上来看,希望根据日期和部门进行汇总,得到以下的结果。

LogDateSectionName数2019年10月29日システム部102019年10月29日人事部202019年10月29日総務部302019年10月30日システム部1002019年10月30日人事部2002019年10月30日総務部300

然而,在Redash中表格的结果显示如下:
→ 现在无法清楚地知道是如何聚合以及数字代表了什么。

2nddoc_count(SectionNameの何かしらの値)110(SectionNameの何かしらの値)220(SectionNameの何かしらの値)330

JSON结构变得复杂的情况

例如,如果使用Sum Bucket Aggregation,那么Elasticsearch查询结果将在与桶的根节点相同层级上存在另一个桶。

{
    ・
    ・
    ・
   "aggregations": {
      "バケット名": {
         "buckets": [
            {
               バケット結果
            }
         ]
      },
      "SUM BUCKET名": {
          "value": 1000.0
      }
   }
}

结果只以“桶名”为基础以表格形式显示
※结果只以“桶名”为基础以表格形式显示,但若聚合是嵌套的情况下,将出现前述的问题
※“SUM 桶名”将被抛弃

应对方式 (duì shì)

要解决这些问题,有以下一种选择:
1. 修改现有的Redash源代码或添加扩展程序来进行程序适配。
可以参考扩展程序的适配方法,具体可参考”扩展Redash的QueryRunner”。
2. 提出问题报告并等待更新(或自己进行修复)。

总结

如果数据源是Elasticsearch,那么选择Kibana的情况很多吗?从发生的问题的行为(作为查询模式,应该是绝对正确的)来看,它几乎没有被使用吗?

如果选择将数据源设为Elasticsearch,就不要使用Redash。
如果要使用Redash,则不要将数据源设为Elasticsearch,如果必须使用,只能使用简单的查询。

我感觉以这种方式实现更加有效。

闲谈

我把数据源改成了Kibana,想着结果会有所变化,试了一下,但是由于只是在Kibana的查询中进行处理,所以结果是相同的。

数据源并不是Kibana,而只是能够使用针对Kibana编写的查询的行为。

由于这样并非如此,需要注意一下。并不能通过Kibana获得结果。

从画面上执行查询 → 查询运行器 → Kibana(Elasticsearch)→ 查询运行器 → 在画面上以表格形式展示结果。

广告
将在 10 秒后关闭
bannerAds