为什么我的 delta lake table 没有收集统计​​数据(最小值、最大值)?

Why my delta lake table is not collecting statistics (min, max values)?

在 azure databricks 7.4 上使用 delta lake。

我正在尝试了解优化、ZORDER 和数据跳过。我想在业务日期列上使用 ZORDER BY:request_date_id(数据类型为整数)。我了解到,为了实现 zorder,目标列应该具有增量统计信息。

虽然我的专栏 request_date_id 在第 7 栏,但我的 table 似乎没有统计它

table 确实有不同的区别 request_date_id。为什么没有收集到统计数据?

在我看来,data skipping 选项已从 databricks 7 开始删除。但据我了解,它仍然是默认的。 Delta lake table 应该仍在收集统计信息。

如有任何建议或指导,我们将不胜感激。非常感谢!

在 DBR 7.x 中删除的是在 SQL 级别实现的一种特殊类型的索引。但是 Delta 有 built-in data skipping 独立于数据是否注册为 SQL table 或只是保存在磁盘上。您可以通过查看 _delta_log/NNNNNN.json 个文件来检查,对于每个添加的文件,都会有 stats 个字段,索引列的 min/max 个值。例如:{"add": {"path": "part-00002-d0b474c0-6b00-4bef-9fbb-de97e157e199-c000.snappy.parquet", "partitionValues": {}, "size": 134637, "modificationTime": 1628835148000, "dataChange": true, "stats": "{\"numRecords\":33333, \"minValues\":{\"id\":1}, \"maxValues\":{\"id\":99997}, \"nullCount\": {\"id\":0}}"}}