Diseñar particiones para administrar subconjuntos de datos

Si crea particiones de una tabla o un índice, puede mover subconjuntos de datos de forma rápida y eficaz con la instrucción Transact-SQL ALTER TABLE...SWITCH de las maneras siguientes:

  • Puede agregar una tabla como partición a una tabla con particiones ya existente.

  • Puede cambiar una partición de una tabla con particiones a otra.

  • Puede quitar una partición para crear una sola tabla.

Estos escenarios pueden resultar útiles si desea agregar nuevos datos a una tabla con particiones y quitar datos antiguos de la misma tabla con particiones de forma regular. Esta operación puede implicar grandes o pequeñas cantidades de datos en diferentes escenarios. Si los nuevos datos que agrega deben cargarse, limpiarse o transformarse, se pueden tratar como una entidad independiente antes de agregarlos como una partición. Los datos antiguos se pueden archivar o guardar en el almacén. Independientemente del tamaño de la colección, la transferencia es rápida y eficaz ya que, a diferencia del caso de una instrucción INSERT INTO SELECT FROM, los datos no se mueven físicamente. Solo cambian de una partición a otra los metadatos relativos a la ubicación del almacenamiento.

Caso de ejemplo

En el escenario de particiones de la base de datos de ejemplo AdventureWorks2008R2, Adventure Works Cycles archiva sus datos antiguos de la tabla TransactionHistory en una tabla TransactionHistoryArchive; para ello, traslada las particiones de una tabla a otra. Esto se lleva a cabo mediante la creación de particiones de TransactionHistory en el campo TransactionDate. El intervalo de valores de cada partición es un mes. La tabla TransactionHistory conserva las transacciones actuales del año y TransactionHistoryArchive guarda las transacciones anteriores. Al crear las particiones de las tablas de esta forma, los datos antiguos del año correspondientes a un mes se pueden transferir mensualmente de TransactionHistory a TransactionHistoryArchive.

Al comenzar cada mes, los datos del mes más lejano incluidos en la tabla TransactionHistory pasan a la tabla TransactionHistoryArchive. Para realizar esta tarea, se produce el siguiente proceso:

  1. La tabla TransactionHistoryArchive debe contar con el mismo esquema de diseño que la tabla TransactionHistory. También debe existir una partición vacía para recibir los nuevos datos. En este caso, TransactionHistoryArchive es una tabla con particiones que está compuesta de solo dos particiones. Una partición contiene todos los datos anteriores a septiembre de 2003 y la otra contiene todos los datos desde septiembre de 2003 en adelante. Esta última partición está vacía.

    Estructura de tablas antes de dividir particiones

  2. La función de partición de la tabla TransactionHistoryArchive se modifica para dividir esta partición vacía en dos; una de ellas definida para recibir la nueva partición de los datos de septiembre de 2003.

    Primer paso de la división de particiones

  3. La primera partición de la tabla TransactionHistory, que contiene los datos creados durante septiembre de 2003, pasa a la segunda partición de la tabla TransactionHistoryArchive. Tenga en cuenta que debe definir una restricción CHECK en la tabla TransactionHistory para especificar que no se incluyan datos anteriores al 1 de septiembre (TransactionDate >= '9/01/2003'). Esta restricción garantiza que la partición 1 solo contiene datos de septiembre de 2003 y que está lista para pasar a la partición de la tabla TransactionHistoryArchive que incluye estos datos. Tenga en cuenta también que los índices que no estén alineados con sus tablas correspondientes deben quitarse o deshabilitarse antes del cambio. Sin embargo, se pueden volver a crear después. Para obtener más información sobre la alineación de índices con particiones, vea Directrices especiales para índices con particiones.

    Segundo paso de la división de particiones

  4. La función de partición de la tabla TransactionHistory se modifica para mezclar sus dos primeras particiones en una única partición. Esta partición, ahora la partición 1, contiene los datos creados en octubre de 2003 y estará lista para pasar a TransactionHistoryArchive el próximo mes, siempre que se modifique la restricción CHECK existente para especificar que no se incluyan datos anteriores al 1 de octubre (TransactionDate >= '10/01/2003').

    Tercer paso de la división de particiones

  5. La función de partición de la tabla TransactionHistoryArchive se modifica de nuevo para mezclar la segunda partición, que contiene los datos de septiembre que se acaban de agregar, con la primera partición. Esta acción recupera la condición original de la tabla TransactionHistoryArchive, es decir, la primera partición incluye todos los datos y la segunda está vacía.

    Cuarto paso de la división de particiones

  6. La función de partición de la tabla TransactionHistory se modifica de nuevo para dividir la última partición en dos particiones, de forma que el mes actual se separa del mes anterior y la partición queda lista para recibir nuevos datos.

    Quinto paso de la división de particiones

Para obtener un script Transact-SQL que implementa este escenario, vea el ejemplo ReadMe_SlidingWindow. Para obtener información acerca de los ejemplos, vea Consideraciones para instalar ejemplos y bases de datos de ejemplo de SQL Server .