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:
- Sentencia Create table
- Configuración a nivel de sesión
- Configuración de la base de datos
- 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.
CREATE DATABASEdeclaración- Configuración a nivel de sesión
- 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>';