Sintassi SQL per la specifica del tipo di archiviazione
Questa sezione descrive i miglioramenti apportati alla sintassi SQL di NPS per specificare e gestire i tipi di archiviazione per le risorse di dati a livello di tabella e di database. Questi miglioramenti offrono una maggiore flessibilità nella configurazione delle opzioni di stoccaggio, simile alla funzionalità esistente della Lakehouse.
Il tipo di archiviazione di una tabella esistente non può essere modificato una volta che la tabella è stata creata. Una soluzione alternativa sarebbe quella di creare una nuova tabella utilizzando CTAS (Create Table As Select), specificando il tipo di archiviazione desiderato ed eliminando la tabella originale.
Configurazione a livello di database
- Gli utenti possono configurare e modificare lo storagetype predefinito a livello di database.
- Ciò consente un comportamento di memorizzazione coerente per tutte le tabelle di un database, a meno che non venga sovrascritto a livello di singola tabella.
Tipi di memoria predefiniti
Il tipo di memoria predefinito è impostato su "blocco" a livello di sistema. Può essere modificato dalla console.
Precedenza del tipo di memoria per la creazione delle tabelle
Quando si crea una tabella, il sistema determina il tipo di archiviazione in base alla seguente precedenza:
- Istruzione create table
- Impostazione a livello di sessione
- Impostazione a livello di database
- Impostazione a livello di sistema
La prima e più alta precedenza è la dichiarazione CREATE TABLE stessa. Se storagetype non è specificato esplicitamente nell'istruzione, il sistema controlla se è stata applicata un'impostazione a livello di sessione.
In caso contrario, si cerca il tipo di archiviazione predefinito impostato a livello di database. Se l'impostazione a livello di database è "default", verrà utilizzata l'impostazione a livello di sistema DEFAULT_STORAGE_TYPE.
Visualizzazione del tipo di memorizzazione della tabella
Per determinare il tipo di archiviazione di una tabella, interrogare la vista di 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_%';
Il tipo di memoria di una tabella può essere determinato dalla vista di sistema _v_table. Qui, 1 rappresenta block e 2 sta per object.
| TABLENAME | STORAGESOURCE | STORAGETYPE |
|-----------|---------------|-------------|
| TEST_OBJ | 2 | OBJECT |
| TEST_BLK | 1 | BLOCK |
Una volta creata una tabella, il suo storagetype non può essere modificato. Per copiare una tabella in un altro tipo di memoria, utilizzare l'istruzione CTAS (Create Table As Select) come segue:
CREATE TABLE t3 AS (SELECT * FROM t1) STORAGETYPE 'block';
Le parentesi intorno all'istruzione SELECT sono obbligatorie
Non è possibile specificare storagetype per le viste materializzate. Il tipo di archiviazione è ereditato dalla tabella di base.
Durante un aggiornamento da una release che supporta solo l'archiviazione a blocchi a una che supporta l'archiviazione a oggetti, tutte le tabelle esistenti avranno il loro storagetype impostato
su 'block'.
Impostazione di storagetype per un database
Il tipo di memoria predefinito da applicare alle tabelle create in un determinato database può essere specificato durante la creazione del database.
CREATE DATABASEdichiarazione- Impostazione a livello di sessione
- Impostazione a livello di sistema
È possibile impostare il sito storagetype predefinito per un database durante la creazione:
CREATE DATABASE database1 STORAGETYPE 'block';
Se storagetype non è specificato, il sistema lo farà:
- Verificare la presenza di un' impostazione a livello di sessione.
- Se non ne viene trovato nessuno, si utilizza il valore predefinito del sistema.
- Questo valore viene memorizzato internamente come valore predefinito del database
storagetype.
Per lasciare l'impostazione predefinita a livello di database, utilizzare:
CREATE DATABASE database1 STORAGETYPE 'default';
Per controllare l'indirizzo storagetype predefinito per i database, interrogare la vista di sistema _v_database:
SELECT DATABASE, STORAGETYPE FROM _v_database;
Output di esempio:
DATABASE | STORAGETYPE
----------+----------------
DB1 | BLOCK
DB2 | OBJECT
SYSTEM | SYSTEM DEFAULT
(3 rows)
Durante l'aggiornamento da una release che supporta solo l'archiviazione a blocchi a una che supporta l'archiviazione a oggetti, l'indirizzo predefinito storagetype per tutti i database esistenti
sarà impostato su 'block'.
L'indirizzo storagetype predefinito associato a un database può essere modificato con il comando ALTER DATABASE.
-
Modificare il tipo di archiviazione del database
ALTER DATABASE <database_name> STORAGETYPE '<storage_type>';