我一直在使用 Azure Databricks 工作流、Spark 和 Azure Data Lake 创建 ETL/ELT 管道。它应该以近乎实时的方式处理来自 Azure SQL Server 数据库的更改(更改数据捕获过程)。我在 SQL Server 上有一堆大小为 30 – 50 GB 的大表,其中最大的大小为 190 – 220 GB,还有很多小表。 以 parquet delta 格式压缩后,它们在数据湖上可达 3 - 5 GB,最大可达 45 - 55 GB,但预计它们还会增长。我将数据存储在增量表中。由于数据管理更容易(生命周期管理、流程调试等),我认为将大表的数据存储在分区增量表中会更好。我进行了一些测试并观察到,在某些情况下(当写入的数据很大时 - 数百万条记录)将数据写入分区表所需的时间较少,但在大多数情况下(数千条记录)需要相同的时间与非分区表一样。当第一次创建表时,创建分区表需要更长的时间,这是有道理的,因为分区表的元数据更复杂。
到目前为止一切都很好,但同时我在 Databricks 的文档中也有这样的说法,即应该只对大于 1 TB 的表进行分区。 https://docs.databricks.com/en/tables/partitions.html
https://learn.microsoft.com/en-us/azure/databricks/tables/partitions
您认为我应该遵循此规则并将表创建为非分区表吗?这个规则背后隐藏着什么?为什么我应该只对大于 1 TB 的表进行分区?非常感谢您的提前答复!
我根据数据摄取的年份和月份进行分区。不会根据这些列查询数据,但我对查询数据的列没有要求。
非常感谢您的提前答复!