Presto SQL 中的唯一行标识符

问题描述 投票:0回答:3

我处理没有唯一行标识符的 Presto SQL 表。识别特定记录的唯一方法是查询其所有字段。

Presto 中是否存在某种隐藏字段,比如

ROW_PRIMARY_KEY
,它可以让我唯一地标识表中的记录?

sql amazon-athena presto
3个回答
4
投票

要扩展和简化 JNevill 的答案,如果您只想要一个行号:

SELECT row_number() OVER () AS row_num

请注意,

OVER ()
的功能可能与
OVER (PARTITION BY 1)
相同,这意味着所有行都分配给同一个分区。这样,所有行都将具有唯一的行号。


3
投票

缺少主键,您可以直接添加

ROW_NUMBER() OVER (PARTITION BY some, columns ORDER BY some_other_column) as rn 

这将定义一个行号,其中

some, columns
将是伪主键。


0
投票

进入主题 - 我和作者有同样的问题,但使用 row_number() 的回复/解决方案不是有效答案:

情况: 我有2个数据集: 文件 1 [a、b、c、d] 文件 2 [a、c、d、b]

它们是不同的,因为在我们的例子中顺序很重要

它们已加载到 Athena 中,无需任何附加标识符/索引 到一个具有以下结构的表:[file_name,value]

我的需要是比较两个数据集并确定它们是否相同以及顺序很重要!

1 - select 语句 - 不保证返回顺序 (或者在 Athena 中是这样吗?我知道在 Oracle 中不是这样!) 2 - 排序依据 - 没有帮助 3 - 相交,豁免 - 没有帮助

例如在Oracle中有 rowid 在插入时分配给一行,并且是不可变的(永远不会改变),除非该行被删除并重新插入(意味着它是另一行,而不是同一行!)

所以我们实际上是在 Oracle 中寻找类似 rowid 的东西

使用这样的 rowid 我可以对其进行排序以保证数据加载的顺序

© www.soinside.com 2019 - 2024. All rights reserved.