优化突触增量湖 table 不减少文件数量

optimizing synapse delta lake table not reducing the number of files

我通过以下方式创建了一个简单的突触三角洲湖 table:

CREATE TABLE IF NOT EXISTS db1.tbl1 (
id INT NOT NULL,
name STRING NOT NULL
)
USING DELTA

我已多次将数据行合并到其中,现在我在底层 ADLS gen 2 存储帐户容器中看到总共 15 个 parquet 文件。如果我 select 行,我会按预期看到我最近的合并,例如:

+---+-------+
| id|   name|
+---+-------+
|  1|   adam|
|  2|    bob|
|  3|charles|
+---+-------+

然而,当我 运行:

OPTIMIZE db1.tbl1

我仍然看到了 15 个文件。它不应该“压缩”文件,显着减少文件总数吗?

Vacuum 将是满足您需要的更 suitable 命令。 Optimize 更适合以柱状格式重新定位数据并优化 table 的性能。 Vacuum 会删除您的旧数据文件。 vacuum 的默认设置是保留 7 天。如果你想清理最近的数据文件,你可以用 retain 参数指定它。在这种情况下,您将缩短时间旅行的能力。清理超过 1 小时的所有内容的示例:

VACUUM db1.tbl RETAIN 1 HOURS

您也可以选择干掉 运行 这个命令,看看在 运行 实际执行它之前会发生什么。这将列出要删除的文件:

VACUUM db1.tbl RETAIN 1 HOURS DRY RUN

有关 vacuum 命令的更多信息:https://docs.microsoft.com/en-us/azure/databricks/spark/latest/spark-sql/language-manual/delta-vacuum