动机:我想将数据加载到 Apache Drill。我知道 Drill 可以处理 JSON 输入,但我想看看它在 Parquet 数据上的表现。
有什么方法可以做到这一点,而无需先将数据加载到 Hive 等中,然后使用其中一个 Parquet 连接器生成输出文件?
动机:我想将数据加载到 Apache Drill。我知道 Drill 可以处理 JSON 输入,但我想看看它在 Parquet 数据上的表现。
有什么方法可以做到这一点,而无需先将数据加载到 Hive 等中,然后使用其中一个 Parquet 连接器生成输出文件?
Kite支持通过其命令行实用程序将 JSON 导入 Avro 和 Parquet 格式,kite-dataset
.
首先,您将推断 JSON 的架构:
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 作业进行导入。
您实际上可以使用 Drill 本身从任何查询的输出中创建 parquet 文件。
create table student_parquet as select * from `student.json`;
上面的行应该足够好了。Drill 根据字段中的数据解释类型。您可以替换自己的查询并创建 parquet 文件。
要完成@rahul 的答案,您可以使用 Drill 来执行此操作 - 但我需要在查询中添加更多内容才能使用 Drill 开箱即用。
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`
让它工作。
我认为原因是镶木地板是“列”商店,因此您需要列。默认情况下不是 JSON,因此您需要对其进行转换。
问题是我必须知道我的 json 模式,并且我必须构建选择以包含所有可能性。如果有人知道更好的方法来做到这一点,我会很高兴。