Delta 上的更新只是复制数据?
Upserts on Delta simply duplicates data?
我对数据块上的 Delta 和 lakehouse 还很陌生。我有一些问题,基于以下操作:
- 我导入了一些 parquet 文件
- 将它们转换为增量(创建 1 个 snappy.parquet 文件)
- 随机删除一行(创建 1 个新的 snappy.parquet 文件)。
- 我检查了两个 snappy 文件的内容(delta 的版本 0 table 和版本 1),它们都包含所有数据,每个都有其特定的差异。
这是否意味着 delta 只是为每个新版本复制数据?
这如何扩展?还是我遗漏了什么?
是的,这就是 Delta lake 的工作方式 - 当您修改数据时,它不会只写入增量,而是获取受更改影响的原始文件,进行更改,然后将其写回。但请注意,并非所有数据都是重复的 - 只有受影响行所在的文件中的数据才会重复。例如,您有 3 个数据文件,您正在对第二个文件中的某些行进行更改。在这种情况下,Delta 将创建一个编号为 4 的新文件,其中包含必要的更改 + 文件 2 中的其余数据,因此您将拥有以下版本:
- 版本 0:文件 1、2 和 3
- 版本 1:文件 1、3 和 4
我对数据块上的 Delta 和 lakehouse 还很陌生。我有一些问题,基于以下操作:
- 我导入了一些 parquet 文件
- 将它们转换为增量(创建 1 个 snappy.parquet 文件)
- 随机删除一行(创建 1 个新的 snappy.parquet 文件)。
- 我检查了两个 snappy 文件的内容(delta 的版本 0 table 和版本 1),它们都包含所有数据,每个都有其特定的差异。
这是否意味着 delta 只是为每个新版本复制数据?
这如何扩展?还是我遗漏了什么?
是的,这就是 Delta lake 的工作方式 - 当您修改数据时,它不会只写入增量,而是获取受更改影响的原始文件,进行更改,然后将其写回。但请注意,并非所有数据都是重复的 - 只有受影响行所在的文件中的数据才会重复。例如,您有 3 个数据文件,您正在对第二个文件中的某些行进行更改。在这种情况下,Delta 将创建一个编号为 4 的新文件,其中包含必要的更改 + 文件 2 中的其余数据,因此您将拥有以下版本:
- 版本 0:文件 1、2 和 3
- 版本 1:文件 1、3 和 4