我想在我的select
语句中创建一个主键。我读到可以使用ROW_NUMBER() over
函数。但是由于它将成为主键,因此我没有over
或partition by
的任何列。我尝试仅使用select row_number() as PK
,但是会引发错误[3706] syntax error: expected something between ( and as keyword
。
我该如何解决该问题?
答案 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”陈述不正确,请进一步解释您打算做什么,我将很乐意为您提供帮助。