动态分区值 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 SCHEME
或 FUNCTION
命令。而是将分区定义构建到您的 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语句文件组分区函数分组方案对应分区表的简单步骤