Elasticsearch - экспорт в CSV с использованием jq - PullRequest
0 голосов
/ 23 ноября 2018

Я экспортирую данные из Elasticsearch в CSV.Я взял свой код JSON из элемента запроса визуализации, выполнил его с помощью поиска XGET curl и передал его в 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": []}}}'

Фрагмент вывода, чтобы выделить мой вопрос:

"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

1 Ответ

0 голосов
/ 23 ноября 2018

Развертывание сверху вниз:

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

выход:

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

Или ...

... если вы готовы взятьриск:

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