创建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
相关产品推荐
相关产品推荐

