Как добавить границу раздела, только если она не существует в хранилище данных SQL?
Я использую хранилище данных SQL Azure Gen 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
Но он содержит только идентификатор_функции как идентификатор, который я не знаю, как объединить другие таблицы, чтобы я мог получить границы разделов по имени таблицы.
1 ответ
Я знаю, что это устаревший вопрос, но у меня была такая же проблема. Вот запрос, который я закончил, который может помочь вам начать. Это немного изменено из запроса документации 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]
Вы пытались присоединиться sys.partition_range_values
с sys.partition_functions
Посмотреть?
Конечно, мы не можем создавать функции секционирования в SQL DW, но представление, похоже, все еще поддерживается.