我正在使用Azure SQL数据仓库第1代,并且创建了这样的分区表
CREATE TABLE [dbo].[StatsPerBin1](
[Bin1] [varchar](100) NOT NULL,
[TimeWindow] [datetime] NOT NULL,
[Count] [int] NOT NULL,
[Timestamp] [datetime] NOT NULL)
WITH
(
DISTRIBUTION = HASH ( [Bin1] ),
CLUSTERED INDEX([Bin1]),
PARTITION
(
[TimeWindow] RANGE RIGHT FOR VALUES ()
)
)
仅当没有这样的边界时,才应该分割分区吗?
首先,我认为如果可以通过表名获取分区边界,那么我可以编写一个if语句来确定是否添加分区边界。
但是我找不到将表与其对应的分区值关联的方法,所有分区的分区值都可以通过
检索SELECT * FROM sys.partition_range_values
但是它仅包含function_id作为标识符,我不知道如何联接其他表,以便可以通过表名获取分区边界。
答案 0 :(得分:0)
您是否尝试过以sys.partition_range_values
视图加入sys.partition_functions
?
当然,我们不能在 SQL DW 中创建分区函数,但是该视图似乎仍然受支持。
答案 1 :(得分:0)
我知道这是一个过时的问题,但是我遇到了同样的问题。这是我最后得到的一个查询,可以帮助您入门。通过查询SQL Server文档对其进行了一些修改:
SELECT s.[name] AS [schema_name]
, t.[name] AS [table_name]
, p.[partition_number] AS [partition_number]
, rv.[value] AS [partition_boundary_value]
, p.[data_compression_desc] AS [partition_compression_desc]
FROM sys.schemas s
JOIN sys.tables t ON t.[schema_id] = s.[schema_id]
JOIN sys.partitions p ON p.[object_id] = t.[object_id]
JOIN sys.indexes i ON i.[object_id] = p.[object_id]
AND i.[index_id] = p.[index_id]
JOIN sys.data_spaces ds ON ds.[data_space_id] = i.[data_space_id]
LEFT JOIN sys.partition_schemes ps ON ps.[data_space_id] = ds.[data_space_id]
LEFT JOIN sys.partition_functions pf ON pf.[function_id] = ps.[function_id]
LEFT JOIN sys.partition_range_values rv ON rv.[function_id] = pf.[function_id]
AND rv.[boundary_id] = p.[partition_number]