我知道有几家小公司没有对ETL流程进行测试,但从软件工程的角度看,这似乎不是最理想的.
人们通常如何对ETL过程进行测试/单元测试/功能测试?
非常感谢
我通过Spoon UI中的Copy Tables向导生成了一个作业,它将一些表从oracle数据库源复制到SQL Server,并对作业进行了一些更改.
现在我想复制相同的工作(相同的表和相同的更改),但只更改连接.这可能在Spoon吗?
我查看了Spoon UI并没有找到任何可以让我通过更改连接来复制作业的选项.
编辑
在我创建了两个步骤之后:一个用于生成行,另一个用于混淆密码,在该encrypted字段中,我没有按预期获得"加密:Obfusctaed密码"输出
这是修改的Java脚本值的另一张图片:
我在VS 2013中使用SSIS.我需要从1个数据库中获取ID列表,并且使用该ID列表,我想查询另一个数据库,即SELECT ... from MySecondDB WHERE ID IN ({list of IDs from MyFirstDB}).
我已经使用Apache Spark + Scala超过5年了(学术和专业经验).我总是发现Spark/Scala是用于构建任何类型的批处理或流式ETL/ELT应用程序的强大组合之一.
但最近,我的客户决定在我们的两个主要管道中使用Java Spring Batch:
这个企业级决策令我感到非常困惑.我同意业内有更多的思想,但我无法理解采取这一行动的必要性.
我的问题是:
我无法绕过这些.所以,我想使用这个平台进行Spring Batch和Apache Spark之间的公开讨论.
我使用 SSMS 对应的向导创建并执行了一个 dtsx:
最后我将“包”保存为 .dtsx 文件
现在我需要修改列映射并重新执行这个包。
有什么办法可以使用 SQL Server Management Studio 做到这一点吗?
我尝试打开文件,但它打开了这个对话框:
我无法再编辑映射的地方。
更新:
我知道“编辑”一个 dtsx 不是一件简单的事情,但是有没有理由不能使用已经预设的值再次运行向导?就像在最后一步打开向导并在前面的步骤中“返回”一样。毕竟这是现有的功能......
有什么技巧可以做到这一点吗?从命令行也许?这很适合我的需要。
还有就是提取物的需求source,destination以及column名称source和destination。我之所以尝试这样做,是因为我有成千上万个软件包,并且打开每个软件包的平均60 to 75列数和列出所有必需的信息将花费大量时间,而不是一个单一的时间要求,并且此任务每隔两个手工完成一次目前在我的组织中工作了几个月。
我正在寻找一些反向工程方法,将所有程序包保存在一个文件夹中,然后遍历每个程序包并获取信息,并将其放入一些电子表格中。
我想到了打开程序包xml并获取感兴趣的节点的信息,然后将其放入电子表格中,这很麻烦。请提出哪些可用的库开始。
在我正在编写的SSIS程序包中,我有一个CSV文件作为源。在“连接管理器”的“常规”页面上,它具有65001“代码”页面(我正在测试某些东西)。不检查Unicode。
这些列与varchar其他列一起映射到SQL Server目标表。
目的地出现错误:无法处理“ columnname”列,因为为其指定了多个代码页(65001和1252)。
我的SQL列必须为varchar,而不是nvarchar因为其他使用它的应用程序。
然后,在“连接管理器”的“常规”页面上1252 (ANSI - Latin I),将“代码”页面更改为,然后单击“确定”,但是当我再次打开它时,它又回到了65001。是否(仅出于测试目的)我是否检查Unicode都没有影响。
需要注意的是,所有这一切都是在CSV文件和SQL表添加和删除了列(用户知道)之后开始发生的。在此之前,我没有任何问题。是的,我在“高级编辑器”中刷新了OLE DB目标。
这是SQL Server 2012,并且随BIDS和SSIS一起提供。
我正在尝试使用 Glue 对从 RDS 迁移到 Redshift 的数据进行 ETL。
据我所知,Glue 书签仅使用指定的主键查找新行,而不跟踪更新的行。
然而,我正在处理的数据往往会频繁更新行,我正在寻找可能的解决方案。我对 pyspark 有点陌生,所以如果可以在 pyspark 中执行此操作,我将非常感谢一些指导或正确方向的观点。如果 Spark 之外有可能的解决方案,我也很想听听。
我知道约束编程背后的直觉,可以说我从未真正体验过使用约束求解器进行编程。尽管我认为能够获得我们定义为一致数据的情况是不同的情况。
内容:
我们有一组要在ETL服务器上实现的规则。这些规则是:
第三种情况与第二种情况不同,它在第二种情况成立时适用,但运行次数已明确定义。它可能适用于单次运行(一个文件),或之间(1到n(先前)或在所有文件上)。
从技术上讲,正如我们所构思的ETL一样,它在两次运行之间没有内存:两个文件(但这需要重新考虑)
对于第三种规则的应用,ETL需要具有内存(我认为我们将最终备份ETL中的数据)。或在某个时间段后通过对整个数据库进行无限次重新检查(一个作业),因此最终存储在数据库中的数据不一定能及时满足第三种规则。
例:
当我们有连续的数据流时,我们将约束应用于整个约束数据库,第二天我们将收到一个月的备份或更正数据,对于这个时间范围,我们希望仅对此满足约束运行(此时间窗口),而不用担心整个数据库,对于将来的运行,所有数据都应像以前一样受到约束,而不必担心过去的数据。您可以想象其他符合时态逻辑的规则。
目前,我们只实施了第一类规则。我认为它的方式是拥有一个缩小的数据库(任何类型的数据库:MySQL,PostgreSQL,MongoDB ...),该数据库备份所有数据(仅包含受约束的列,可能带有散列值),并带有基于早期基于一致性的标志一种规则。
问题:是否有任何解决方案/概念替代方案可以简化此过程?
为了说明在库克的编程语言; 一组规则和以下操作的示例:
run1 : WHEN tableA.ID == tableB.ID AND tableA.column1 > tableB.column2
BACK-UP
FLAG tableA.rule1
AFTER run1 : LOG ('WARN')
run2 : WHEN tableA.column1 > 0
DO NOT BACK-UP
FLAG tableA.rule2
AFTER run2 : LOG ('ERROR')
Run Code Online (Sandbox Code Playgroud)
注意:虽然约束编程理论上是解决组合问题的范例,但实际上可以加快问题的开发和执行;我认为这与约束解决问题有所不同。由于第一个目的不是在解决之前优化约束,所以可能甚至没有限制数据域。主要关心的是在数据接收上应用规则并执行一些基本操作(拒绝行,接受行,记录...)。
我真的希望这不是一个很广泛的问题,这是正确的地方。
etl ×10
sql-server ×4
ssis ×4
apache-spark ×1
aws-glue ×1
c# ×1
constraints ×1
csv ×1
database ×1
encoding ×1
kettle ×1
mongodb ×1
mongodb-php ×1
pentaho ×1
pyspark ×1
spring ×1
spring-batch ×1
spring-boot ×1
sql ×1
ssis-2012 ×1
ssms ×1
testing ×1
validation ×1