Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 清理数据源_Sql_Mysql_Database_Excel_Filemaker - Fatal编程技术网

Sql 清理数据源

Sql 清理数据源,sql,mysql,database,excel,filemaker,Sql,Mysql,Database,Excel,Filemaker,我正在管理一个开发项目,该项目从各种数据源(SQL MySQL、Filemaker、excel)中提取数据,然后安装到一个新的数据库结构中,使用记录库保存10年。显然,我需要在导出之前清理所有这些,我想知道是否有任何应用程序可以简化这一过程,或者我可以遵循任何指南 任何帮助都会很好我主要使用Microsoft SQL Server,因此这就是我的专业知识所在,但是SSI可以连接到各种各样的数据源,非常适合ETL工作。即使您的任何数据源实际上都不是MS SQL Server,也可以使用它。也就是说

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


任何帮助都会很好

我主要使用Microsoft SQL Server,因此这就是我的专业知识所在,但是SSI可以连接到各种各样的数据源,非常适合ETL工作。即使您的任何数据源实际上都不是MS SQL Server,也可以使用它。也就是说,如果您不使用MS SQL Server,那么可能有更好的解决方案


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

对工具不确定,但你必须处理以下问题:

  • 同步生成的密钥

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

  • 同步记录结构

  • 孤儿记录


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

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

我强烈推荐以下几点:

在处理之前归档所有接收到的文件,尤其是从外部来源获取这些数据时,可能需要研究旧的导入并返回原始数据。存档成功后,将文件复制到处理位置

特别是对于大型文件,获取某种标志文件是很有帮助的,这种文件只有在另一个文件完成后才被复制,或者更好,因为CICH包含文件中的记录数。这有助于防止因文件损坏或不完整而出现问题

保留记录数日志,如果怀疑文件大小或记录数,则开始失败作业。如果发现更改是正确的,请输入一个方法进行处理。有时他们真的想把文件切成两半,但大多数时候他们没有

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

切勿直接导入生产表。最好使用一个暂存表,在将数据放入prod之前可以检查和清理数据

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

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

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

我编写我的进程,以便可以将它们作为测试运行,并在最后回滚。这样做要比意识到你的开发数据是如此的混乱,以至于你甚至不能做一个有效的测试来确保所有的东西都可以移动到prod中要好得多

在prod上执行新导入时,必须先在dev上执行。在开始新导入时直接查看记录(当然,如果是一个大文件,则不是所有记录,而是一个很好的采样)。如果您认为应该得到20列,并且它第一次作为21列导入,请查看最后一列中的记录,很多时候这意味着以制表符分隔的文件在数据中的某个位置有一个制表符,并且该记录的列数据处于关闭状态

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

检查无效字符、字符串数据,其中应该只有数字等

任何时候都可以从提供数据的人员那里获取标识符。将其放入链接到标识符的表中。由于姓氏或地址发生了变化,这将避免记录重复


还有很多,但这应该让您开始考虑构建流程,通过不导入不好的东西来保护公司的数据。

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

  • 眼球-整个数据集或数据的代表性真实随机样本
  • 基于此,我们可以猜测不同的列(“不允许为空”、“仅包含值“Y”和“N”)、“开始日期”总是在“结束日期”之前”,等等)
  • 编写脚本检查猜测

  • 显然,这种方法一次只关注一个表,因此只能补充将数据上传到关系数据库后所做的检查。

    这方面对我有用的一个技巧是找到一种方法,让每种类型的数据源输出一列加上唯一的