【发布时间】:2016-01-03 11:20:12
【问题描述】:
我经常需要清理杂乱无章的 CSV 和 Excel 文件并将其导入我的 MS SQL Server 2014(但如果我使用的是 Oracle 或其他数据库,问题将是相同的)。
我找到了一种使用 Alteryx 的方法。你能帮我理解我是否可以对 Pentaho Kettle 或 SSIS 做同样的事情吗?或者,您能否推荐其他 ETL 软件来解决我的以下观点?
- 我经常有例如 100,000 条记录的表,其中前 90,000 条记录可能为空。大多数 ETL 工具只扫描前几百条记录来猜测数据类型,因此无法猜测这些字段的类型。我可以在猜测类型之前强制 Pentaho 或 SSIS 扫描整个文件吗?我知道这对于许多 GB 的大文件可能效率不高,但对于我处理的文件,扫描整个文件比浪费大量时间尝试手动猜测每个字段要好得多
- 同上,但使用字符串的长度。如果前 10,000 条记录是 3 个字符的字符串,但后面的记录更长,则 SSIS 和 Pentaho 倾向于猜测 nvarchar(3) 并且导入将失败。我可以强迫他们在猜测字符串的长度之前扫描所有行吗?或者,或者,我可以轻松地将所有字符串强制为 nvarchar(x) ,我自己设置 x 吗?
- Alteryx 有一个多字段工具,在清理或转换多个字段时特别方便。例如。我有 10 个日期列,其数据类型没有被自动猜到。我可以使用多字段公式让 Alteryx 将所有 10 个字段转换为日期并创建名为 $oldfield_reformatted 的新字段。 Pentajho 和 SSIS 有什么相似之处吗?
谢谢!
【问题讨论】:
-
使用 IMEX 阅读 Excel 会有帮助。更多详情请参阅以下文章 [blog.concentra.co.uk/2013/05/15/…
-
你确定没有限制吗? IE。如果我按照文章的建议修改注册表,Excel 真的会扫描一个,比如说,100,000 条记录文件中的所有记录吗? SSIS 中 CSV 文件的连接管理器在“建议类型”框中输入了“行数”,但也有上限 - 根据软件版本,记录数为 1,000 或 10,000
-
在这种情况下,我一直非常喜欢使用 Awk 对文件进行采样,以便将更具代表性的选择传递到暂存中:
awk 'BEGIN {srand()} !/^$/ { if (rand() <= .01) print $0}'用你记录的任何百分比替换 .01 '想保留。 -
@Pythonista 匿名。当我之前采用此解决方案时,我不需要更改注册表
-
但是我的问题恰恰出现在绝大多数记录为空且只有一小部分记录被填充的情况下。这意味着抽样很可能会导致每条记录都为空的样本......