动态分区值 SQL Server Azure Synapse

Posted

技术标签:

【中文标题】动态分区值 SQL Server Azure Synapse【英文标题】:Dynamic Partition Value SQL Server Azure Synapse 【发布时间】:2021-09-19 13:50:48 【问题描述】:

如何设置动态分区表?是否可以在 Azure Synapse 上实现?

这是我的脚本

CREATE TABLE dashboard_table WITH (
    DISTRIBUTION = HASH(product_id), 
    PARTITION (partition_key RANGE RIGHT FOR 
        VALUES (20200101,20200102,20200103,20200104,20200105,20200106) AS (
            SELECT *
            FROM table_x
        )

因为当我尝试通过此示例脚本创建分区时,它在突触上不起作用

CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES (1, 100, 1000);

【问题讨论】:

【参考方案1】:

Azure Synapse Analytics 专用 SQL 池(以及之前的 Azure SQL 数据仓库)不支持 CREATE PARTITION SCHEMEFUNCTION 命令。而是将分区定义构建到您的 CREATE TABLE 中,就像您的第一个示例一样。如果要动态执行此操作,则需要使用动态 SQL。这是来自the documentation 的示例:

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
                    )
                )
);

我注意到您正在按天进行分区。请记住,使用 Synapse 分区,少即是多。每个分发版至少需要 100 万行(即 6000 万行)才能使其生效。有关分区大小的说明,请参阅 the documentation:

在聚集列存储表上创建分区时,它是 重要的是要考虑有多少行属于每个分区。为了 聚集列存储表的最佳压缩和性能,a 每个分布和分区至少需要 100 万行。 在创建分区之前,专用的 SQL 池已经划分了每个 表到 60 个分布式数据库中。

添加到表的任何分区都是除分布之外的 在幕后创建。使用这个例子,如果销售事实表 包含 36 个每月分区,并且有一个专用的 SQL 池 有 60 个分布,那么销售事实表应该包含 60 每月百万行,或者当所有月份都为 21 亿行 人口稠密。如果表包含少于建议的最小值 每个分区的行数,考虑按顺序使用更少的分区 增加每个分区的行数。

【讨论】:

对不起,我想问一下,是否可以为此创建一个动态分区值?假设我想使用变量 SET 的范围设置分区值,例如 start_date 或 end_date

以上是关于动态分区值 SQL Server Azure Synapse的主要内容,如果未能解决你的问题,请参考以下文章

小5聊Sql Server基础之Sql语句文件组分区函数分组方案对应分区表的简单步骤

53.Azure中CentOS的Docker里安装运行SQL Server容器

SQL Server2008及以上 表分区操作详解

将数据写入 Azure 专用 SQL 池中的特定分区

SQL Server窗口框架——ROWSRANGE

(转)[SQL Server] 动态sql给变量赋值(或返回值给变量)