从CSV中提取数据时,ETL工具的可行表结构是什么

时间:2013-01-08 10:00:38

标签: database-design csv etl

我已经开始了一个相当令人兴奋的项目。我有这样的想法,我组织中的人可以将CSV文件放入加载文件夹,然后在Web界面中设置加载器。

这听起来不那么特别 - 但是,美妙的是网络应用程序可以让用户只选择从CSV中提取所需的某些列 - 一旦设置,这个加载器就可以定期运行。 / p>

然后可以通过用户定义的查询转换数据,并可能将数据加载到wherehouse

我遇到的问题是我的分阶段CSV数据的表格结构 - 这样我就可以对其进行转换。

CSV文件结构可能因许多列而异,例如。

CLIENT    SALES COST 
Mr Smith  234   45
Mr Blogs  256   35

我目前的结构是

ID COLUMNID VALUE    FILELOADDATE
1  1        Mr Smith 2012-12-25
2  2        234      2012-12-25
3  3        45       2012-12-25
4  1        Mr Blogs 2012-12-25
5  2        256      2012-12-25
6  3        35       2012-12-25

如果您愿意,数据已经“无人值守”,允许我存储各种CSV格式

现在的问题是数据已被转置我已经有效地破坏了该数据中的链接,所以我不知道销售数字与谁有关

如果我想根据日期或按日期或类似的方式汇总说销售

,我采取的方法很好

我有什么不同的态度可以解决这个问题吗?我可以在列中添加另一列吗?

2 个答案:

答案 0 :(得分:2)

我认为你有点回答你自己的问题,如果你添加一行(可能是数据集ID?,所以你可以在不同的csv文件之间有所不同)。然后,您还可以将FILELOADDATE字段移动到数据集表

ID DATASETID ROWID COLUMNID VALUE    
1  1         1     1        Mr Smith 
2  1         1     2        234      
3  1         1     3        45       
4  1         2     1        Mr Blogs 
5  1         2     2        256      
6  1         2     3        35      

数据集表:

ID FILELOADDATE
1  2012-12-25

答案 1 :(得分:1)

最近我见过类似问题的解决方案。有:

  • 一个描述数据集的表
  • 一个描述列(CSV文件列)的表
  • 数据存储表

数据集描述表的列:

ID
FileName
Load_TimeStamp
Name
User

列描述表的列:

ID
dataset_id
ColumnName (csv column name)
ColumnDescription (optional)
StorageColumn (pointing to storage table column name, e.g. "varchar_1"

数据表的列:

ID
dataset_id
varchar_1
...
varchar_20
numeric_1
...
numeric_20

关键是你可以避免数据转置(你必须多次这样做 - 在加载事件和每个操作事件上)。