在函数sql teradata上创建主键ROW_NUMBER()

时间:2019-06-05 19:54:39

标签: sql teradata teradata-sql-assistant

我想在我的select语句中创建一个主键。我读到可以使用ROW_NUMBER() over函数。但是由于它将成为主键,因此我没有overpartition by的任何列。我尝试仅使用select row_number() as PK,但是会引发错误[3706] syntax error: expected something between ( and as keyword

我该如何解决该问题?

2 个答案:

答案 0 :(得分:0)

您将需要一个df.rename(columns={df.columns[1]: "Fred"}, inplace=True) 子句。我不确定over在Teradata中是否是可选的(我手边没有版本):

order by

答案 1 :(得分:0)

您是否要创建一个自动生成的数字,然后将其用作主要索引,以便在Teradata节点(在select语句中称为PK)之间的AMP之间进行良好分配?

如果是这样,并且如果您不想使用IDENTITY COLUMN数据类型为您完成此操作(存在优缺点),则可以通过简单地使用csum生成这样的自动编号以用作Teardata中的PI功能。 (请注意,您的目标表不能太大,即不超过几十万到一百万)

SELECT 
   mx.max_id + csum(1,1) as PI_column
  ,src.columnABC
from 
  source_table src
cross join 
  (SELECT max(id) as max_id from target_table) as mx
group by 1,2
order by 1;

这将生成一个新的PI / PK /唯一ID列,该列将用于PI,并且ColumnABC的每个唯一组合均具有良好的分布。

希望这会有所帮助。

如果我开头的“ if”陈述不正确,请进一步解释您打算做什么,我将很乐意为您提供帮助。