簡體   English   中英

Jolt遞歸變換如何變平

[英]Jolt recursive transformation how to flatten

我有以下 Elasticsearch 結果:

{
    "took": 16,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 77753,
        "max_score": 0,
        "hits": []
    },
    "aggregations": {
        "my_agg1": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": "a",
                    "doc_count": 77739,
                    "my_agg2": {
                        "doc_count_error_upper_bound": 0,
                        "sum_other_doc_count": 0,
                        "buckets": [
                            {
                                "key": 777,
                                "doc_count": 77721,
                                "my_agg3": {
                                    "doc_count_error_upper_bound": 0,
                                    "sum_other_doc_count": 0,
                                    "buckets": [
                                        {
                                            "key": "1234",
                                            "doc_count": 48889
                                        },
                                        {
                                            "key": "5678",
                                            "doc_count": 25439
                                        },
                                        {
                                            "key": "9101",
                                            "doc_count": 3193
                                        },
                                        {
                                            "key": "9111",
                                            "doc_count": 196
                                        }
                                    ]
                                }
                            },
                            {
                                "key": 888,
                                "doc_count": 17,
                                "my_agg3": {
                                    "doc_count_error_upper_bound": 0,
                                    "sum_other_doc_count": 0,
                                    "buckets": [
                                        {
                                            "key": "1234",
                                            "doc_count": 9
                                        },
                                        {
                                            "key": "1233",
                                            "doc_count": 4
                                        },
                                        {
                                            "key": "1244",
                                            "doc_count": 3
                                        },
                                        {
                                            "key": "1230",
                                            "doc_count": 1
                                        }
                                    ]
                                }
                            },
                            {
                                "key": 999,
                                "doc_count": 1,
                                "my_agg3": {
                                    "doc_count_error_upper_bound": 0,
                                    "sum_other_doc_count": 0,
                                    "buckets": [
                                        {
                                            "key": "1261",
                                            "doc_count": 1
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    "key": "s",
                    "doc_count": 6,
                    "my_agg2": {
                        "doc_count_error_upper_bound": 0,
                        "sum_other_doc_count": 0,
                        "buckets": [
                            {
                                "key": 888,
                                "doc_count": 6,
                                "my_agg3": {
                                    "doc_count_error_upper_bound": 0,
                                    "sum_other_doc_count": 0,
                                    "buckets": [
                                        {
                                            "key": "1200",
                                            "doc_count": 4
                                        },
                                        {
                                            "key": "1210",
                                            "doc_count": 1
                                        },
                                        {
                                            "key": "1216",
                                            "doc_count": 1
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

我想像這樣壓平到一張桌子......

a, 777, 1234
a, 777, 5678
a, 777, 9101
a, 777, 9111
a, 888, 1234
a, 888, 1233
a, 888, 1244
a, 888, 1230
a, 999, 1261
s, 888, 1200
s, 888, 1210
s, 888, 1216

震動可以嗎?

實際上,它可以制作“csv”樣式的輸出,但它需要兩個班次。 第一個轉換為每個“agg”構建數據,然后第二個轉換將它們轉換為輸出數組。

規格

[
  {
    "operation": "shift",
    "spec": {
      "aggregations": {
        "my_agg1": {
          "buckets": {
            "*": {
              "my_agg2": {
                "buckets": {
                  "*": {
                    "my_agg3": {
                      "buckets": {
                        "*": {
                          "key": "agg3[]",
                          "@(3,key)": "agg2[]",
                          "@(6,key)": "agg1[]"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "agg1": {
        "*": "[&][0]"
      },
      "agg2": {
        "*": "[&][1]"
      },
      "agg3": {
        "*": "[&][2]"
      }
    }
  }
]

生產

[ 
  [ "a", 777, "1234" ], 
  [ "a", 777, "5678" ], 
  [ "a", 777, "9101" ], 
  [ "a", 777, "9111" ], 
  [ "a", 888, "1234" ], 
  [ "a", 888, "1233" ], 
  [ "a", 888, "1244" ], 
  [ "a", 888, "1230" ], 
  [ "a", 999, "1261" ], 
  [ "s", 888, "1200" ], 
  [ "s", 888, "1210" ], 
  [ "s", 888, "1216" ] 
]

伊什。 “遞歸”不是問題,輸出表/ csv 格式是。 它可以產生像

{
  "a" : {
    "777" : [ "1234", "5678", "9101", "9111" ],
    "888" : [ "1234", "1233", "1244", "1230" ],
    "999" : [ "1261" ]
  },
  "s" : {
    "888" : [ "1200", "1210", "1216" ]
  }
}

鑒於此規范

[
  {
    "operation": "shift",
    "spec": {
      "aggregations": {
        "my_agg1": {
          "buckets": {
            "*": {
              "my_agg2": {
                "buckets": {
                  "*": {
                    "my_agg3": {
                      "buckets": {
                        "*": {
                          "key": "@(7,key).@(4,key)[]"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM