【问题标题】:Elasticsearch - exporting to CSV using jqElasticsearch - 使用 jq 导出到 CSV
【发布时间】:2019-04-26 06:31:10
【问题描述】:

我正在将数据从 Elasticsearch 导出到 CSV。我从可视化的请求元素中获取了我的 JSON 代码,通过 curl XGET 搜索执行它并将其通过管道传输到 jq。我的问题是 jq 如何处理这个输出。 暂时跳过 jq 部分,搜索的输出显示 aggs 有好几层。例如

curl -XGET "http://localhost:9200/kibana_sample_data_flights/_search" -H 'Content-Type: application/json' -d '{"aggs": {"2": {"date_histogram": {"field": "timestamp","interval":"30m","time_zone": "Europe/London","min_doc_count": 1},"aggs": {"3": {"terms": {"field": "FlightDelayType","size": 5,"order": {"_count": "desc"}}}}}},"size":0,"_source": {"excludes": []},"stored_fields": ["*"],"script_fields": {"hour_of_day": {"script": {"inline": "doc['timestamp'].value.hourOfDay","lang": "painless"}}},"docvalue_fields": [{"field": "timestamp","format": "date_time"}],"query": {"bool": {"must": [{"match_all": {}},{"match_all": {}},{"range": {"timestamp": {"gte": 1542804577190,"lte": 1542890977190,"format": "epoch_millis"}}}],"filter": [],"should": [],"must_not": []}}}'

输出的 sn-p 以突出显示我的问题:

"aggregations" : {
"2" : {
  "buckets" : [
    {
      "key_as_string" : "2018-11-21T12:30:00.000Z",
      "key" : 1542803400000,
      "doc_count" : 2,
      "3" : {
        "doc_count_error_upper_bound" : 0,
        "sum_other_doc_count" : 0,
        "buckets" : [
          {
            "key" : "No Delay",
            "doc_count" : 1
          },
          {
            "key" : "Weather Delay",
            "doc_count" : 1
          }
        ]
      }
    },

我似乎无法让我的 jq 代码横向向下到“3”下的层。我在这里真正想要发送到 CSV 的是关键的航班延误类型(例如天气延误)和计数。 (注意我省略了 -r 和 | @CSV 进行测试。) 到目前为止我的jq代码:

jq '.aggregations[].buckets[]'

返回:

    {
  "buckets": [
    {
      "key_as_string": "2018-11-21T12:30:00.000Z",
      "key": 1542803400000,
      "doc_count": 2,
      "3": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
          {
            "key": "No Delay",
            "doc_count": 1
          },
          {
            "key": "Weather Delay",
            "doc_count": 1
          }
        ]
      }
    },

我怎样才能得到下一层?

TIA

【问题讨论】:

标签: json elasticsearch export-to-csv jq


【解决方案1】:

从顶部向下钻取:

.aggregations[].buckets[]["3"].buckets[] | select( .key == "Weather Delay")

产量:

{
  "key": "Weather Delay",
  "doc_count": 1
}

或者...

...如果你愿意冒险:

.. | select(.key? == "Weather Delay")

【讨论】:

  • 感谢您的指点,这很有帮助。这现在给了我 .aggregations[].buckets[]["3"].buckets[] -(我的“3”周围的格式不正确。)我意识到我还需要包含第一个键条目。我想我可以把它简单地说成 .aggregations[].buckets[] | [.key] | .aggregations[].buckets[]["3"].buckets[] | [.key, .doc_count"] 但它不起作用。使用两个名为 key 的字段我看不到如何选择这两个值。因此输出数据将显示为:1542803400000,Weather Delay,1(我的格式为 CSV工作得很好,只是数据提取)TIA
  • 如果您要问一个新问题,请考虑创建一个新的 SO 问题。否则,如果您根据minimal reproducible example 指南修改此 Q 以澄清修改后的问题是什么,这将有所帮助。
猜你喜欢
  • 1970-01-01
  • 2020-09-23
  • 2022-01-23
  • 1970-01-01
  • 2019-01-15
  • 2021-07-12
  • 1970-01-01
  • 2018-03-22
  • 2021-10-27
相关资源
最近更新 更多