我可以将不同文件格式的数据保存在同一个配置单元表中吗?

Posted

技术标签:

【中文标题】我可以将不同文件格式的数据保存在同一个配置单元表中吗?【英文标题】:Can I keep data of different file formats in same hive table? 【发布时间】:2017-11-23 15:59:31 【问题描述】:

我正在接收 csv、xml、json 等格式的数据,并且我想将所有文件保存在同一个配置单元表中。这可以实现吗?

【问题讨论】:

【参考方案1】:

Hive 要求一个表的所有文件使用相同的分隔符、应用相同的压缩等。因此,您不能在具有多种格式的文件之上使用 Hive 表。

您可能想要使用的解决方案是

为每种文件格式创建一个单独的表 (json/xml/csv) 为上面创建的 3 个表的 UNION 创建一个视图。

这样,数据的消费者只需查询一个视图/对象,如果这是您要查找的。​​p>

【讨论】:

错误。您可以创建一个分区表stored as Parquet,然后alter table 将默认值更改为 CSV(不将更改级联到现有分区),然后创建新分区。但我承认这是一个非常非常肮脏的黑客攻击。 此外,压缩选项是动态管理的——如果同一个文件夹包含带有.csv 的文件和带有.csv.gz 的文件,那么将使用适当的压缩编解码器读取每种类型。【参考方案2】:

是的,您可以通过组合不同的外部表来实现这一点。

由于需要具有不同规范的不同 SerDes 来读取不同文件中的列,因此您需要为每种类型的文件(和表)创建一个外部表。然后可以按照 Ramesh 的建议,使用 UNION 将来自这些外部表中的每一个的数据组合到一个视图中。然后可以使用该视图来读取这些内容,例如,您可以将数据插入托管表中。

【讨论】:

以上是关于我可以将不同文件格式的数据保存在同一个配置单元表中吗?的主要内容,如果未能解决你的问题,请参考以下文章

保存从配置单元表中的 oracle 查询创建的 Spark DataFrame?

在jetstream更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中

AWS EMR - 将数据帧保存到 S3 上的配置单元外部表中 - 出现内存泄漏错误

将 Spark 数据帧保存为 Hive 中的动态分区表

如何使用上下文表作为模式将文本文件保存到配置单元

如何将配置单元查询结果以json格式存储在文件中?