在 Snowflake SQL 中将行 ID 添加到 table
Adding row IDs to table in Snowflake SQL
我需要将具有唯一性 integers/hashes 的列添加到 table 作为行 ID。
我用这个查询创建了一个 table 重复项:
CREATE TABLE duplicates AS
SELECT
"a", "b", COUNT(*) as _count
FROM
"table"
GROUP BY
"a", "b"
HAVING
_count > 1
ORDER BY
_count desc
现在我需要添加一个包含每一行唯一 ID 的列。我试过 ALTER TABLE DUPLICATES ADD 'id' int identity(1,1)
,但是这个 returns: SQL 编译错误:无法添加列 'id' 非常量默认为非空 table 'DUPLICATES'.
我现在有点缺乏想法,因为关于 Snowflake SQL 的讨论还没有广泛传播,Snowflake 的帮助页面也没有帮助我。
一个简单的方法是使用 row_number()
:
CREATE TABLE duplicates AS
SELECT ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as id,
"a", "b", COUNT(*) as _count
FROM "table"
GROUP BY "a", "b"
HAVING _count > 1
ORDER BY _count desc;
在 Snowflake 中执行此操作的最简单方法是使用序列。非常简单,但它们可用于为主键或任何需要唯一值的列生成值。使用方法:
https://docs.snowflake.net/manuals/user-guide/querying-sequences.html
我需要将具有唯一性 integers/hashes 的列添加到 table 作为行 ID。
我用这个查询创建了一个 table 重复项:
CREATE TABLE duplicates AS
SELECT
"a", "b", COUNT(*) as _count
FROM
"table"
GROUP BY
"a", "b"
HAVING
_count > 1
ORDER BY
_count desc
现在我需要添加一个包含每一行唯一 ID 的列。我试过 ALTER TABLE DUPLICATES ADD 'id' int identity(1,1)
,但是这个 returns: SQL 编译错误:无法添加列 'id' 非常量默认为非空 table 'DUPLICATES'.
我现在有点缺乏想法,因为关于 Snowflake SQL 的讨论还没有广泛传播,Snowflake 的帮助页面也没有帮助我。
一个简单的方法是使用 row_number()
:
CREATE TABLE duplicates AS
SELECT ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as id,
"a", "b", COUNT(*) as _count
FROM "table"
GROUP BY "a", "b"
HAVING _count > 1
ORDER BY _count desc;
在 Snowflake 中执行此操作的最简单方法是使用序列。非常简单,但它们可用于为主键或任何需要唯一值的列生成值。使用方法:
https://docs.snowflake.net/manuals/user-guide/querying-sequences.html