【问题标题】:Azure SQL DWH Date PartitioningAzure SQL DWH 日期分区
【发布时间】:2018-01-22 01:22:30
【问题描述】:

只是想看一个如何对一个大表(1.5 亿行,30 列)进行分区的工作示例,按日期对这样一个大表进行分区的最佳实践是什么(请提供示例代码) 另外,想知道这些分区是如何合并、切换和归档的。非常感谢任何基于 TSQL 代码的实现示例。

【问题讨论】:

  • 如果您自己对此主题进行一些研究并提出具体问题,您更有可能得到答案。您问题的所有答案基本上都是您可以用谷歌搜索的链接
  • 我建议您从查看documentation 中的示例开始,如果您需要进一步的帮助,请提出更具体的问题。你的问题是宽泛的。
  • 我不会对包含 1.5 亿条记录的表进行分区。请记住,您已经有 60 个发行版,因此它实际上已经被分区了。您希望将分布大小保持在大约 100 万行或更高,以获得有效的列存储压缩

标签: azure-sql-database database-partitioning azure-sqldw


【解决方案1】:

下面是如何按日期字段对表进行分区:

CREATE TABLE [dbo].[FactInternetSales]
(
    [ProductKey]            int          NOT NULL
,   [OrderDateKey]          int          NOT NULL
,   [CustomerKey]           int          NOT NULL
,   [PromotionKey]          int          NOT NULL
,   [SalesOrderNumber]      nvarchar(20) NOT NULL
,   [OrderQuantity]         smallint     NOT NULL
,   [UnitPrice]             money        NOT NULL
,   [SalesAmount]           money        NOT NULL
)
WITH
(   CLUSTERED COLUMNSTORE INDEX
,   DISTRIBUTION = HASH([ProductKey])
,   PARTITION   (   [OrderDateKey] RANGE RIGHT FOR VALUES
                    (20000101,20010101,20020101
                    ,20030101,20040101,20050101
                    )
                )
)
;

下面是一个示例分区列存储表,每个分区包含一行:

CREATE TABLE [dbo].[FactInternetSales]
(
        [ProductKey]            int          NOT NULL
    ,   [OrderDateKey]          int          NOT NULL
    ,   [CustomerKey]           int          NOT NULL
    ,   [PromotionKey]          int          NOT NULL
    ,   [SalesOrderNumber]      nvarchar(20) NOT NULL
    ,   [OrderQuantity]         smallint     NOT NULL
    ,   [UnitPrice]             money        NOT NULL
    ,   [SalesAmount]           money        NOT NULL
)
WITH
(   CLUSTERED COLUMNSTORE INDEX
,   DISTRIBUTION = HASH([ProductKey])
,   PARTITION   (   [OrderDateKey] RANGE RIGHT FOR VALUES
                    (20000101
                    )
                )
)
;

INSERT INTO dbo.FactInternetSales
VALUES (1,19990101,1,1,1,1,1,1);
INSERT INTO dbo.FactInternetSales
VALUES (1,20000101,1,1,1,1,1,1);


CREATE STATISTICS Stat_dbo_FactInternetSales_OrderDateKey ON dbo.FactInternetSales(OrderDateKey);

SQL 数据仓库支持分区拆分、合并和切换。这些函数中的每一个都使用 ALTER TABLE 语句执行。

要根据来自另一个表的数据在 Azure SQL 数据仓库上创建分区表,您可以使用 CTAS,如下所示:

CREATE TABLE dbo.FactInternetSales_20000101
    WITH    (   DISTRIBUTION = HASH(ProductKey)
            ,   CLUSTERED COLUMNSTORE INDEX
            ,   PARTITION   (   [OrderDateKey] RANGE RIGHT FOR VALUES
                                (20000101
                                )
                            )
            )
AS
SELECT *
FROM    FactInternetSales
WHERE   1=2
;

如需了解更多信息,请访问this 文档。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2017-12-07
  • 1970-01-01
相关资源
最近更新 更多