Есть ли какая-нибудь таблица, к которой мы можем обратиться, чтобы получить имя раздела в Azure? - PullRequest
1 голос
/ 26 мая 2020

Я хочу знать имя раздела (аналогично PART_NAME в Hive) таблицы, которая была секционирована специально на Azure. Я искал эту информацию в системных таблицах (например, sys.partitions), но был не смог понять это, поэтому хотел спросить, есть ли другие системные таблицы, к которым я могу обратиться, чтобы получить подробную информацию об имени раздела.

Чтобы сделать вопрос более ясным, я добавил снимок экрана. На фотографии я выделил имя столбца, в котором выполняется раздел, я хочу получить это имя столбца, так есть ли способ получить его из любых системных таблиц? Sample Table Structure

1 Ответ

0 голосов
/ 26 мая 2020

Вы должны объединить несколько таблиц вместе, чтобы получить полезную информацию о разделах. Вот пример:

SELECT s.[name] AS [schema]
   ,t.[name] AS [table]
   , i.[name] AS [index_name]
   , p.[partition_id]
   , p.[partition_number]
   , p.[rows] AS [partition_rows]
   , rng.[value] AS [partition_value]
   , ds.[data_space_id]
   , ps.[function_id]
    from sys.tables t
        join sys.schemas s
            on s.[schema_id] = t.[schema_id]
        join sys.indexes i
            on t.[object_id] = i.[object_id]
        join sys.partitions p
            on  p.[object_id] = t.[object_id]
        join sys.data_spaces ds  
            on  i.[data_space_id] = ds.[data_space_id]
        join sys.partition_schemes ps
            on ps.[data_space_id] = i.[data_space_id]
        join sys.partition_functions pf  
            on  ps.[function_id] = pf.[function_id]
        join sys.partition_range_values rng 
            on pf.[function_id] = rng.[function_id] AND rng.[boundary_id] = p.[partition_number]
    where s.[name] = @schema_name
    and t.[name] = @table_name

Что возвращает примерно следующее:

enter image description here

...