【问题标题】:Newline based resultFormat for Druid native queries用于 Druid 原生查询的基于换行符的 resultFormat
【发布时间】:2019-12-17 18:16:29
【问题描述】:

我有一个用例,其中 Druid 查询产生数百万行,这使得将响应作为行流使用很明显,每个行都有一个新行。

Druid SQL over HTTP 对此有很好的支持,resultFormat 配置支持 objectLinesarrayLinescsv 启用基于流的响应消费。

但是,我使用的是 Druid 的原生查询,似乎没有考虑 resultFormat 配置。响应是一个 JSONArray 就像 -

[
  {
    "version" : "v1",
    "timestamp" : "2012-01-01T00:00:00.000Z",
    "event" : {
      "country" : <some_dim_value_one>,
      "device" : <some_dim_value_two>,
      "total_usage" : <some_value_one>,
      "data_transfer" :<some_value_two>,
      "avg_usage" : <some_avg_usage_value>
    }
  },
  {
    "version" : "v1",
    "timestamp" : "2012-01-01T00:00:12.000Z",
    "event" : {
      "dim1" : <some_other_dim_value_one>,
      "dim2" : <some_other_dim_value_two>,
      "sample_name1" : <some_other_value_one>,
      "sample_name2" :<some_other_value_two>,
      "avg_usage" : <some_other_avg_usage_value>
    }
  },
...
]

此响应不包含换行符,难以作为流处理。它需要下载整个结果集,然后使用jq 等工具进行解析,以提取每行的行。

P.S 我已经测试过jd --stream,它又不是很快。因此想知道是否有任何东西可以将本机查询结果作为换行符分隔的行。

【问题讨论】:

    标签: sql json database jq druid


    【解决方案1】:

    如果你有足够的内存,最简单的就是使用:

    jq -sc '.[]'
    

    如果您没有足够的 RAM,请使用:

    jq -cn --stream 'fromstream(1|truncate_stream(inputs))'
    

    【讨论】:

    • 谢谢!我没有足够的 RAM,因此不能使用 1。而且jq --stream 的性能不是很好。
    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 2020-11-29
    • 2021-08-19
    • 2021-11-22
    • 1970-01-01
    • 2013-04-24
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多