我处理没有唯一行标识符的 Presto SQL 表。识别特定记录的唯一方法是查询其所有字段。
Presto 中是否存在某种隐藏字段,比如
ROW_PRIMARY_KEY
,它可以让我唯一地标识表中的记录?
要扩展和简化 JNevill 的答案,如果您只想要一个行号:
SELECT row_number() OVER () AS row_num
请注意,
OVER ()
的功能可能与OVER (PARTITION BY 1)
相同,这意味着所有行都分配给同一个分区。这样,所有行都将具有唯一的行号。
缺少主键,您可以直接添加
ROW_NUMBER() OVER (PARTITION BY some, columns ORDER BY some_other_column) as rn
这将定义一个行号,其中
some, columns
将是伪主键。
进入主题 - 我和作者有同样的问题,但使用 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 我可以对其进行排序以保证数据加载的顺序