当列和行与平面文件不匹配时,如何解决(使用)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 TaskForeach 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的主要内容,如果未能解决你的问题,请参考以下文章

重新排列某些列和行

如何将列和行设置为 tkinter 框架中的窗口大小?

VB 如何读取 Excel 所有列和行

如何将数据从 python 列表中的列和行写入 csv 文件?

TensorBoard 中图像的列和行是啥意思?

如何使用 PowerShell 或 python 脚本读取、编辑或附加存储在 Azure Blob 存储中的 Excel 文件(列和行)