【发布时间】:2015-08-06 18:29:02
【问题描述】:
我正在尝试考虑一些数据的 ETL 流程,这些数据可能会以 CSV 格式从数据源接收。
如果数据要始终采用 CSV 格式,这是否意味着它是“结构化的”正确的?就像我可以将它直接导入数据库并从本质上查询它,对吗?
如果 CSV 文件是结构化数据,那么我可以对其运行 Hive 查询来进行一些转换吗?
将 CSV 文件直接加载到数据库中,然后像 ELT 过程一样进行转换有什么缺点吗?
【问题讨论】:
标签: etl
我正在尝试考虑一些数据的 ETL 流程,这些数据可能会以 CSV 格式从数据源接收。
如果数据要始终采用 CSV 格式,这是否意味着它是“结构化的”正确的?就像我可以将它直接导入数据库并从本质上查询它,对吗?
如果 CSV 文件是结构化数据,那么我可以对其运行 Hive 查询来进行一些转换吗?
将 CSV 文件直接加载到数据库中,然后像 ELT 过程一样进行转换有什么缺点吗?
【问题讨论】:
标签: etl
在谈到从 Hive 查询中读取 CSV 文件时,不确定 ELT 概念是否真的适用。如果 T 很简单,这更像是在单个 INSERT-SELECT 查询中运行 T 和 L。
首先定义一个指向空 HDFS 目录的 EXTERNAL TABLE。然后将您的 CSV 文件推送到该目录中。现在您可以选择文件内容(当然,前提是表结构映射实际的 CSV 结构),即时转换数据,并将结果插入“托管”Hive 表中—— ORC、SequenceFile、AVRO 等等。
您可以选择加入其他表(查找、重复数据删除等),但请注意 Hive 优化器仍然非常粗糙,不要期望花哨的查询能够很好地执行(也不是所有简单的查询)。也期待一些尴尬的错误,每次升级都会出现一些令人讨厌的回归。
但是如果你的 T 需求真的很复杂,并且需要对临时数据集进行多步处理,我建议你学习 Pig 脚本。借助 HCatalog 接口,它可以在最后阶段批量加载 Hive 表。
~~
最后一句话:您的“结构化”CSV 可能包含嵌套的“结构化”字段,例如数组、结构、结构数组。 Hive 支持这些复杂的数据类型。
【讨论】: