Hive 为无架构的avro文件创建配置单元表

Hive 为无架构的avro文件创建配置单元表,hive,avro,apache-crunch,Hive,Avro,Apache Crunch,我有多个avro文件,每个文件都有一个字符串。每个avro文件都是一行。如何编写配置单元表以使用位于单个目录中的所有avro文件。 每个文件中都有一个很大的数字,因此我没有任何可以关联的json模式。我说的少一点可能是错的。但我找不到让hive理解这些数据的方法。这可能很简单,但我迷路了,因为我尝试了许多不同的方法,但都没有成功。我创建了将json模式作为AVROURI指向的表,但这里的情况并非如此。 更多的上下文文件是使用crunch api编写的 final Path outcomesVer

我有多个avro文件,每个文件都有一个字符串。每个avro文件都是一行。如何编写配置单元表以使用位于单个目录中的所有avro文件。 每个文件中都有一个很大的数字,因此我没有任何可以关联的json模式。我说的少一点可能是错的。但我找不到让hive理解这些数据的方法。这可能很简单,但我迷路了,因为我尝试了许多不同的方法,但都没有成功。我创建了将json模式作为AVROURI指向的表,但这里的情况并非如此。 更多的上下文文件是使用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'

如果您的数据集只有一个
字符串
字段,则通过将DDL更改为以下值,您应该能够使用一个名为
数据
(或任何您想要的)的列从配置单元中读取它:

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;

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