Delta 表属性参考

Delta Lake 保留以 delta. 开头的 Delta 表属性。 这些属性可能具有特定含义,并在设置这些属性时影响行为。

注意

所有设置或更新表属性的操作都将与其他并发写入操作冲突,从而导致这些操作失败。 Databricks 建议只有在不存在对表的并发写入操作时才修改表属性。

表属性和 SparkSession 属性如何交互?

Delta 表的属性设置是针对每个表进行的。 如果在表上设置了某个属性,则这是默认遵循的设置。

某些表属性具有关联的 SparkSession 配置,这些配置始终优先于表属性。 一些示例包括 spark.databricks.delta.autoCompact.enabledspark.databricks.delta.optimizeWrite.enabled 配置,这些配置在 SparkSession 级别而不是表级别启用自动压缩和优化写入。 Databricks 建议对大多数工作负载使用表范围的配置。

对于每个 Delta 表属性,可以使用 SparkSession 配置为新表设置默认值,替代内置默认值。 此设置仅影响新表,不会替代或替换现有表上设置的属性。 SparkSession 中使用的前缀不同于表属性中使用的配置,如下表所示:

Delta Lake 配置 SparkSession 配置
delta.<conf> spark.databricks.delta.properties.defaults.<conf>

例如,要为会话中创建的所有新 Delta Lake 表设置 delta.appendOnly = true 属性,请执行以下设置:

SET spark.databricks.delta.properties.defaults.appendOnly = true

要修改现有表的表属性,请使用 SET TBLPROPERTIES

Delta 表属性

可用的 Delta 表属性包括以下项:

财产
delta.appendOnly
true,用于将此 Delta 表设为仅追加。 如果仅追加,将无法删除现有记录,并且无法更新现有值。
请参阅 Delta 表属性参考
数据类型:Boolean
默认:false
delta.autoOptimize.autoCompact
auto,可让 Delta Lake 自动优化此 Delta 表的文件布局。
请参阅 Azure Databricks 上的 Delta Lake 的自动压缩
数据类型:Boolean
默认值:(无)
delta.autoOptimize.optimizeWrite
true,用于使 Delta Lake 在写入期间自动优化此 Delta 表的文件布局。
请参阅 Azure Databricks 上 Delta Lake 的优化写入
数据类型:Boolean
默认值:(无)
delta.checkpoint.writeStatsAsJson
true,用于让 Delta Lake 在检查点中为 stats 列写入 JSON 格式的文件统计信息。
请参阅在检查点中管理列级统计信息
数据类型:Boolean
默认:true
delta.checkpoint.writeStatsAsStruct
true,用于让 Delta Lake 在检查点中为 stats_parsed 列写入结构体格式的文件统计信息,并写入分区值作为 partitionValues_parsed 的结构体。
请参阅在检查点中管理列级统计信息
数据类型:Boolean
默认值:(无)
delta.checkpointPolicy
classic,用于经典 Delta Lake 检查点。 v2,用于 v2 检查点。
请参阅表与液态群集的兼容性
数据类型:String
默认:classic
delta.columnMapping.mode
是否为 Delta 表列和使用不同名称的相应 Parquet 列启用列映射。
请参阅使用 Delta Lake 列映射重命名和删除列
注意:启用 delta.columnMapping.mode 会自动启用
delta.randomizeFilePrefixes
数据类型:DeltaColumnMappingMode
默认:none
delta.dataSkippingNumIndexedCols
Delta Lake 用于收集有关数据跳过的统计信息的列数。 如果值为 -1,则表示收集所有列的统计信息。
请参阅 Delta Lake 的数据跳过
数据类型:Int
默认:32
delta.dataSkippingStatsColumns
列名称的逗号分隔的列表,Delta Lake 要收集其统计信息以增强数据跳过功能。 此属性优先于 delta.dataSkippingNumIndexedCols
请参阅 Delta Lake 的数据跳过
数据类型:String
默认值:(无)
delta.deletedFileRetentionDuration
Delta Lake 在物理性删除逻辑上已删除的数据文件之前,保留这些文件的最短时长。 这是为了防止压缩或分区覆盖后旧读取器中出现故障。
此值应足够大,以确保:
  • 如果在有并发读取器或写入器访问 Delta 表时运行 VACUUM,那么该时长会大于作业可能持续的最长时间。
  • 如果运行从表读取的流式处理查询,该查询的停止时间不会超过此值。 否则,查询可能无法重启,因为它仍必须读取旧文件。

请参阅为“按时间顺序查看”查询配置数据保留
数据类型:CalendarInterval
默认:interval 1 week
delta.enableChangeDataFeed
true,用于启用更改数据馈送。
请参阅启用更改数据馈送
数据类型:Boolean
默认:false
delta.isolationLevel
必须将某事务与并发事务所作修改进行隔离的程度。
有效值为 SerializableWriteSerializable
请参阅 Azure Databricks 上的隔离级别和写入冲突
数据类型:String
默认:WriteSerializable
delta.logRetentionDuration
Delta 表历史记录的保留时长。 VACUUM 操作会替代此保留期阈值。
每次写入检查点时,Delta Lake 都会自动清除早于保留间隔的日志条目。 如果将此属性设置为足够大的值,则会保留许多日志条目。 这应当不会影响性能,因为针对日志的操作时间恒定。 针对历史记录的操作是并行的,但会随着日志大小的增加而变得更为昂贵。
请参阅为“按时间顺序查看”查询配置数据保留
数据类型:CalendarInterval
默认:interval 30 days
delta.minReaderVersion
允许从此 Delta 表读取的读取器的最低所需协议读取器版本。
Databricks 不建议手动配置此属性。
请参阅 Azure Databricks 如何管理 Delta Lake 功能兼容性?
数据类型:Int
默认:1
delta.minWriterVersion
允许写入此 Delta 表的编写器所需的最低协议编写器版本。
Databricks 不建议手动配置此属性。
请参阅 Azure Databricks 如何管理 Delta Lake 功能兼容性?
数据类型:Int
默认:2
delta.randomizeFilePrefixes
true,表示 Delta Lake 可为文件路径而不是分区信息生成随机前缀。
数据类型:Boolean
默认:false
delta.randomPrefixLength
如果 delta.randomizeFilePrefixes 设置为 true,则为 Delta Lake 生成的随机前缀的字符数。
数据类型:Int
默认:2
delta.setTransactionRetentionDuration
新快照保留事务标识符(如 SetTransaction)的最短持续时间。 当新快照看到事务标识符早于或等于此属性指定的持续时间时,快照会将其视为已过期并忽略该标识符。 当要使写入操作具有幂等性时,则使用 SetTransaction 标识符。 有关详细信息,请参阅 foreachBatch 中的幂等表写入
数据类型:CalendarInterval
默认值:(无)
delta.targetFileSize
用于优化文件的目标文件大小(字节或更大的单位)。 例如,
104857600(字节)或 100mb
请参阅配置 Delta Lake 以控制数据文件大小
数据类型:String
默认值:(无)
delta.tuneFileSizesForRewrites
true:对 Delta 表的所有数据布局优化操作始终使用较小的文件大小。
false:永远不调整为较小的文件大小,也即,会阻止激活自动检测功能。
请参阅配置 Delta Lake 以控制数据文件大小
数据类型:Boolean
默认值:(无)