我正在尝试通过ETL过程来考虑一些可能以CSV格式从数据源接收的数据。
如果数据始终采用CSV格式,这意味着它“结构化”正确吗?就像我可以将它直接导入数据库并基本上查询它,对吧?
如果这是CSV文件是结构化数据的情况,那么我可以在其上运行Hive查询来进行一些转换吗?
将CSV文件直接加载到数据库中,然后像ELT过程一样进行转换是否有任何缺点?
答案 0 :(得分:1)
在谈到从Hive查询中读取CSV文件时,不确定ELT概念是否真的适用。它更像是在单个INSERT-SELECT查询中运行T和L,如果T很简单。
首先定义一个指向空HDFS目录的EXTERNAL TABLE。然后将CSV文件推送到该目录中。现在您可以选择文件内容(假设表结构映射当然的实际CSV结构),即时转换数据,并将结果插入“托管”Hive表中 - ORC,SequenceFile,AVRO,等等。
您可以选择加入其他表(查找,重复数据删除等),但要注意Hive优化器仍然非常粗糙,不要指望花哨的查询表现良好(也不是所有简单的查询)。还期待一些尴尬的错误,以及每次升级时的一些令人讨厌的回归。
但是如果您的T要求非常复杂,并且需要使用临时数据集进行多步处理,我建议您学习Pig脚本。使用HCatalog接口,它可以在最后阶段批量加载Hive表。
~~
最后一句话:您的“结构化”CSV可能包含嵌套的“结构化”字段,例如Arrays,Structs,Structs Arrays。 Hive支持这些复杂的数据类型。