【发布时间】:2022-09-29 17:37:59
【问题描述】:
这里的微软文档: https://docs.microsoft.com/en-us/azure/databricks/kb/sql/find-size-of-table#size-of-a-delta-table 建议两种方法:
方法一:
import com.databricks.sql.transaction.tahoe._
val deltaLog = DeltaLog.forTable(spark, \"dbfs:/<path-to-delta-table>\")
val snapshot = deltaLog.snapshot // the current delta table snapshot
println(s\"Total file size (bytes): ${deltaLog.snapshot.sizeInBytes}\")`
方法二:
spark.read.table(\"<non-delta-table-name>\").queryExecution.analyzed.stats
对于我的表,它们都返回约 300 MB。
但随后在存储资源管理器文件夹统计信息或递归 dbutils.fs.ls 遍历中,我得到了 ~900MB。
因此,这两种方法比从字面上查看每个文件少报 67% 快得多。使用较慢的方法会很好,除非我尝试扩展到整个容器,扫描所有 10 亿个文件和 2.6 PB 需要 55 小时。
那么在 ADLS Gen 2 中获取表大小的最佳方法是什么?如果它适用于不是表格的文件夹,则加分,因为那确实是我需要的数字。 dbutils.fs.ls 是单线程的,并且只适用于驱动程序,因此它甚至不是非常可并行化的。它可以是线程的,但只能在驱动程序中。
-
Delta Lake 有多少个版本?
-
@AlexOtt,不确定我是否理解这个问题——每次有更新或删除操作时都会创建一个版本,对吧?因此,在整个数据湖中,如果不遍历它,它是不确定的。
-
查看
DESCRIBE HISTORY
标签: scala apache-spark azure-databricks delta-lake