如何使用外部架构(如 Avro)将 CSV 文件导入 HIVE?
How can I import CSV files into HIVE using an external schema (like Avro)?
我正在将压缩的 csv-like 日志文件(分隔符分隔,没有 header)导入 HDFS,并希望使用 HIVE 聚合它们。但是,我喜欢将(声明性)模式与聚合查询分开的想法,因为这是一种跟踪模式历史的简洁方法。
有没有一种(直接)方法可以使用外部架构(如 Avro)将 csv 文件导入 HIVE?如果没有,是否有更好的方法分两步完成,还是我只能在 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 格式。但是,我发现通过命令行 this is also done via HIVE. Using the Avro tools 非常适合 JSON 但不适用于 CSV。
我最终使用 Apache Kite
, a good tutorial can be found on kitesdk.org 完成了此操作。
首先,您需要从 Avro 模式创建 Hive table:
kite-dataset create sandwiches -s sandwich.avsc
然后就可以将csv数据导入到table.
kite-dataset csv-import sandwiches.csv sandwiches
这让我为我的资源声明和版本模式,并从命令行将 csv 文件导入 Hive。
我正在将压缩的 csv-like 日志文件(分隔符分隔,没有 header)导入 HDFS,并希望使用 HIVE 聚合它们。但是,我喜欢将(声明性)模式与聚合查询分开的想法,因为这是一种跟踪模式历史的简洁方法。
有没有一种(直接)方法可以使用外部架构(如 Avro)将 csv 文件导入 HIVE?如果没有,是否有更好的方法分两步完成,还是我只能在 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 格式。但是,我发现通过命令行 this is also done via HIVE. Using the Avro tools 非常适合 JSON 但不适用于 CSV。
我最终使用 Apache Kite
, a good tutorial can be found on kitesdk.org 完成了此操作。
首先,您需要从 Avro 模式创建 Hive table:
kite-dataset create sandwiches -s sandwich.avsc
然后就可以将csv数据导入到table.
kite-dataset csv-import sandwiches.csv sandwiches
这让我为我的资源声明和版本模式,并从命令行将 csv 文件导入 Hive。