字段引用标识符不得具有限定名称的形式

时间:2015-12-22 22:58:38

标签: json apache-drill

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

{
  "0.0.1":{
    "version":"0.0.1",
    "date_created":"2014-03-15"
  },
  "0.1.2":{
    "version":"0.1.2",
    "date_created":"2014-05-21"
  }
}

正如您所看到的,整个json文件只包含一个对象,该对象是一个映射,其中每个键都是版本号,值是带有version和date_created属性的新映射。

我想使用Apache Drill获取包含两列的列表:version和date_created

但由于键包含点(例如“0.0.1”),Drill会抛出以下错误:

Error: SYSTEM ERROR: UnsupportedOperationException: Unhandled field reference "0.0.1"; a field reference identifier must not have the form of a qualified name (i.e., with ".").

...运行这样的查询时:

SELECT KVGEN(t.*) FROM dfs.`D:/drill/sample-data/myjsonfile.json` AS t;

顺便说一句,你如何告诉KVGEN处理整个行,因为行对象是我们要转换的实际地图?

关于如何克服这个问题的任何想法?

更新

  • 所有地图键是否总是不同?对,他们是。但是我认为即使在他们没有的情况下,Drill也应该处理它们,每当它发现重复时,它应该保留最后一个(通常应该是大多数情况下最新的一个)。
  • 主要问题是JSON文件只包含一个大对象,因此只有1个记录(行),其所有属性都是每个版本数据的实际键。所以在使用KVGEN时没有子属性可以导航到;我们的想法是KVGEN处理整个记录对象,而不是它的子属性。

有人要求获取更多样本数据,请点击以下内容:

{
  "0.0.1":{
    "version":"0.0.1",
    "date_created":"2014-03-15"
  },
  "0.1.2":{
    "version":"0.1.2",
    "date_created":"2014-05-21"
  },
  "0.1.5":{
    "version":"0.1.5",
    "date_created":"2014-05-29"
  },
  "0.1.7":{
    "version":"0.1.7",
    "date_created":"2014-06-13"
  },
  "1.0.0":{
    "version":"1.0.0",
    "date_created":"2014-07-05"
  },
  "1.1.0":{
    "version":"1.1.0",
    "date_created":"2014-09-02"
  }
}

0 个答案:

没有答案