我将使用ADF将50亿行复制到Azure SQL数据仓库。默认情况下,Azure SQL DWH会将表分发到60个分发中,但是我想根据月份和年份添加另外50个分区,如下所示:
PARTITION ( DateP RANGE RIGHT FOR VALUES
(
'2015-01-01', 2015-02-01', ......2018-01-01','2018-02-01','2018-03-01','2018-04-01','2018-5-01',.......
))
但是,我用来对表进行分区的列包括日期和时间:
2015-01-01 00:30:00
您认为我的分区方法正确吗?
答案 0 :(得分:2)
5B行/(50个分区x 60个分布)=平均1.7M行/分区
这可能是太多的分区,但是如果您有很多单月查询,那么这是值得的。您肯定希望在加载后defragment your columnstores。
答案 1 :(得分:1)
我倾向于与David同意,这对于分区数量来说可能是过大的了。您将要确保数据分布相当均匀,并且大约有170万行,您将排在下面。您可能可以移至基于季度的分区(例如'2017-12-31','2018-03-01','2018-06-30')以获得良好的查询性能结果。自2015年以来,每年将为您提供4个分区(或总计20个)。所以数学是:
5B行/(20个分区* 60个分布)= 4.167M行/分区。
尽管对于分区消除方案而言,分区的数量确实很重要,但这是一个具有列存储索引的事实表,它将在查询期间进行更高级别的索引段消除。过度分区会使情况变得更糟,而不是更好。
答案 2 :(得分:0)
Microsoft的准则规定,在调整分区大小(尤其是Azure DW中的列存储索引表)的同时,每个分区的最小卷必须为6000万行。较低的值可能无法提供最佳性能。这样做的逻辑是,每个分区的每个分配必须有至少1 M行。由于创建的每个分区都会在内部创建60个额外的发行版,因此建议创建的每个分区的最小数量为60M