【发布时间】:2014-07-29 15:06:31
【问题描述】:
我希望我之前的问题的这个精简版听起来比以前好得多。我有一个 .CSV 文件(频率 - 每周),其标题包含两列中的年-周值,这些列每周都在变化。例如,请参见下文。
store nbr,city,state,region,item nbr,category,201420 sales,201420 sold qty
1001,Kansas City,MO,2,30945232,7,$11,1
1003,Kansas City,KS,3,30945742,6,$40,4
2004,New York,NY,6,30995232,11,$72,12
6003,Sacramento,CA,4,3025742,3,$24,6
9003,Cleveland,OH,9,3057432,12,$44,11
6009,Los Angeles,CA,4,3098294,42,$35,7
我必须检查数据是否放置在右列下,然后继续将该数据加载到数据集市中。出于这个原因,我尝试创建一个标准头来将其与该文件的头进行比较,如下所示:
store nbr,city,state,region,item nbr,category,XXXXXX sales,XXXXXX sold qty
如果我的文件(我即将加载)是上述格式,我的进程应该继续加载数据。如果列不在他们的位置,让我们说如下
store nbr,region,city,state,category,item nbr,201420 sold qty,201420 sales
1001,2,Kansas City,MO,7,30945232,1,$11
1003,3,Kansas City,KS,6,30945742,4,$40
2004,6,New York,NY,11,30995232,12,$72
6003,4,Sacramento,CA,3,3025742,6,$24
9003,9,Cleveland,OH,12,3057432,11,$44
6009,4,Los Angeles,CA,42,3098294,7,$35
那么这个过程应该失败。我主要担心的是 - 由于字段 7 和 8 的动态特性,我无法每周创建/匹配具有标准标题的数据。字段名称中没有日期,我不能使用 sysdate(因为我可能不得不在第 7 和第 8 字段中使用具有非常旧日期的旧文件)。您能否建议我如何使用 cat/awk/sed 或使用任何通配符作为标题中的 Year-week 值来实现这一点?
【问题讨论】:
-
您的要求并不完全清楚。从我读过的内容来看,你能不能只用旧的标题替换新的标题,因为列数和数据的位置是一样的?
-
如果我更换标题,我永远不会知道我正在加载什么数据。我看到一些文件的列顺序每次都不相同。在这种情况下,我的进程不应该从文件中加载任何数据。为此,我不得不依赖文件头和列顺序。
-
那么解决方案是在每次导入时从标题中识别每一列,并让其中一些列的名称基于日期吗?日期列名可以根据“日期”、“文件名”计算吗?
-
文件名中没有日期,我不能使用 Sysdate... 有没有办法可以将这些字符与一些通配符匹配?我不确定...
-
我建议您向我们展示您的数据的缩减版本,有 6 列(比方说)而不是 16 列。还显示一些示例数据,可能来自两个不同的周,每周有 3 条记录,并显示每个输入的所需输出。那么也许我们可以帮助你。目前,问题中的准确信息太少,无关信息太多。