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

Database design 从CSV中提取数据时,ETL工具的可行表结构是什么,database-design,csv,etl,Database Design,Csv,Etl,我已经开始了一个相当令人兴奋的项目。我有一个想法,在我的组织中,人们可以将CSV文件放入加载文件夹,然后在web界面中设置加载程序 这听起来没什么特别的-然而,美妙的是web应用程序可以让用户只选择他们需要从CSV中提取的特定列-一旦设置,这个加载程序可以定期运行 然后可以通过用户定义的查询转换数据,并可能将其加载到数据仓库中 我遇到的问题是我的阶段CSV数据的表结构,以便我可以转换它 CSV文件结构可能因列数众多或极少数而有所不同,例如 CLIENT SALES COST Mr Smi

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

这听起来没什么特别的-然而,美妙的是web应用程序可以让用户只选择他们需要从CSV中提取的特定列-一旦设置,这个加载程序可以定期运行

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

我遇到的问题是我的阶段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格式

我遇到的问题是,现在数据已经被转换,我已经有效地打破了数据中的链接,因此我不知道销售数据与谁有关

如果我想合计,比如说按日期的销售额或按日期的成本或诸如此类的东西,我所采取的方法是很好的


是否有一个不同的wy,我可以这样做,使我不松散的链接?可以给我另一个列加一行吗?

我想你可以回答你自己的问题,如果你添加一行(可能还有一个数据集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

我认为,如果您添加一行(可能还有一个数据集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

最近我看到了类似问题的解决方案。有:

  • 一个描述数据集的表
  • 一个描述列(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
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

关键是,您可以避免数据转换(必须多次执行-加载事件和每次操作事件)。

最近,我看到了类似问题的解决方案。有:

  • 一个描述数据集的表
  • 一个描述列(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
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
关键是,您可以避免数据转换(您必须多次这样做—在加载事件和每个操纵事件中)