(用于数据集成的Talend OS)
可以使用动态表名吗?我已经研究了用户手册中的所有资源,尽管它们似乎都没有明确排除它,但我似乎无法使其正常工作.
情境
假设您有一个由1,000,000个名字组成的庞大列表-Dave Smith,Dave Jones,Dave Bloggs等.这些都存储在一个表中.
您需要将它们拆分成反映名字的表,因此您将拥有一个具有表名(例如“ Andy”,“ Adrian”,“ Adam”等)的数据库.
我在哪里
我所能做的就是毫无问题地将一个完整的数据集批量导出到一个表中.我还可以使用tMysqlRow遍历该字段来创建我的单个表(这本身要快得多).
然后,我尝试选择数据并将其吐出到各自的字段中,但是遇到了以下问题:
> tMySqlRow可以与变量一起使用,因此我可以将数据插入到相关的表中,但是它太慢了以至于是多余的.它的运行速度约为2000行/秒,大约有2000万行.
> tMySqlOutput更快,并且可以很好地做到这一点,但是需要明确定义表名.使用上下文变量作为表名不起作用(读为“ Null”).
建议查看ETL组件,但是它们的定义清楚地表明表名必须用引号引起来.
Talend提供如此多的上下文变量使用似乎真的很奇怪,但似乎不允许您动态地将一个数据集拆分为多个表.是产品限制,还是我自己?
提前致谢.
编辑-添加了屏幕截图
上下文将打印到此屏幕快照的窗口中(“ AB”是所使用的测试上下文值),以表明该值是相关的,直到在“表”字段中声明它为止,但随后返回空值
解决方法:
除此之外,我设法使它起作用.
> tMysqlInput_1从information_schema中检索表名称
在子作业中创建的
>然后将这些传递到tHashOutput_1.
> tHashInput_1然后将它们提供给tFlowtoIterate组件,
遍历我的输入工作.
>然后,我可以通过调用(String)globalMap.get(“ row6.TABLE_NAME”))来访问每个表名,因为我的tHash模式有一个名为“ Table_Name”的列.
我发生了一些动作,借此在过滤器中使用Table_Name仅提取与表名匹配的字段,然后将其传递给我的yMysqlOutput组件,如下所示:
我已经测试过了,一切都很好.希望这可以为某人节省很多时间,以解决将来的问题(或者与Talend相比比我好得多的人可以节省5分钟!).
谢谢!
标签:talend,mysql,etl 来源: https://codeday.me/bug/20191026/1938271.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。