sql-server - 如何使用 ETL 管理身份?

标签 sql-server database etl

我需要帮助来确定工作流程,但我不确定该怎么做...假设我正在将数据从表 A 转换(ETL?)到表 B。表 A 有一个复合主键 A .a+A.b+A.c,而表 B 只有一个自动填充的标识列。如何将组合键从 A 映射回插入 B 时创建的身份?

我最好不要在表 B 中有与 A 的组合键相关的任何列,因为还有许多其他表需要进行相同的操作但没有相同的组合键结构。

最佳答案

如果我对你的理解是正确的,你不能在转换后将表 B 的记录关联回表 A 的记录,除非你在转换期间以某种方式捕获 A 的复合键和 B 的标识符之间的映射。

您可以向 A 添加一列并预先计算插入 B 时要使用的标识符。然后您将拥有一个映射。如果您不想向 A 添加列,也可以使用单独的映射表来完成。

如果您不想覆盖标识符的默认分配,则必须在加载期间捕获它们。为此,Oracle 在 PL/SQL 中为 insert 提供了 returning 子句。我不确定 SQL Server。也可以通过在 B 上使用触发器插入到单独的映射表或更新 A 中的列来实现此目的。尽管这可能会大大降低您的加载速度。

如果不出意外,您可以在 B 中创建额外的列以在加载期间保存 A 的键,之后将映射查询到一个单独的表中,然后删除额外的列。

希望对您有所帮助。

关于sql-server - 如何使用 ETL 管理身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/620104/

相关文章:

sql - 如何在 SQL Server 中使用唯一值填充空列?

php比较两个sql表并寻找差异

database - Swift 3 sqlite/使用数据库?

python - 如何使用 Luigi 将 SQL 表的特定列作为目标

sql-server - 将 Excel 和 csv 动态加载到 Sql 服务器

SQL 输出语法

sql-server - 变量表达式 vs 表达式任务

sql - 为什么 PostgreSQL 比其他数据库更难管理/维护

MySQL COUNT(id) WHERE 花费的时间太长

sql-server - 无法获得约束以在 ForEach 循环中处理 SQL 任务