如何使用外部模式(如avro)将csv文件导入配置单元?

mbjcgjjk  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(506)

我正在将压缩的csv日志文件(分隔符分隔,没有标题)导入hdfs,并希望使用hive聚合它们。但是,我喜欢将(声明性)模式与聚合查询分离的想法,因为这是跟踪模式历史的一种干净方法。
有没有一种(直接)方法可以使用外部模式(比如avro)将csv文件导入到配置单元中?如果没有,有没有更好的方法分两步来完成,或者我只能在hql中指定文件结构?
到目前为止,我尝试在hive中同时使用avro和csv序列化,但没有成功。
我的csv文件 test.log.gz 像这样吗

val0|val1|val2||val3
val4|val5|val6||val7

我创建了一个avro模式 test.avsc ```
{
"type": "record",
"namespace": "test",
"name": "TestFile",
"fields": [
{ "name": "field0" , "type": "string", "doc": "Field 0" },
{ "name": "field1" , "type": "string", "doc": "Field 1" },
{ "name": "field2" , "type": "null", "doc": "N/A" },
{ "name": "field3" , "type": "string", "doc": "Field 3" }
]
}

我之所以要这样做,是因为我可以为(长)文件规范提供一个单独的位置,包括可读格式的字段描述。

#### 更新1:

我也在考虑将csv文件转换成avro格式。然而,我发现这也是通过Hive完成的。通过命令行使用avro工具对于json非常有用,但是对于csv却没有。
q1qsirdb

q1qsirdb1#

最后我用的是 Apache Kite ,一个好的教程可以在kitesdk.org上找到。
首先,需要从avro架构创建配置单元表:

kite-dataset create sandwiches -s sandwich.avsc

然后可以将csv数据导入表中。

kite-dataset csv-import sandwiches.csv sandwiches

这让我为我的资源声明和版本架构,并从命令行将csv文件导入配置单元。

相关问题