【问题标题】:Create hive table for schema less avro files为架构少的 avro 文件创建配置单元表
【发布时间】:2015-03-22 02:10:48
【问题描述】:

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

【问题讨论】:

    标签: hive avro apache-crunch


    【解决方案1】:

    如果您的数据集只有一个 STRING 字段,那么您应该能够通过将 DDL 更改为:从 Hive 中读取一个名为 data(或任何您想要的)的列:

    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;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-01-20
        • 2019-02-08
        • 2018-09-03
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 2020-03-17
        • 2017-07-04
        • 2015-07-19
        相关资源
        最近更新 更多