【问题标题】:Dynamic Partition Value SQL Server Azure Synapse动态分区值 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);

【问题讨论】:

    标签: sql-server azure tsql partition azure-synapse


    【解决方案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
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2022-01-13
    • 2021-07-28
    • 1970-01-01
    • 2021-02-10
    • 2022-06-13
    • 2021-12-14
    • 2021-11-27
    相关资源
    最近更新 更多