是否有可能将不同的 csv 文件匹配到一个 hive 表中?

我有 53 个 csv 文件,每个文件都有不同的列名和内容。我想将 csv 文件中的所有数据写入 Hive 中包含所有必要列的一个大表中。因此,某些文件的列可能会留空。这取决于 csv 文件。不幸的是,我不知道如何处理这个问题。

是否可以将 csv 文件中的列名匹配到 Hive 表?我只在 csv 中找到了非动态列的解决方案。

我是否必须为每个文件设置一个表然后加入它们?

谢谢!

shengsheng321 回答:是否有可能将不同的 csv 文件匹配到一个 hive 表中?

我是否必须为每个文件设置一个表然后加入它们?

是的,为每个文件设置一个表并将文件放在每个表位置。

有些表可以合并。例如,如果您在一个 CSV 文件中有 col2,col2,col3,在第二个 CSV 文件中有 col1,col3,col4,col5(公共列在相同的位置,最后有额外的列),那么您可以创建具有列超集的单个表,第一个文件中不存在的列将被选为 NULL 而不是第二个文件中的 NULL,将两个文件放在同一个表位置。

您也可以将不同的文件(相同列的位置不同)组合到单个表位置(表应该具有与最宽文件中一样多的字符串列),然后在选择中您可以使用 INPUT__FILE__NAME 伪列,从中解析文件名并计算取决于它的列,例如这样的:

select 
case when INPUT__FILE__NAME rlike 'invoice\\.csv' then col1 
     when INPUT__FILE__NAME rlike 'transaction\\.csv' then col3
     else NULL
 end as invoice_nbr

创建所有表后,您可以根据需要加入它们或 UNION ALL + 聚合。

在这种情况下,更好的解决方案是使用 JSON 而不是 CSV:

  • JSON 包含名称,位置无关紧要
  • JSON 允许缺少属性
  • 如果某些属性不在 JSON 记录中,则返回 NULL 作为该记录的列值
  • 您可以将具有不同内容的 JSON 文件放在同一位置并创建一个包含列超集的表,请参阅如何创建表 answer 1answer 2answer 3
本文链接:https://www.f2er.com/24375.html

大家都在问