You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Spark纯SQL(无Python)创建自增ID列

Spark SQL 生成ID编号的实现方法

Spark SQL中可以直接使用内置函数生成ID,以下结合你需要的字符串操作场景,给出两种常见实现方式:

1. 全局唯一递增ID(非连续)

直接调用monotonically_increasing_id()函数,和Python API中的功能完全一致。它会生成全局唯一的64位整数ID,性能优异适合大数据量场景,但ID不一定连续。

示例:从旧表创建新表,同时处理字符串列并添加ID列

CREATE TABLE new_table AS
SELECT
  monotonically_increasing_id() AS id,
  -- 替换为你的字符串操作逻辑,比如转大写、截取子串等
  UPPER(old_str_col) AS processed_str,
  other_col1,
  other_col2
FROM old_table;

2. 连续自增ID(全局/分区内)

如果需要从1开始的连续ID,可以使用row_number()窗口函数,支持全局连续或按指定字段分区后内部递增。

全局连续ID

CREATE TABLE new_table AS
SELECT
  row_number() OVER (ORDER BY sort_column) AS id,
  -- 字符串操作示例:拼接前缀
  CONCAT('tag_', old_str_col) AS processed_str
FROM old_table;

分区内自增ID

比如按category字段分区,每个分区内ID从1重新开始:

CREATE TABLE new_table AS
SELECT
  row_number() OVER (PARTITION BY category ORDER BY create_time) AS id,
  -- 字符串操作示例:截取前10位字符
  SUBSTRING(old_str_col, 1, 10) AS processed_str
FROM old_table;

注意:row_number()需要指定排序字段,大数据量下会触发shuffle操作,性能比monotonically_increasing_id()稍差,根据实际需求选择即可。

内容的提问来源于stack exchange,提问作者Feng Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:24:23