Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Retornar todas as linhas de uma partição específica no SQL Server (T-SQL)


Ao criar uma tabela particionada no SQL Server, você especifica quais valores vão para cada partição.

Isso é feito quando você cria a função de partição. Ao criar a função de partição, você especifica valores de limite, que determinam quais valores entram em cada partição.

Depois de criar sua tabela particionada e inserir dados, você pode executar um SELECT normal para retornar dados, assim como você faria com uma tabela não particionada (na verdade, mesmo tabelas não particionadas têm uma partição).

Mas você sabia que também pode especificar de qual partição deseja dados?

Você pode fazer isso com a ajuda do $PARTITION função do sistema em seu WHERE cláusula.

Exemplo


Imagine que temos uma tabela particionada que contém os seguintes dados:
+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+

E CatId é a coluna de particionamento.

E usamos a seguinte função de partição para criar suas partições:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (-1, 5, 100);

Isso nos diz como os dados são armazenados, de acordo com os valores na coluna de particionamento.

Portanto, agora podemos executar uma consulta que retorna apenas dados de uma partição específica.

Dados de retorno da segunda partição


Veja como podemos retornar todas as linhas da segunda partição.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;

Resultado:
+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
+---------+-------------+

Dados de retorno da terceira partição


E aqui estão todos os dados da terceira partição.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;

Resultado:
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 6       | Sharp     |
| 7       | Fritz     |
| 8       | Garfield  |
| 9       | Boss      |
+---------+-----------+

Dados de retorno da primeira e última partições


Nesse caso, minha primeira partição está vazia, pois não há valores negativos no CatId coluna.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;

Resultado:
(0 rows affected)

Da mesma forma, a última partição também está vazia, pois não há linhas suficientes para preencher essa partição.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;

Resultado:
(0 rows affected)

Isso segue a recomendação da Microsoft de deixar a primeira e a última partições vazias, a fim de evitar qualquer movimentação de dados no caso de as partições serem divididas ou mescladas no futuro.