csv - 是否有可能将不同的 csv 文件匹配到一个配置单元表中?
问题描述
我有 53 个 csv 文件,每个文件都有不同的列名和内容。我想将 csv 文件中的所有数据写入 Hive 中的一个大表中,其中包含所有必要的列。因此,某些文件的列可能会留空。这取决于 csv 文件。不幸的是,我不知道如何处理这个问题。
是否有可能将 csv 文件中的列名与 Hive 表匹配?我只在 csv 中找到具有非动态列的解决方案。
我是否必须为每个文件设置一个表格并在之后加入它们?
谢谢!
解决方案
我是否必须为每个文件设置一个表格并在之后加入它们?
是的,为每个文件设置一个表并将文件放在每个表位置。
有些表可以合并。例如,如果您col2, col2, col3
在一个 CSV 文件和col1, col2, col3, col4, col5
第二个 CSV 文件中有(公共列在相同的位置,并且在末尾有额外的列),那么您可以创建具有列超集的单个表,第一个文件中不存在的列将被选为第二个文件中的 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:
推荐阅读
- powershell - Powershell 错误变量抛出“变量未分配”异常
- node.js - 用postgres在sequelize中通过嵌套对象值查找
- typescript - 如何告诉 TypeScript 允许列表中的多个字符串,每个字符串在展开参数中只允许一次?
- postgresql - 错误:未为索引 document_bt_id_sys_period_app_period_excl 定义函数 ammarkpos
- android - Android动画旋转属性不起作用
- python - 如何使图表更清晰
- javafx - 按键抽搐时的 KeyEvent
- c - 如何在 STM32F103C8T6 上使裸机 LED 闪烁?
- javascript - 调用函数时,预期 spy toggleStyle 已被调用
- kubernetes - Prometheus / Kubernetes 显示 InstanceDown / PrometheusTargetMissing