sql - Impala 中的增量整数 ID

标签 sql impala

我使用Impala来查询parquet表,但找不到增加从1开始的整数列的解决方案..n。该列应该用作 ID 引用。目前我知道 uuid() 函数,它

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/

相关文章:

sql - 0RA-00952 与 Oracle 10g 的内部连接

apache-spark - 如何向通过 Spark 创建的 View 添加注释

hadoop - Impala 查询获取下一个日期

sql - 在 Impala 中可以一次删除多个 View 吗

mysql - 如何在phpMyAdmin上导入需要300s以上的大sql文件?

sql - 需要在 SQL Server 2012 中自动递增字符串

bash - sqoop创建impala Parquet 表

date - Netezza 中 NEXTDAY 的 Impala SQL 等效函数是什么?

java - Jooq 支持 Joda-Time 吗?

mysql - 我如何在此 SQL 语句中使用 "as"?