【问题标题】:Apache Drill error selecting flatten kvgen valueApache Drill错误选择flatten kvgen值
【发布时间】:2016-04-13 12:02:42
【问题描述】:

我有一个具有以下结构的 json 文件:

[{
    "metric" : "movie.Guns",
    "tags" : {
        "channel" : "143"
    }
    "dps" : {
        "1448942400" : 2.5174216027874565,
        "1448943000" : 4.378333333333333,
        "1448943600" : 4.04,
        "1448944200" : 4.805
    }
 }
....
]

我正在尝试使用 Apache Drill 从中提取一些数据。基本上我需要有 4 列:指标、通道、时间戳和值。

上面的例子结果应该是:

metric,     channel, timestamp,  value
movie.Guns, 143    , 1448942400, 2.5174216027874565
movie.Guns, 143    , 1448943000, 4.378333333333333
movie.Guns, 143    , 1448943600, 4.04
movie.Guns, 143    , 1448944200, 4.805

我已经编写了以下 sql 来实现这一点:

select a.metric, a.channel, a.dps.key, a.dps.value from
  (select flat.channel, flat.metric, flat.dps dps from 
    (select t.tags.channel as channel, t.metric, FLATTEN(KVGEN(t.dps)) as  dps from dfs.`/Users/Home/Downloads/tmsdb.json` t)

由于某种原因,问题是a.dps.value 列。如果此列未返回其工作正常。只要我带上它,我就会收到错误消息ARSE ERROR: Encountered ". value" at line 2, column 45...

如果我只选择a.dps,我会得到像{"key":"1448942400","value":2.5174216027874565} 这样的值,如果选择a.dps.key,它会返回正确的值。

不确定问题出在哪里。

【问题讨论】:

    标签: sql apache-drill


    【解决方案1】:

    发帖一分钟后我找到了答案:)

    要返回正确的结果,应该像这样选择value 列:

    select a.metric, a.channel, a.dps.key, a.dps.`value` ...
    

    【讨论】:

    • 是的,value 是保留字,所以需要用反引号括起来
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2016-08-18
    • 1970-01-01
    相关资源
    最近更新 更多