动机: 我想将数据加载到Apache Drill中。我知道Drill可以处理JSON输入,但是我想看看它在Parquet数据上的性能表现。
是否有任何方法可以在不先将数据加载到Hive等程序中,然后使用其中一个Parquet连接器生成输出文件的情况下实现这一点?
动机: 我想将数据加载到Apache Drill中。我知道Drill可以处理JSON输入,但是我想看看它在Parquet数据上的性能表现。
是否有任何方法可以在不先将数据加载到Hive等程序中,然后使用其中一个Parquet连接器生成输出文件的情况下实现这一点?
kite-dataset
将JSON导入到Avro和Parquet格式中。kite-dataset json-schema sample-file.json -o schema.avsc
然后,您可以使用该文件创建一个Parquet Hive表:
kite-dataset create mytable --schema schema.avsc --format parquet
最后,您可以将JSON加载到数据集中。
kite-dataset json-import sample-file.json mytable
您还可以导入存储在HDFS中的整个目录。在这种情况下,Kite将使用MR作业进行导入。create table student_parquet as select * from `student.json`;
上述代码已经足够好用了。Drill根据字段中的数据来解释类型。您可以替换自己的查询并创建一个parquet文件。
create table dfs.tmp.`filename.parquet` as select * from dfs.`/tmp/filename.json` t
我需要为它提供存储插件(dfs),"root"配置可以读取整个磁盘,但不可写。但是tmp配置(dfs.tmp)是可写的,并且写入/tmp。所以我写到那里。
但问题是,如果JSON嵌套或包含异常字符,我会得到一条晦涩的
org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR: java.lang.IndexOutOfBoundsException:
members: {id:123, name:"joe"}
, 我必须更改选择语句为:
select members.id as members_id, members.name as members_name
或
select members.id as `members.id`, members.name as `members.name`
以使其正常工作。