为架构较少的avro文件创建配置单元表

时间:2015-01-23 04:34:03

标签: hive avro apache-crunch

我有多个avro文件,每个文件都有一个STRING。每个avro文件都是一行。如何编写hive表来使用位于单个目录中的所有avro文件。 每个文件都有一个大数字,因此我没有任何json类型的模式,我也可以关联。当我说架构较少时,我可能错了。但我无法找到一种让hive理解这些数据的方法。这可能很简单,但我失去了,因为我尝试了许多不同的方法而没有成功。我创建了指向json模式的表作为avro uri,但这不是这里的情况。 对于更多上下文文件是使用crunch api

编写的
final Path outcomesVersionPath = ...
pipeline.write(fruit.keys(), To.avroFile(outcomesVersionPath));

我尝试了以下创建表的查询,但没有正确读取数据

CREATE EXTERNAL TABLE test_table
ROW FORMAT
SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs:///somePath/directory_with_Ids'

2 个答案:

答案 0 :(得分:0)

如果您的数据集只有一个STRING字段,那么您应该可以通过将DDL更改为以下内容,使用一个名为data的列(或您想要的任何内容)从Hive中读取它。 / p>

CREATE EXTERNAL TABLE test_table
(data STRING)
ROW FORMAT
SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs:///somePath/directory_with_Ids'

然后用以下内容读取数据:

SELECT data FROM test_table;

答案 1 :(得分:0)

使用avro utilities jar查看任何给定二进制文件here的avro架构! 然后在创建表时链接模式文件。