SQL-Syntax für die Speichertyp-Spezifikation
Dieser Abschnitt beschreibt die Erweiterungen der NPS-SQL-Syntax zur Angabe und Verwaltung von Speichertypen für Datenquellen sowohl auf Tabellen- als auch auf Datenbankebene. Diese Verbesserungen bieten eine größere Flexibilität bei der Konfiguration von Speicheroptionen, ähnlich der bestehenden Lakehouse-Funktionalität.
Der Speichertyp einer bestehenden Tabelle kann nicht mehr geändert werden, nachdem die Tabelle erstellt wurde. Eine Umgehungslösung wäre, eine neue Tabelle mit CTAS (Create Table As Select) zu erstellen, dabei den gewünschten Speichertyp anzugeben und die ursprüngliche Tabelle zu löschen.
Konfiguration auf Datenbankebene
- Benutzer können den Standardspeichertyp auf Datenbankebene konfigurieren und ändern.
- Dies ermöglicht ein konsistentes Speicherverhalten für alle Tabellen innerhalb einer Datenbank, es sei denn, es wird auf der Ebene der einzelnen Tabellen außer Kraft gesetzt.
Standard-Speichertyp
Der Standardspeichertyp ist auf Systemebene auf "Block" eingestellt. Es kann über die Konsole geändert werden.
Vorrang des Speichertyps bei der Tabellenerstellung
Beim Anlegen einer Tabelle bestimmt das System den Speichertyp nach der folgenden Rangfolge:
- Anweisung CREATE TABLE
- Einstellung auf Sitzungsebene
- Einstellung auf Datenbankebene
- Systemweite Einstellung
Die erste und höchste Priorität hat die Anweisung CREATE TABLE selbst. Wenn die storagetype nicht explizit in der Anweisung angegeben ist, prüft das System, ob eine Einstellung auf Sitzungsebene angewendet wurde. Ist
dies nicht der Fall, wird nach dem Standardspeichertyp gesucht, der auf Datenbankebene eingestellt ist. Wenn die Einstellung auf Datenbankebene "default" lautet, wird die systemweite DEFAULT_STORAGE_TYPE verwendet.
Anzeige des Tabellenspeichertyps
Um den Speichertyp einer Tabelle zu ermitteln, fragen Sie die Systemansicht _v_table ab:
SELECT TABLENAME, STORAGESOURCE, CASE WHEN STORAGESOURCE = 1 THEN 'BLOCK' WHEN STORAGESOURCE = 2 THEN 'OBJECT' END AS STORAGETYPE FROM _v_table WHERE TABLENAME like 'TEST_%';
Der Speichertyp für eine Tabelle kann aus der Systemansicht _v_table ermittelt werden. Dabei steht 1 für block und 2 für object.
| TABLENAME | STORAGESOURCE | STORAGETYPE |
|-----------|---------------|-------------|
| TEST_OBJ | 2 | OBJECT |
| TEST_BLK | 1 | BLOCK |
Sobald eine Tabelle erstellt ist, storagetype kann nicht geändert werden. Um eine Tabelle in einen anderen Speichertyp zu kopieren, verwenden Sie die Anweisung CTAS (Create Table As Select) wie
folgt:
CREATE TABLE t3 AS (SELECT * FROM t1) STORAGETYPE 'block';
Die Anweisung SELECT muss in Klammern gesetzt werden
Sie **können nicht angeben **storagetype für materialisierte Ansichten. Der Speichertyp wird von der Basistabelle geerbt.
Während eines Upgrades von einer Version, die nur Blockspeicher unterstützt, auf eine Version, die Objektspeicher unterstützt, wird für alle vorhandenen Tabellen storagetype auf 'block' gesetzt.
Einstellung von storagetype für eine Datenbank
Der Standardspeichertyp, der auf die in einer bestimmten Datenbank erstellten Tabellen angewendet werden soll, kann bei der Erstellung der Datenbank angegeben werden.
CREATE DATABASEanweisung- Einstellung auf Sitzungsebene
- Systemweite Einstellung
Sie können den Standard storagetype für eine Datenbank während der Erstellung festlegen:
CREATE DATABASE database1 STORAGETYPE 'block';
Wenn storagetype nicht angegeben ist, wird das System:
- Suchen Sie nach einer Einstellung auf Sitzungsebene.
- Wird keine gefunden, wird der systemweite Standard verwendet.
- Dieser Wert wird dann intern als Standardwert der Datenbank
storagetypegespeichert.
Um die Standardeinstellung auf Datenbankebene nicht festzulegen, verwenden Sie:
CREATE DATABASE database1 STORAGETYPE 'default';
Um den Standard storagetype für Datenbanken zu überprüfen, fragen Sie die Systemansicht _v_database ab:
SELECT DATABASE, STORAGETYPE FROM _v_database;
Beispielausgabe:
DATABASE | STORAGETYPE
----------+----------------
DB1 | BLOCK
DB2 | OBJECT
SYSTEM | SYSTEM DEFAULT
(3 rows)
Bei einem Upgrade von einer Version, die nur Blockspeicher unterstützt, auf eine Version, die Objektspeicher unterstützt, wird die Standardadresse storagetype für alle vorhandenen Datenbanken auf
'block' gesetzt.
Die einer Datenbank zugeordnete Standardadresse storagetype kann mit dem Befehl ALTER DATABASE geändert werden.
-
Speicherart der Datenbank ändern
ALTER DATABASE <database_name> STORAGETYPE '<storage_type>';