DataBricks - 将更改保存回 DataLake (ADLS Gen2)
DataBricks - save changes back to DataLake (ADLS Gen2)
我将旧数据以 CSV 格式存储在 Azure DataLake Gen2 存储帐户中。我能够连接到它并使用 DataBricks 对其进行查询。我需要在某些记录的保留期到期后删除某些记录,或者如果 GDPR "right to be forgotten" 需要应用于数据。
使用 Delta 我可以将 CSV 加载到 Delta table 并使用 SQL 定位和删除所需的行,但是保存这些更改的最佳方法是什么?理想情况下返回原始文件,以便从原始文件中删除数据。我在创建 Delta table 时使用了 LOCATION 选项将生成的 Parquet 格式文件保存到 DataLake,但最好将其保留为原始 CSV 格式。
感谢任何建议。
我在这里要小心。被遗忘权意味着您需要删除数据。 Delta 实际上并没有从原始文件中删除它(至少最初是这样)——这只会在数据被清理后发生。
删除数据最安全的方法是将所有数据读入一个dataframe,过滤掉不需要的记录,然后用覆盖写回。这将确保数据被删除并且相同的结构是 re-written.
在 ADF 中将 Parquet 转换为 CSV
在 ADLS Gen2 位置创建的版本化镶木地板文件可以使用 Azure 数据工厂管道中的复制数据任务转换为 CSV。
因此,您可以将 CSV 数据读入 Delta table(位置指向数据湖文件夹),使用 SQL 执行所需的更改,然后将 parquet 文件转换为 CSV使用 ADF 格式。
我试过了,很管用。唯一的障碍可能是在将 CSV 文件读取到 Delta 时检测列 headers。您可以将其读取到数据框并从中创建一个 Delta table。
如果您是 运行 定期删除操作,那么将文件保存在 csv 中的成本很高,因为每次您读取文件并将数据帧转换为 Delta,然后对其进行查询,最后在过滤之后您再次将记录保存到 csv 并删除 Delta table。
所以我的建议是,将 csv 转换为 Delta 一次,定期执行删除并仅在需要时生成 csv。
这里的优势是 - Delta 在内部以 parquet 格式存储数据,以二进制格式存储数据并允许更好的压缩和 encoding/decoding 数据。
我将旧数据以 CSV 格式存储在 Azure DataLake Gen2 存储帐户中。我能够连接到它并使用 DataBricks 对其进行查询。我需要在某些记录的保留期到期后删除某些记录,或者如果 GDPR "right to be forgotten" 需要应用于数据。
使用 Delta 我可以将 CSV 加载到 Delta table 并使用 SQL 定位和删除所需的行,但是保存这些更改的最佳方法是什么?理想情况下返回原始文件,以便从原始文件中删除数据。我在创建 Delta table 时使用了 LOCATION 选项将生成的 Parquet 格式文件保存到 DataLake,但最好将其保留为原始 CSV 格式。
感谢任何建议。
我在这里要小心。被遗忘权意味着您需要删除数据。 Delta 实际上并没有从原始文件中删除它(至少最初是这样)——这只会在数据被清理后发生。
删除数据最安全的方法是将所有数据读入一个dataframe,过滤掉不需要的记录,然后用覆盖写回。这将确保数据被删除并且相同的结构是 re-written.
在 ADF 中将 Parquet 转换为 CSV
在 ADLS Gen2 位置创建的版本化镶木地板文件可以使用 Azure 数据工厂管道中的复制数据任务转换为 CSV。
因此,您可以将 CSV 数据读入 Delta table(位置指向数据湖文件夹),使用 SQL 执行所需的更改,然后将 parquet 文件转换为 CSV使用 ADF 格式。
我试过了,很管用。唯一的障碍可能是在将 CSV 文件读取到 Delta 时检测列 headers。您可以将其读取到数据框并从中创建一个 Delta table。
如果您是 运行 定期删除操作,那么将文件保存在 csv 中的成本很高,因为每次您读取文件并将数据帧转换为 Delta,然后对其进行查询,最后在过滤之后您再次将记录保存到 csv 并删除 Delta table。
所以我的建议是,将 csv 转换为 Delta 一次,定期执行删除并仅在需要时生成 csv。
这里的优势是 - Delta 在内部以 parquet 格式存储数据,以二进制格式存储数据并允许更好的压缩和 encoding/decoding 数据。