sql 服务器查询分区 table
sql server query partitioned table
有没有办法使用分区键列而不是分区号来获取 table 分区的所有行?
select * from partitioned_table
where $partition.fpartfunction(key_column) = 1
据我所知 returns 分区 1 中的所有行。我想知道我是否可以做类似这样的事情:
伪代码:
select * from partitioned_table
where $partition.get_me_all_rows_in_partition_with_Keycolumn_year = '2019'
要使用分区列而不是直接使用分区函数从分区中获取所有行,请指定匹配实际分区边界的 WHERE
子句。 SQL 服务器使用范围分区,因此您需要指定下限值(第一个分区除外)和上限值(最后一个分区除外)。
下边界谓词需要 >
和 RANGE LEFT
分区函数,因为分区边界不包括边界值。相反,下边界谓词需要 >=
具有 RANGE RIGHT
分区函数,因为分区边界不包括边界值。
下面是 date
数据类型分区列上的年度分区示例。
CREATE PARTITION FUNCTION PF_Date(date) AS RANGE LEFT FOR VALUES('2019-01-01','2020-01-01');
--first partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column <= '2019-01-01';
--second partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column > '2019-01-01' AND key_column <= '2020-01-01';
--last partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column > '2020-01-01';
CREATE PARTITION FUNCTION PF_Date(date) AS RANGE RIGHT FOR VALUES('2019-01-01','2020-01-01');
--first partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column < '2019-01-01';
--second partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column >= '2019-01-01' AND key_column < '2020-01-01';
--last partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column >= '2020-01-01';
有没有办法使用分区键列而不是分区号来获取 table 分区的所有行?
select * from partitioned_table
where $partition.fpartfunction(key_column) = 1
据我所知 returns 分区 1 中的所有行。我想知道我是否可以做类似这样的事情:
伪代码:
select * from partitioned_table
where $partition.get_me_all_rows_in_partition_with_Keycolumn_year = '2019'
要使用分区列而不是直接使用分区函数从分区中获取所有行,请指定匹配实际分区边界的 WHERE
子句。 SQL 服务器使用范围分区,因此您需要指定下限值(第一个分区除外)和上限值(最后一个分区除外)。
下边界谓词需要 >
和 RANGE LEFT
分区函数,因为分区边界不包括边界值。相反,下边界谓词需要 >=
具有 RANGE RIGHT
分区函数,因为分区边界不包括边界值。
下面是 date
数据类型分区列上的年度分区示例。
CREATE PARTITION FUNCTION PF_Date(date) AS RANGE LEFT FOR VALUES('2019-01-01','2020-01-01');
--first partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column <= '2019-01-01';
--second partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column > '2019-01-01' AND key_column <= '2020-01-01';
--last partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column > '2020-01-01';
CREATE PARTITION FUNCTION PF_Date(date) AS RANGE RIGHT FOR VALUES('2019-01-01','2020-01-01');
--first partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column < '2019-01-01';
--second partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column >= '2019-01-01' AND key_column < '2020-01-01';
--last partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column >= '2020-01-01';