我正在将压缩的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却没有。
1条答案
按热度按时间q1qsirdb1#
最后我用的是
Apache Kite
,一个好的教程可以在kitesdk.org上找到。首先,需要从avro架构创建配置单元表:
然后可以将csv数据导入表中。
这让我为我的资源声明和版本架构,并从命令行将csv文件导入配置单元。