在 Teradata 中创建密钥

Posted

技术标签:

【中文标题】在 Teradata 中创建密钥【英文标题】:Creating key in Teradata 【发布时间】:2015-01-07 12:50:15 【问题描述】:

所以当我更多地探索 Teradata 时,我遇到了一个问题。 这就是如何快速有效地创建代理键,

使用像 Informatica 这样的 ETL 工具有一个限制,它可以生成密钥,比如 Sequence Generator 最多只能创建 20 亿个,之后呢? Teradata 有一个标识列功能,可以替代使用,但不会妨碍并行性,例如它不会一次插入 1 行数据,并在插入另一行之前等待标识列的值增加。 如果是这种情况,应该怎么做才能以高性能插入数十亿行。

如果我错了,请帮助我,对于 Teratada 的这项大技术是新手。

谢谢。

【问题讨论】:

【参考方案1】:

Informatica 序列生成器的限制为 9223372036854775807。您可以将 Alpha_numneric 序列用于代理键,例如 A1、A2...A9223372036854775807,然后是 B1、B2...B9223372036854775807。这会将限制增加到 27*9223372036854775807,并且对于任何数据集,这个限制看起来都是无穷无尽的。为此,您需要设置序列生成器的循环属性。

【讨论】:

问题是序列生成器不是失败证明,如果你有提交间隔为 1000 并且你在 199 加载失败,序列生成器将不会回滚并且下次从 200 开始生成值,从而在密钥生成。现在考虑这个场景,你的提交间隔为 100 万。 然后我们可以使用可变端口进行序列生成(使用 Max+1),并且可以通过使用任何文件或数据库目标来保存最后一个 Max 值。请注意,对于大十进制计算,您必须在会话配置中启用高精度。【参考方案2】:

您的里程可能会有所不同,但我们已经成功地通过在目标表中获取代理键的MAX() 来增加代理键,然后使用ROW_NUMBER() 来增加要插入的新记录的代理键目标表。

这种方法的成功取决于您的 ETL 方法。对我们来说,我们将数据加载到应用我们的转换的阶段表中。加载数据后,使用 MERGE 或简单的 UPDATE / INSERT 语句将数据的 UPSERT 暂存到目标表非常简单。

【讨论】:

以上是关于在 Teradata 中创建密钥的主要内容,如果未能解决你的问题,请参考以下文章

在 Teradata 中创建具有“with recursive”语句的递归视图

Teradata 中易失性表的光标

teradata建表DDL

Teradata SQL 周数 - 从 1 月 1 日开始的第 1 周,周数与一周中的特定日期对齐

是否可以通过Teradata TPT脚本中的环境变量来处理Amazaon S3凭据

使用teradata模块从python连接到Teradata导致'WSA E TimedOut'