【发布时间】:2018-11-06 00:57:45
【问题描述】:
我是 talend 新手,需要以下场景的指导:
我们有 10 个不同结构/模式的 Json 文件,需要加载到 Redshift db 中的 10 个不同的表中。
有没有一种方法可以编写通用脚本/作业来遍历每个文件并将其加载到数据库中?
例如:
-
文件名:abc_.json
表名:t_abc
-
文件名:xyz.json
表名:t_xyz
等等..
提前致谢
【问题讨论】:
标签: talend
我是 talend 新手,需要以下场景的指导:
我们有 10 个不同结构/模式的 Json 文件,需要加载到 Redshift db 中的 10 个不同的表中。
有没有一种方法可以编写通用脚本/作业来遍历每个文件并将其加载到数据库中?
例如:
文件名:abc_.json
表名:t_abc
文件名:xyz.json
表名:t_xyz
等等..
提前致谢
【问题讨论】:
标签: talend
使用 Talend Enterprise 版本 1 可以受益于动态架构。然而,根据我对 json-s 的经验,它们通常有点嵌套结构。因此,您必须弄清楚如何将它们弄平,一旦完成,它就会变成 1:1 的负载。但是,由于缺少动态架构,因此对于开放式工作室,这将不起作用。
基本上,您可以做的是:编写一些将您的 JSON 转换为 CSV 的 java 代码。从命令行使用 psql 或者如果您的 Talend 包含足够新的 PostgreSQL JDBC 驱动程序,则从它调用客户端 \COPY 以加载数据。如果您的文件和数据库表的列顺序匹配,它应该可以工作而无需指定您有多少列,因此它是动态的,但更新的数据“流动”通过 talend。
确实不酷但理论上可行的解决方案:如果 Redshift 支持 JSON(Postgres 支持),那么可以创建一个临时表,其中包含 2 列:文件名、内容。一旦整个内容都在这个临时表中,就可以创建 INSERT-SELECT SQL,将 JSON 转换为可以插入到最终表中的表格格式。
但是,使用您的工具集,您可能别无选择,只能使用每个文件 1 个作业来加载这些文件。我建议为每个文件指定一项专门的工作。他们每个人都会寻找自己的文件并单独触发/安排,或者成为您扫描文件夹并为正确文件触发正确作业的更大作业的一部分。
【讨论】: