清理数据源

时间:2009-05-14 19:58:46

标签: sql mysql database excel filemaker

我正在计划管理一个开发,该开发从各种数据源(SQL MySQL,Filemaker,excel)中提取数据,然后再安装到具有10年记录基础的新数据库结构中。显然我需要在导出之前清除所有这些,并且想知道是否有任何可以简化此过程的应用程序,或者我可以遵循的任何指南。

任何帮助都会很棒

5 个答案:

答案 0 :(得分:1)

我一直这样做,就像Tom在SQl Server中使用DTS或SSIS一样,具体取决于最终数据库的版本。

我强烈推荐的一些事情:

归档在处理之前收到的所有文件,特别是如果从外部来源获取此数据,则可能必须研究旧的导入并返回原始数据。存档成功后,将文件复制到处理位置。

特别是对于大型文件,获取某种仅在另一个文件完成后复制的标记文件或者包含文件中记录数的更好的标记文件是有帮助的。这有助于防止文件损坏或不完整等问题。

记录记录数量的日志,如果文件大小或记录数量可疑,则开始失败。如果您发现更改是正确的,请添加一个方法来处理。有时他们确实意味着将文件减半,但大部分时间他们没有。

如果可能,请在文件中获取列标题。您会惊讶于数据源在没有预先警告和中断导入的情况下更改列,列名称或列顺序的频率。如果您有列标题,则在处理数据之前更容易检查这一点。

永远不要直接导入生产表。总是更好地使用临时表,您可以在将数据放入产品之前检查和清理数据。

记录流程的每个步骤,以便轻松找到导致故障的原因。

如果要清理大量文件,请考虑创建执行特定类型清理的功能(例如电话号码格式),然后您可以在多个导入中使用相同的功能。

Excel文件很邪恶。查找导入过程中已剥离前导零的位置。

我编写了我的进程,因此我可以将它们作为测试运行,并在最后进行回滚。要做到这一点要好得多,而不是意识到你的开发数据是如此无可救药地搞砸了,你甚至无法进行有效的测试,以确保一切都可以转移到prod。

如果没有首先在dev上执行,就不要对prod进行新的导入。当您开始新的导入时,直接对记录进行眼球检查(当然,如果它是一个大文件,那么并非所有这些都是良好的采样)。如果您认为您应该获得20列并且它第一次导入为21列,请查看最后一列中的记录,这意味着制表符分隔文件在数据中的某处有一个选项卡,并且列数据已关闭记录。

不要假设数据是正确的,请先检查。我在姓氏列中有名字,邮政编码栏中有电话等。

检查无效字符,字符串数据应该只有数字等。

只要有可能,请从提供数据的人员那里获取标识符。将它放在一个链接到您的标识符的表中。这将使您免于重复记录,因为更改了姓氏或更改了地址。

还有更多,但这应该让你开始考虑通过不导入不良内容来构建流程来保护公司的数据。

答案 1 :(得分:0)

我主要使用Microsoft SQL Server,因此这是我的专长,但SSIS可以连接到各种各样的数据源,非常适合ETL工作。即使您的数据源都不是MS SQL Server,也可以使用它。也就是说,如果你没有使用MS SQL Server,可能会有更好的东西。

要提供一个非常好的答案,您需要有一个完整的数据源和目标列表,以及您可能需要完成的任何特殊任务以及运行转换的任何要求(是一个一次性交易还是你需要能够安排它?)

答案 2 :(得分:0)

不确定工具,但您需要处理:

  • 同步生成的密钥

  • 同步/规范化数据格式(例如,不同的日期格式)

  • 同步记录结构。

  • 孤儿记录

如果在开发此流程或移动数据时数据正在运行/正在更新,您还需要捕获更新。当我过去必须做这种事情时,最好的,不是那么好的答案我开发了一组在多次迭代中运行的脚本,这样我就可以在移动之前迭代地开发和测试过程的数据。我发现有一个脚本(我使用了一个模式和一个ant脚本,但它可以是任何东西)可以清理/重建目标数据库。您可能还需要某种方法来记录脏/不匹配的数据。

答案 3 :(得分:0)

在类似的情况下,我个人发现Emacs和Python非常有用,但我想,任何具有良好搜索功能的文本编辑器和具有强大字符串操作功能的语言都可以完成这项工作。我首先将数据转换为平面文本文件然后

  1. 注视整个数据集或数据的代表性真实随机样本。
  2. 基于这个做出关于不同列的猜想(“不允许空值”,“仅包含值'Y'和'N'”,“'开始日期'总是在'结束日期'之前'”,等等。
  3. 编写脚本以检查猜想。
  4. 显然,这种方法一次只关注一个表,因此只补充将数据上传到关系数据库后进行的检查。

答案 4 :(得分:0)

对我来说有用的一个技巧是找到一种方法,让每种类型的数据源以制表符分隔的形式一次输出单个列加唯一标识符,这样您就可以使用它来清理它文本工具(sed,awk或者TextMate的grep搜索),然后重新导入/更新(副本!)原始源。

然后清理多个来源变得更快,因为你可以重复使用它们的工具(例如利用姓氏 - McKay,O'Leary o'Neil,Da Silva,Von Braun等,修复日期格式,修剪空白)并在某种程度上自动化过程(取决于来源)。