Apache Drill-KVGEN方法出现错误

时间:2018-11-22 10:48:44

标签: apache apache-drill mapr

我有一个巨大的数据集,其中的每条记录都具有类似于下面的json数据-

  

{“ project”:{“ id”:“ 2625”,“ createDate”:1542597000000,“ rank”:0,“ highlight”:false,“ isDisplay”:true,“ isNewProject”:true,“ propertyId” :2231,“ districts”:{“ id”:41,“ name”:“ abc”,“ region”:“ 123”}}}

当我尝试在apache演练中使用select kvgen(t.project) from dfs.filePath t生成键值对时,出现错误-

  

DrillRuntimeException:Mappify / kvgen不支持异构值类型。输入映射中的所有值都必须是同一类型。字段[createDate]具有不同的类型[minor_type:BIGINT模式:可选]

看来,drill期望所有值都属于同一类型。但是该怎么做呢?钻中有任何可用功能吗?

我的钻取版本是1.9.0

2 个答案:

答案 0 :(得分:1)

尝试将会话选项destruct a设置为true。

https://drill.apache.org/docs/json-data-model/

答案 1 :(得分:1)

我知道了。如果json是嵌套的,则KVGEN方法不起作用。 要使其正常运行,可以遵循两种方法-

  • 从外部取出嵌套的json
  

{“ project”:{“ id”:“ 2625”,“ createDate”:1542597000000,“ rank”:0,“ highlight”:false,“ isDisplay”:true,“ isNewProject”:true,“ propertyId” :2231},“地区”:{“ id”:41,“名称”:“ abc”,“区域”:“ 123”}}

,然后将KVGEN方法应用为select kvgen(t.project) from dfs.filePath t

  • 首先在内部json上应用kvgen方法,然后使用嵌套查询,如下所示

    select tbl2.col1.id, tbl2.col2.value from (select tbl1.project as col1, flatten(kvgen(tbl1.project.districts)) col2 from dfs.filePath tbl1) tbl2

正如@ arina-yelchiyeva正确提到的那样,会话选项store.json.all_text_mode需要设置为true。