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

创建Delta表时如何指定主键约束与多列聚簇主键

Delta表主键与聚簇主键设置方法

1. 设置单列主键

Delta 2.3及以上、Databricks Runtime 11.2及以上版本支持主键约束功能,你可以通过两种方式实现:

方式1:写入表时直接指定(推荐)

调整你原有的写入代码,使用DeltaTableBuilder API实现:

from delta.tables import DeltaTable

# 替换原有的write.saveAsTable逻辑
DeltaTable.createOrReplace(spark) \
  .tableName(saveLocation) \
  .addColumns(diamonds_with_schema.schema) \
  .property("delta.feature.allowColumnConstraints", "supported") \
  .primaryKey("要设为主键的列名") \
  .execute()

# 写入数据到建好的表中
diamonds_with_schema.write.format("delta").mode("append").saveAsTable(saveLocation)

方式2:已有表新增主键约束

如果Delta表已经创建完成,可以直接执行SQL添加约束:

ALTER TABLE 你的表名 ADD CONSTRAINT 主键约束名 PRIMARY KEY(主键列名);

注意:主键列不允许存在NULL值,且所有值必须唯一,添加约束前请先校验表中数据符合要求。

2. 创建多列聚簇主键

Databricks聚簇表支持指定多列作为聚簇主键,用于优化数据布局、提升查询性能,写法如下:

写入时直接指定多列聚簇主键

from delta.tables import DeltaTable

DeltaTable.createOrReplace(spark) \
  .tableName(saveLocation) \
  .addColumns(diamonds_with_schema.schema) \
  .clusterBy("列1", "列2", "列N") \ # 此处填入所有要作为聚簇主键的列
  .execute()

# 写入数据
diamonds_with_schema.write.format("delta").mode("append").saveAsTable(saveLocation)

如果需要同时设置多列联合主键和多列聚簇主键,合并两个配置即可:

DeltaTable.createOrReplace(spark) \
  .tableName(saveLocation) \
  .addColumns(diamonds_with_schema.schema) \
  .property("delta.feature.allowColumnConstraints", "supported") \
  .primaryKey("列1", "列2") \ # 多列联合主键
  .clusterBy("列1", "列2") \ # 多列聚簇主键
  .execute()

注意:聚簇主键不需要值唯一,仅用于数据分区排序优化,和主键约束的作用不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:45:03