Разделение SQL Server.создание нового раздела на следующий год - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть настройка схемы разбиения, которая в настоящее время разделена по годам.Я пытаюсь создать новый раздел на следующий год:

ALTER PARTITION SCHEME psYearlyPartition_Log

    NEXT USED Year7FileGroup;

ALTER PARTITION FUNCTION pfYearlyPartition_Log()

    SPLIT RANGE('20190101');

Это, однако, выполняется в течение многих часов и не завершается.Кто-нибудь знает, почему это может происходить, потому что, похоже, еще нет данных за 2019 год?

Последний раздел с 2016-01-01 по сегодняшний день.

Я запустил запросы внизу этого поста, которые дали следующие результаты:

 CREATE PARTITION FUNCTION [pfYearlyPartition](datetime) AS RANGE LEFT FOR VALUES('2012-01-01T00:00:00','2013-01-01T00:00:00','2014-01-01T00:00:00','2015-01-01T00:00:00','2016-01-01T00:00:00');

CREATE PARTITION SCHEME [psYearlyPartition_Table1] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table2] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table3] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table4] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table5] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table6] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table7] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table8] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table9] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table10] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table11] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table12] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table13] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table14] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table15] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table16] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table17] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table18] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table19] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table20] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table21] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table22] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);

enter image description here

SELECT
  OBJECT_SCHEMA_NAME(pstats.object_id) AS SchemaName
  ,OBJECT_NAME(pstats.object_id) AS TableName
  ,ps.name AS PartitionSchemeName
  ,ds.name AS PartitionFilegroupName
  ,pf.name AS PartitionFunctionName
  ,CASE pf.boundary_value_on_right WHEN 0 THEN 'Range Left' ELSE 'Range Right' END AS PartitionFunctionRange
  ,CASE pf.boundary_value_on_right WHEN 0 THEN 'Upper Boundary' ELSE 'Lower Boundary' END AS PartitionBoundary
  ,prv.value AS PartitionBoundaryValue
  ,c.name AS PartitionKey
  ,CASE 
    WHEN pf.boundary_value_on_right = 0 
    THEN c.name + ' > ' + CAST(ISNULL(LAG(prv.value) OVER(PARTITION BY pstats.object_id ORDER BY pstats.object_id, pstats.partition_number), 'Infinity') AS VARCHAR(100)) + ' and ' + c.name + ' <= ' + CAST(ISNULL(prv.value, 'Infinity') AS VARCHAR(100)) 
    ELSE c.name + ' >= ' + CAST(ISNULL(prv.value, 'Infinity') AS VARCHAR(100))  + ' and ' + c.name + ' < ' + CAST(ISNULL(LEAD(prv.value) OVER(PARTITION BY pstats.object_id ORDER BY pstats.object_id, pstats.partition_number), 'Infinity') AS VARCHAR(100))
  END AS PartitionRange
  ,pstats.partition_number AS PartitionNumber
  ,pstats.row_count AS PartitionRowCount
  ,p.data_compression_desc AS DataCompression
FROM sys.dm_db_partition_stats AS pstats
INNER JOIN sys.partitions AS p ON pstats.partition_id = p.partition_id
INNER JOIN sys.destination_data_spaces AS dds ON pstats.partition_number = dds.destination_id
INNER JOIN sys.data_spaces AS ds ON dds.data_space_id = ds.data_space_id
INNER JOIN sys.partition_schemes AS ps ON dds.partition_scheme_id = ps.data_space_id
INNER JOIN sys.partition_functions AS pf ON ps.function_id = pf.function_id
INNER JOIN sys.indexes AS i ON pstats.object_id = i.object_id AND pstats.index_id = i.index_id AND dds.partition_scheme_id = i.data_space_id AND i.type <= 1 /* Heap or Clustered Index */
INNER JOIN sys.index_columns AS ic ON i.index_id = ic.index_id AND i.object_id = ic.object_id AND ic.partition_ordinal > 0
INNER JOIN sys.columns AS c ON pstats.object_id = c.object_id AND ic.column_id = c.column_id
LEFT JOIN sys.partition_range_values AS prv ON pf.function_id = prv.function_id AND pstats.partition_number = (CASE pf.boundary_value_on_right WHEN 0 THEN prv.boundary_id ELSE (prv.boundary_id+1) END)
ORDER BY TableName, PartitionNumber;

SELECT
      N'CREATE PARTITION FUNCTION ' 
    + QUOTENAME(pf.name)
    + N'(' + t.name  + N')'
    + N' AS RANGE ' 
    + CASE WHEN pf.boundary_value_on_right = 1 THEN N'RIGHT' ELSE N'LEFT' END
    + ' FOR VALUES('
    +
    (SELECT
        STUFF((SELECT
            N','
            + CASE
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN(N'char', N'varchar') 
                    THEN QUOTENAME(CAST(r.value AS nvarchar(4000)), '''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN(N'nchar', N'nvarchar') 
                    THEN N'N' + QUOTENAME(CAST(r.value AS nvarchar(4000)), '''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'date' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS date), 'yyyy-MM-dd'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'datetime' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetime), 'yyyy-MM-ddTHH:mm:ss'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN(N'datetime', N'smalldatetime') 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetime), 'yyyy-MM-ddTHH:mm:ss.fff'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'datetime2' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetime2), 'yyyy-MM-ddTHH:mm:ss.fffffff'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'datetimeoffset' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetimeoffset), 'yyyy-MM-dd HH:mm:ss.fffffff K'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'time' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS time), 'hh\:mm\:ss\.fffffff'),'''') --'HH\:mm\:ss\.fffffff'
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'uniqueidentifier' 
                    THEN QUOTENAME(CAST(r.value AS nvarchar(4000)), '''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN (N'binary', N'varbinary') 
                    THEN CONVERT(nvarchar(4000), r.value, 1)
                  ELSE CAST(r.value AS nvarchar(4000))
              END
    FROM sys.partition_range_values AS r
    WHERE pf.[function_id] = r.[function_id]
    FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)'),1,1,N'')
    )
    + N');'
FROM sys.partition_functions pf
JOIN sys.partition_parameters AS pp ON
    pp.function_id = pf.function_id
JOIN sys.types AS t ON
    t.system_type_id = pp.system_type_id
    AND t.user_type_id = pp.user_type_id

SELECT
      N'CREATE PARTITION SCHEME ' + QUOTENAME(ps.name)
    + N' AS PARTTITION ' + QUOTENAME(pf.name)
    + N' TO ('
    +
    (SELECT
        STUFF((SELECT
            N',' + QUOTENAME(fg.name)
    FROM sys.data_spaces ds
    JOIN sys.destination_data_spaces AS dds ON dds.partition_scheme_id = ps.data_space_id
    JOIN sys.filegroups AS fg ON fg.data_space_id = dds.data_space_id
    WHERE ps.data_space_id = ds.data_space_id
    ORDER BY dds.destination_id
    FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)'),1,1,N'')
    )
    + N');'
FROM sys.partition_schemes AS ps
JOIN sys.partition_functions AS pf ON pf.function_id = ps.function_id

1 Ответ

0 голосов
/ 04 декабря 2018

Кто-нибудь знает, почему это может происходить, поскольку, похоже, еще нет данных 2019 года?

Когда вы разбиваете непустой раздел, существующий раздел разделяетсяна 2 отдельных и строки перемещаются во вновь созданный раздел для размещения новых границ.Это очень дорогая операция, требующая примерно в 4 раза регистрации нормальных операций DML.Следует избегать разбиения непустых разделов, особенно с большой таблицей, как у вас, очевидно, есть.

Чтобы избежать такого перемещения данных, вы можете использовать промежуточную таблицу и функцию / схему временного раздела для обслуживания разделов.Это позволит вам ПЕРЕКЛЮЧИТЬ раздел, который будет разбит на промежуточную таблицу, использовать CREATE INDEX...WITH (DROP EXISTING=ON) для создания новых разделов и, наконец, SWITCH разделы обратно в основную таблицу.

Если вам нужна помощь сСценарий, чтобы сделать это, добавьте CREATE DDL для вашей существующей функции раздела и схемы к вашему вопросу.Детали типа RANGE LEFT или RIGHT важны.Я предполагаю, что у вас есть функция RANGE LEFT, которая будет перемещать все строки больше, чем '2016-01-01' и меньше или равно '2019-01-01' во вновь созданный раздел.

РЕДАКТИРОВАТЬ

Теперь я вижу, что у вас есть десятки таблиц, все разделены с использованием одной и той же базовой функции.Похоже, что в сгенерированном скрипте схемы секционирования есть ошибка, так как он содержит дополнительную файловую группу, которая, похоже, является файловой группой NEXT USED, хотя на самом деле она не используется.Я предполагаю, что Year11FileGroup фактически не используется.

Ниже приведен пример сценария для 2 таблиц, которые можно расширять по мере необходимости.Поскольку схемы совместно используют одну и ту же функцию, вам необходимо выполнять каждый шаг для всех таблиц одновременно, поскольку разделение функции повлияет на все схемы, а также таблицы и индексы, разделенные с использованием этих схем.Я также добавил границу для будущей границы на 2020 год (для YearFileGroup7), чтобы избежать этой проблемы в будущем, предварительно создав раздел 2021 года до конца календарного 2019 года, установив файловую группу NEXT USED для каждой схемы иразделение функции в соответствии с первоначальной попыткой.

--create temp function like original
CREATE PARTITION FUNCTION [pfYearlyPartition_temp](datetime) AS RANGE LEFT FOR VALUES('2012-01-01T00:00:00','2013-01-01T00:00:00','2014-01-01T00:00:00','2015-01-01T00:00:00','2016-01-01T00:00:00');

--create temp scheme like original for each scheme
CREATE PARTITION SCHEME [psYearlyPartition_Table1_temp] AS PARTITION pfYearlyPartition_temp TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table2_temp] AS PARTITION pfYearlyPartition_temp TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup]);

--for each table, create temporary staging table and indexes like original partitioned using temp scheme
CREATE TABLE dbo.Table1_temp(
      Col1 datetime
    , Col2 int
    , Col3 char(1000) 
) ON psYearlyPartition_Table1_temp(col1);
CREATE CLUSTERED INDEX cdx ON dbo.Table1_temp(Col2, Col1)  ON psYearlyPartition_Table1_temp(Col1);
CREATE NONCLUSTERED INDEX idx ON dbo.Table1_temp(Col2) ON psYearlyPartition_Table1_temp(Col1);
CREATE TABLE dbo.Table2_temp(
      Col1 datetime
    , Col2 int
    , Col3 char(1000) 
) ON psYearlyPartition_Table2_temp(col1);
CREATE CLUSTERED INDEX cdx ON dbo.Table2_temp(Col2, Col1)  ON psYearlyPartition_Table2_temp(Col1);
CREATE NONCLUSTERED INDEX idx ON dbo.Table2_temp(Col2) ON psYearlyPartition_Table2_temp(Col1);
GO

--for each table, switch the partition containing the new boundary (the partition to be split) into temp table
ALTER TABLE dbo.Table1
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table1_temp PARTITION $PARTITION.pfYearlyPartition_temp('2019-01-01T00:00:00');
ALTER TABLE dbo.Table2
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table2_temp PARTITION $PARTITION.pfYearlyPartition_temp('2019-01-01T00:00:00');
GO

--for each original scheme, set NEXT USED filegrroup and split original function to create new boundaries
ALTER PARTITION SCHEME psYearlyPartition_Table1 NEXT USED [Year6FileGroup];
ALTER PARTITION SCHEME psYearlyPartition_Table2 NEXT USED [Year6FileGroup];
ALTER PARTITION FUNCTION pfYearlyPartition() SPLIT RANGE('2019-01-01T00:00:00');
ALTER PARTITION SCHEME psYearlyPartition_Table1 NEXT USED [Year7FileGroup];
ALTER PARTITION SCHEME psYearlyPartition_Table2 NEXT USED [Year7FileGroup];
ALTER PARTITION FUNCTION pfYearlyPartition() SPLIT RANGE('2020-01-01T00:00:00');
GO

--for each table, repartition temp table and indexes using the original scheme which now contains the new boundaries
CREATE CLUSTERED INDEX cdx ON dbo.Table1_temp(Col2, Col1) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table1(Col1) ;
CREATE NONCLUSTERED INDEX idx ON dbo.Table1_temp(Col2) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table1(Col1);
CREATE CLUSTERED INDEX cdx ON dbo.Table2_temp(Col2, Col1) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table2(Col1) ;
CREATE NONCLUSTERED INDEX idx ON dbo.Table2_temp(Col2) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table2(Col1);
GO

--for each table, switch temp table partitions back into main table
ALTER TABLE dbo.Table1_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table1 PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00');
ALTER TABLE dbo.Table2_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table2 PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00');
--this partition should be empty but just in case...
ALTER TABLE dbo.Table1_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00')
    TO dbo.Table1 PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00');
ALTER TABLE dbo.Table2_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00')
    TO dbo.Table2 PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00');
GO
--drop temp tables, schemes, and function
DROP TABLE dbo.Table1_temp;
DROP TABLE dbo.Table2_temp;
DROP PARTITION SCHEME psYearlyPartition_Table1_temp;
DROP PARTITION SCHEME psYearlyPartition_Table2_temp;
DROP PARTITION FUNCTION pfYearlyPartition_temp;
GO

Ниже приведен результат после запуска этого сценария для тестовых таблиц с 1 млн строк в год.Обратите внимание, что последний раздел функции RANGE LEFT является постоянным разделом, который всегда будет частью базовых схем, поэтому группа YEAR6FileGroup всегда будет использоваться независимо от того, содержит ли она данные.

Я рекомендую использовать функцию RANGE RIGHT для дополнительных временных значений, потому что она более интуитивна и могла бы избежать этой проблемы.Также имейте в виду, что при RANGE LEFT строки, которые точно соответствуют граничному значению, окажутся в неправильном разделе (например, строка с '2016-01-01T00: 00: 00' будет в том же разделе, что и данные 2015 года).), который учитывается, когда время разделения включает в себя компонент времени.Я предлагаю вам ознакомиться с этой статьей с рекомендациями по разбиению таблиц для получения дополнительной информации.

+------------+-----------+--------------------------+------------------------+-----------------------+------------------------+-------------------+-------------------------+--------------+------------------------------------------------------------+-----------------+-------------------+-----------------+
| SchemaName | TableName |   PartitionSchemeName    | PartitionFilegroupName | PartitionFunctionName | PartitionFunctionRange | PartitionBoundary | PartitionBoundaryValue  | PartitionKey |                       PartitionRange                       | PartitionNumber | PartitionRowCount | DataCompression |
+------------+-----------+--------------------------+------------------------+-----------------------+------------------------+-------------------+-------------------------+--------------+------------------------------------------------------------+-----------------+-------------------+-----------------+
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR1FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2012-01-01 00:00:00.000 | Col1         | Col1 > Infinity and Col1 <= Jan  1 2012 12:00AM            |               1 |                 0 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR2FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2013-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2012 12:00AM and Col1 <= Jan  1 2013 12:00AM |               2 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR3FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2014-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2013 12:00AM and Col1 <= Jan  1 2014 12:00AM |               3 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR4FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2015-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2014 12:00AM and Col1 <= Jan  1 2015 12:00AM |               4 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR5FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2016-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2015 12:00AM and Col1 <= Jan  1 2016 12:00AM |               5 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2019-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2016 12:00AM and Col1 <= Jan  1 2019 12:00AM |               6 |           3000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR7FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2020-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2019 12:00AM and Col1 <= Jan  1 2020 12:00AM |               7 |                 0 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | NULL                    | Col1         | Col1 > Jan  1 2020 12:00AM and Col1 <= Infinity            |               8 |                 0 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR1FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2012-01-01 00:00:00.000 | Col1         | Col1 > Infinity and Col1 <= Jan  1 2012 12:00AM            |               1 |                 0 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR2FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2013-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2012 12:00AM and Col1 <= Jan  1 2013 12:00AM |               2 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR3FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2014-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2013 12:00AM and Col1 <= Jan  1 2014 12:00AM |               3 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR4FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2015-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2014 12:00AM and Col1 <= Jan  1 2015 12:00AM |               4 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR5FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2016-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2015 12:00AM and Col1 <= Jan  1 2016 12:00AM |               5 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2019-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2016 12:00AM and Col1 <= Jan  1 2019 12:00AM |               6 |           3000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR7FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2020-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2019 12:00AM and Col1 <= Jan  1 2020 12:00AM |               7 |                 0 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | NULL                    | Col1         | Col1 > Jan  1 2020 12:00AM and Col1 <= Infinity            |               8 |                 0 | NONE            |
+------------+-----------+--------------------------+------------------------+-----------------------+------------------------+-------------------+-------------------------+--------------+------------------------------------------------------------+-----------------+-------------------+-----------------+
...