0

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

4

3 回答 3

2

5B 行/(50 个分区 x 60 个分布)= 170 万行/分区平均

这可能是太多的分区,但如果你有很多单月查询,那可能是值得的。您肯定希望在加载后对列存储进行碎片整理

于 2018-07-24T14:28:34.940 回答
1

我倾向于同意 David 的观点,即这对于分区的数量来说可能是多余的。您需要确保数据分布非常均匀,并且有 170 万行左右,您将处于较低的位置。您可能会迁移到基于季度的分区(例如,“2017-12-31”、“2018-03-01”、“2018-06-30”)以获得良好的查询性能结果。自 2015 年以来,这将为您每年提供 4 个分区(或总共 20 个)。所以数学是:

5B 行/(20 个分区 * 60 个分布)= 4.167M 行/分区。

虽然分区数量对于分区消除方案确实很重要,但这是一个带有列存储索引的事实表,它将在查询期间执行额外级别的索引段消除。过度分区会使情况变得更糟而不是更好。

于 2018-07-24T16:47:58.937 回答
0

Microsoft 的指南规定,在调整分区大小时,尤其是 Azure DW 中的列存储索引表,每个分区的最小卷必须是 6000 万行。任何较低的东西都可能不会提供最佳性能。其逻辑是,每个分区的每个分布必须至少有 1 M 行。由于创建的每个分区都会在内部创建 60 个额外的发行版,因此建议创建的每个分区的最小值为 60M

于 2020-03-19T08:06:32.133 回答