Sintaxis SQL para la especificación del tipo de almacenamiento

En esta sección se describen las mejoras de la sintaxis SQL de NPS para especificar y gestionar los tipos de almacenamiento de los orígenes de datos tanto a nivel de tabla como de base de datos. Estas mejoras proporcionan una mayor flexibilidad en la configuración de las opciones de almacenamiento, similar a la funcionalidad existente de Lakehouse.

El tipo de almacenamiento de una tabla existente no puede modificarse una vez creada la tabla. Una solución alternativa sería crear una nueva tabla utilizando CTAS (Create Table As Select), especificando el tipo de almacenamiento deseado y eliminar la tabla original.

Configuración a nivel de base de datos

  • Los usuarios pueden configurar y modificar el storagetype por defecto a nivel de base de datos.
  • Esto permite un comportamiento de almacenamiento coherente en todas las tablas de una base de datos, a menos que se anule a nivel de tabla individual.

Tipo de almacenamiento por defecto

El tipo de almacenamiento predeterminado es "bloque" a nivel de sistema. Se puede modificar desde la consola.

Precedencia del tipo de almacenamiento para la creación de tablas

Al crear una tabla, el sistema determina el tipo de almacenamiento basándose en la siguiente precedencia:

  1. Sentencia Create table
  2. Configuración a nivel de sesión
  3. Configuración de la base de datos
  4. Configuración de todo el sistema

La primera y más importante es la propia declaración CREATE TABLE. Si storagetype no se especifica explícitamente en la sentencia, el sistema comprueba si se ha aplicado una configuración a nivel de sesión. Si no, busca el tipo de almacenamiento por defecto establecido a nivel de base de datos. Si la configuración a nivel de base de datos es "default", se utilizará la de todo el sistema DEFAULT_STORAGE_TYPE.

Visualización del tipo de almacenamiento de la tabla

Para determinar el tipo de almacenamiento de una tabla, consulte la vista del sistema _v_table:

SELECT TABLENAME, STORAGESOURCE, CASE WHEN STORAGESOURCE = 1 THEN 'BLOCK' WHEN STORAGESOURCE = 2 THEN 'OBJECT' END AS STORAGETYPE FROM _v_table WHERE TABLENAME like 'TEST_%';

El tipo de almacenamiento de una tabla puede determinarse desde la vista del sistema _v_table. Aquí, 1 representa block y 2 object.

| TABLENAME | STORAGESOURCE | STORAGETYPE |
|-----------|---------------|-------------|
| TEST_OBJ  | 2             | OBJECT      |
| TEST_BLK  | 1             | BLOCK       |

Una vez creada una tabla, su dirección storagetype no puede modificarse. Para copiar una tabla a un tipo de almacenamiento diferente, utilice la sentencia CTAS (Create Table As Select) como se indica a continuación:

CREATE TABLE t3 AS (SELECT * FROM t1) STORAGETYPE 'block';

Se requieren paréntesis alrededor de la declaración SELECT

No se puede especificar storagetype para las vistas materializadas. El tipo de almacenamiento se hereda de la tabla base.

Durante una actualización de una versión que solo admite almacenamiento en bloques a una que admite almacenamiento de objetos, todas las tablas existentes tendrán su storagetype empezar a 'block'.

Configuración de storagetype para una base de datos

El tipo de almacenamiento predeterminado que se aplicará a las tablas creadas en una base de datos concreta puede especificarse al crear la base de datos.

  1. CREATE DATABASE declaración
  2. Configuración a nivel de sesión
  3. Configuración de todo el sistema

Puede establecer la dirección storagetype por defecto para una base de datos durante su creación:

CREATE DATABASE database1 STORAGETYPE 'block';

Si no se especifica storagetype, el sistema lo hará:

  • Compruebe si hay una configuración a nivel de sesión.
  • Si no se encuentra ninguna, utilice la predeterminada para todo el sistema.
  • Este valor se almacena internamente como el valor por defecto de la base de datos storagetype.

Para dejar el valor por defecto sin establecer a nivel de base de datos, utilice:

CREATE DATABASE database1 STORAGETYPE 'default';

Para comprobar la dirección storagetype predeterminada para las bases de datos, consulte la vista del sistema _v_database:

SELECT DATABASE, STORAGETYPE FROM _v_database;

Salida de ejemplo:

 DATABASE |  STORAGETYPE
----------+----------------
 DB1      | BLOCK
 DB2      | OBJECT
 SYSTEM   | SYSTEM DEFAULT
(3 rows)

Durante una actualización de una versión que solo admite almacenamiento en bloque a una que admite almacenamiento de objetos, el valor predeterminado storagetype Para todas las bases de datos existentes se establecerá en 'block'.

La dirección storagetype asociada por defecto a una base de datos puede modificarse mediante el comando ALTER DATABASE.

  • Modificar el tipo de almacenamiento de la base de datos

    ALTER DATABASE <database_name> STORAGETYPE '<storage_type>';