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

Azure Data Factory:为每行生成20位纯数字唯一ID并写入SQL表

实现20位纯数字唯一ID生成方案(Azure Data Factory场景)

针对你的需求,这里提供几个在ADF中可行的纯数字20位唯一ID生成方案,适配Lookup活动输出的N行数据:

方案一:高精度时间戳直接生成(最简单,无冲突风险)

利用微秒级时间戳的唯一性,直接生成刚好20位的数字ID:
在Data Flow的派生列活动中,使用以下表达式:

toString(currentTimestamp(), 'yyyyMMddHHmmssffffff')
  • 格式说明:yyyyMMddHHmmssffffff对应4位年+2位月+2位日+2位时+2位分+2位秒+6位微秒,总长度恰好20位
  • 唯一性保障:微秒级精度确保同一微秒内最多生成1条ID,完全满足常规数据处理场景的唯一性要求

方案二:时间戳+自增序号(适配高并发批量场景)

如果你的数据量极大(同一微秒内处理超过100万行),可以拆分时间戳+自增序号的组合:
在Data Flow中添加派生列,表达式如下:

concat(toString(currentTimestamp(), 'yyyyMMddHHmmssSSS'), lpad(toString(rowNumber()), 7, '0'))
  • 拆分说明:17位毫秒时间戳(yyyyMMddHHmmssSSS) + 7位补零自增序号,总长度20位
  • 唯一性保障:同一毫秒内支持最多1000万行的唯一ID生成,覆盖绝大多数高并发场景

方案三:在Lookup存储过程中预生成ID(减少ADF逻辑)

如果允许修改FetchIDs存储过程,可以直接在查询时生成20位ID,避免在ADF中额外处理:
修改存储过程的查询语句,添加自定义ID字段:

SELECT 
    name,
    ID,
    City,
    State,
    -- 生成20位纯数字唯一ID:日期(8位)+时间(6位)+行号(6位)
    CONCAT(
        CONVERT(VARCHAR(8), GETDATE(), 112), -- yyyyMMdd
        REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), ':', ''), -- HHmmss
        RIGHT('000000' + CAST(ROW_NUMBER() OVER (ORDER BY ID) AS VARCHAR(6)), 6) -- 补零行号
    ) AS CustomID
FROM YourSourceTable

之后Lookup活动的输出会直接包含CustomID字段,可直接映射到OutputTable的对应列。

方案四:基于现有ID扩展(适合关联原有数据)

如果需要和原有ID关联,可结合时间戳+补位原有ID生成20位唯一ID:
在Data Flow派生列中使用:

concat(toString(currentTimestamp(), 'yyyyMMddHHmm'), lpad(toString(ID), 8, '0'))
  • 组合说明:12位时间戳(yyyyMMddHHmm) + 8位补零原有ID,总长度20位
  • 注意:如果原有ID可能重复,需额外添加自增序号来保障唯一性,比如:
concat(toString(currentTimestamp(), 'yyyyMMddHH'), lpad(toString(ID), 6, '0'), lpad(toString(rowNumber()), 4, '0'))

后续操作

无论采用哪种方案,最终都可以通过ADF的Copy活动或Data Flow的Sink组件,将包含新生成ID的数据写入OutputTable,完成字段映射即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:12:38