我使用Impala来查询parquet
表,但找不到增加从1开始的
。该列应该用作 ID 引用。目前我知道 整数
列的解决方案..nuuid()
函数,它
Returns a universal unique identifier, a 128-bit value encoded as a string with groups of hexadecimal digits separated by dashes.
无论如何,这不适合我,因为我必须将 ID 传递到另一个系统,该系统请求 1..n
样式的 ID。我也已经知道 Impala 没有自动增量
实现。
期望的结果应该是这样的:
-- UUID() provided as example - I want to achieve the `my_id`-column.
| my_id | example_uuid | some_content |
|-------|--------------|--------------|
| 1 | 50d53ca4-b...| "a" |
| 2 | 6ba8dd54-1...| "b" |
| 3 | 515362df-f...| "c" |
| 4 | a52db5e9-e...| "d" |
|-------|--------------|--------------|
如何才能获得所需的结果(整数
-ID范围为1..n
)?
注意:此问题与 this one 不同它专门处理 Kudu 表。但是,答案也应该适用于这个问题。
最佳答案
因为其他问答如 this one只提出了 uuid()
类似的答案,我花了一些心思,最后想出了这个解决方案:
SELECT
row_number() OVER (PARTITION BY "dummy" ORDER BY "dummy") as my_id
, some_content
FROM some_table
row_number()
在提供的分区上生成连续的整数
数字。与rank()
不同,row_number()
始终在其分区上提供递增的数字(即使出现重复)PARTITION BY "dummy"
将整个表划分为一个分区。这是有效的,因为“dummy”
在执行图中被解释为临时列,仅产生String
-值“dummy”
。因此,类似于“dummy”
的东西也可以工作。
需要 ORDER BY
才能生成增量。由于我们不关心此示例中的顺序(否则只需设置相应的列),因此还可以使用“dummy”
-解决方法。
该命令创建所需的增量 ID,无需任何嵌套 SQL 语句或其他技巧。
| my_id | some_content |
|-------|--------------|
| 1 | "a" |
| 2 | "b" |
| 3 | "c" |
| 4 | "d" |
|-------|--------------|
关于sql - Impala 中的增量整数 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67059900/