当列和行与平面文件不匹配时,如何解决(使用)ETL
Posted
技术标签:
【中文标题】当列和行与平面文件不匹配时,如何解决(使用)ETL【英文标题】:How do I solve (use) ETL when columns and rows are unmatched from flat file 【发布时间】:2019-11-01 05:57:08 【问题描述】:我有 2 个大文件,一个 Excel 电子表格和一个 csv 文件,它们都搞砸了,但仍需要上传到表格中。我正在学习如何使用 SSIS。假设列和行看起来像这样..
第一个 Excel 电子表格(文件扩展名为 .xlxs)...
ID Name GroupName City Time Price Date
A1 South Group1 London 10/06/2018 $4.50 13.30
A2 North Group2 New York $60 10/07/2018 09:00 AM
图一
第二个 Excel 电子表格(文件扩展名为 .csv)...
ID Name GroupName City Date Time Price
A3 East Group3 Paris 09/09/2017 $5.00 03:00 AM
A4 West Group4 Berlin 01/05/2018 $12.50 18:00
图2
如果您查看图 1 中的 ID A2,您将看到 Date 为 9.00,然后 AM 在不同的列中。你如何解决这样的问题?这是一个示例,因此每列中的时间数据是随机不同的。另请注意图 2 中的 A4
我在一定程度上熟悉Script Task
和Foreach Loop Container
。
我在网上搜索,发现this网站....
这正是我正在寻找的东西。
现在已经用这些列名创建了一个表
ID, Name, GroupName, City, Date, Time and Price.
所以理想情况下,当数据加载到表中时,它应该看起来像这样......
ID Name GroupName City Date Time Price
A1 South Group1 London 10/06/2018 13.30 $4.50
A2 North Group2 New York 10/07/2018 09:00AM $60
A3 East Group3 Paris 09/09/2017 03:00AM $5.00
A4 West Group4 Berlin 01/05/2018 18:00 $12.50
我不确定如何处理这个问题。
请注意:我只想知道我需要使用哪些 SSIS 工具箱组件。一旦我知道,我将尝试解决这个问题。这就是没有代码示例的原因。
提前致谢。
更新
谢谢哈迪。如果没有人介意,当 SSIS 在 VS 2019 中完全可用并有机会找到解决方案时,我将保持此线程打开并更新。
【问题讨论】:
If nobody mind I will keep this thread open and update when SSIS is fully available in VS 2019
。我认为一个新的新问题会比一个旧问题更受关注。我建议通过接受/支持下面的答案来结束,并在SSIS is fully available in VS 2019
时写一个新问题。祝你好运
【参考方案1】:
我不认为有一个简单的解决方案。但我会尽量给出一些建议:
-
将 Excel 文件转换为 csv 文件
在平面文件连接管理器中仅定义类型为 DT_STR 且长度 = 4000 的列
在数据流任务中添加一个脚本组件来分割每一行并验证每一列的值并将其分配给相关的输出列
您可以参考以下答案以了解更多信息,因为它包含有关在数据结构不是很好时如何从平面文件中读取数据的有用信息(即使情况不同)
SSIS ragged file not recognized CRLF How to load unstructured flat file with uneven space as delimeter? And also file contain two header SSIS reading LF as terminator when its set as CRLF【讨论】:
以上是关于当列和行与平面文件不匹配时,如何解决(使用)ETL的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从 python 列表中的列和行写入 csv 文件?
如何使用 PowerShell 或 python 脚本读取、编辑或附加存储在 Azure Blob 存储中的 Excel 文件(列和行)