在Azure Synapse无服务器SQL池用CETAS创建外部表时添加自增列
在无服务器SQL Pool中为外部表添加自增列的可行方法
因为无服务器SQL Pool不支持IDENTITY属性,下面提供几种在创建外部表时添加自增/唯一ID列的实用方法:
方法1:用ROW_NUMBER()生成连续自增ID
这是最常用的方式,通过窗口函数给每行分配连续的整数ID。注意:如果源数据有变动,重新生成表时ID会重新计算。
修改后的创建代码:
CREATE EXTERNAL TABLE temp.example_table WITH ( DATA_SOURCE = data_source_name, LOCATION = 'TempTables/example_table', FILE_FORMAT = parquet_file_format ) AS SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS id -- 按任意顺序生成自增ID,要按特定字段排序就把(SELECT NULL)换成对应列名,比如user_code , name AS user_name , code AS user_code FROM schema.example_table
方法2:基于唯一业务字段生成稳定ID
如果需要ID保持固定(即使重新生成表也不变),可以利用表中的唯一业务字段(比如假设code是唯一的)生成哈希ID:
CREATE EXTERNAL TABLE temp.example_table WITH ( DATA_SOURCE = data_source_name, LOCATION = 'TempTables/example_table', FILE_FORMAT = parquet_file_format ) AS SELECT CONVERT(BIGINT, HASHBYTES('SHA2_256', code)) AS id -- 基于code生成固定唯一ID , name AS user_name , code AS user_code FROM schema.example_table
注意:必须确保用来生成哈希的字段是唯一的,否则会出现重复ID。
方法3:生成随机唯一ID
如果不需要连续ID,只要每行唯一就行,可以用NEWID()结合CHECKSUM生成随机整数ID:
CREATE EXTERNAL TABLE temp.example_table WITH ( DATA_SOURCE = data_source_name, LOCATION = 'TempTables/example_table', FILE_FORMAT = parquet_file_format ) AS SELECT CHECKSUM(NEWID()) AS id -- 生成随机唯一ID,每次重建表ID会变化 , name AS user_name , code AS user_code FROM schema.example_table
内容的提问来源于stack exchange,提问作者Indrajeet Singh
相关产品推荐
相关产品推荐

