如何在Azure SQL数据仓库中根据月份和年份进行分区

时间:2018-07-24 10:35:51

标签: azure-sql-database azure-sqldw

我将使用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 您认为我的分区方法正确吗?

3 个答案:

答案 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