Hybride Tabellen erstellen¶
Dieses Thema bietet eine Übersicht über das Erstellen von Hybridtabellen in Snowflake.
Bemerkung
Um eine Hybridtabelle zu erstellen, müssen Sie ein aktives Warehouse haben, das als aktuelles Warehouse Ihrer Sitzung angegeben ist. Es können Fehler auftreten, wenn beim Erstellen einer Hybridtabelle kein aktives Warehouse angegeben wird. Weitere Informationen dazu finden Sie unter Verwenden von Warehouses.
CREATEHYBRIDTABLE-Optionen¶
Sie können eine Hybridtabelle erstellen, indem Sie einen der folgenden SQL-Befehle verwenden:
CREATE HYBRID TABLE. Dieses Beispiel erstellt eine Hybridtabelle, fügt einige Zeilen ein, löscht eine Zeile und fragt die Tabelle ab:
CREATE OR REPLACE HYBRID TABLE icecream ( id NUMBER PRIMARY KEY AUTOINCREMENT START 1 INCREMENT 1, col1 VARCHAR NOT NULL, col2 VARCHAR NOT NULL ); INSERT INTO icecream VALUES(1, 'A1', 'B1'); INSERT INTO icecream VALUES(2, 'A2', 'B2'); INSERT INTO icecream VALUES(3, 'A3', 'B3'); INSERT INTO icecream VALUES(4, 'A4', 'B4'); UPDATE icecream SET col2 = 'B3-updated' WHERE id = 3; DELETE FROM icecream WHERE id = 4; SELECT * FROM icecream;
CREATE HYBRID TABLE :.. AS SELECT (CTAS) oder CREATE HYBRID TABLE … LIKE. Beispiel:
CREATE OR REPLACE HYBRID TABLE table1 ( employee_id INT PRIMARY KEY, department_id VARCHAR(200) ) AS SELECT * FROM table2;
Laden von Daten¶
Bemerkung
Da der primäre Speicher für Hybridtabellen ein Zeilenspeicher ist, haben Hybridtabellen in der Regel einen größeren Speicherplatzbedarf als Standardtabellen. Der Hauptgrund für den Unterschied ist, dass spaltenförmige Daten für Standardtabellen oft eine höhere Komprimierung erzielen. Weitere Informationen zu den Speicherkosten finden Sie unter Kosten für Hybridtabellen.
Sie können Daten in Hybridtabellen laden, indem Sie sie aus einem Stagingbereich oder aus anderen Tabellen kopieren (d. h. mit CTAS, COPY oder INSERT INTO … SELECT), aber es wird dringend das Massenladen von Daten in eine Hybridtabelle mit einer CTAS-Anweisung empfohlen. Das Massenladen mit CTAS ist auf Performance optimiert, sodass große Lademengen (mehrere Millionen Datensätze) in den meisten Fällen etwa 10-mal schneller geladen werden, als mit anderen Optionen.
Massenladen über INSERT oder COPY wird ebenfalls unterstützt, aber das Laden von Daten ist bei großen Datenmengen langsamer. Beim Laden großer Datensets kann es zu langen Wartezeiten oder sogar Timeouts kommen. Abfragen gegen kürzlich geladene Daten sind ebenfalls langsamer. Das Optimieren des Massenladens für DML-Anweisungen wie COPY ist für die nahe Zukunft geplant.
Achtung
CTAS-Befehle unterstützen keine Fremdschlüsseleinschränkungen. Wenn Sie Fremdschlüsseleinschränkungen in Ihrer Hybridtabelle verwenden müssen, verwenden Sie eine andere Ladeoption wie COPY oder INSERT INTO … SELECT.
Wenn Ihre Quelldaten nicht in einer Snowflake-Tabelle, sondern in einem externen Stagingbereich vorliegen, verwenden Sie die folgende Syntax:
CREATE TABLE ... AS SELECT * FROM @stage/data.csv
Vermeiden Sie die Verwendung dieser Syntax:
COPY FROM @stage/data.csv
Die CTAS-Option ist die effizientere Lademethode.
Wenn Sie nicht CTAS verwenden, sollten Sie in der Lage sein, bis zu 1 Million Datensätze pro Minute zu laden. Beachten Sie jedoch, dass dieser Näherungswert von der Struktur der Tabelle abhängt (z. B. von der Größe der Datensätze, bei denen größere Datensätze langsamer geladen werden). Wenn Ihre Ladeoperationen zu lange dauern und fehlschlagen, testen Sie mit einem kleineren Datenset oder laden Sie kleinere Blöcke.
Wenn Indizes auf den Spalten einer Hybridtabelle erstellt werden, insbesondere Indizes auf einer großen Anzahl von Spalten, kann jeder Befehl, der die Tabelle lädt (einschließlich CTAS, COPY, oder INSERT INTO … SELECT), den folgenden Fehler zurückgeben:
The value is too long for index "IDX_HT100_COLS".
wobei IDX_HT100_COLS
der Name eines Indexes für die zu erstellende Tabelle ist.
Dieser Fehler tritt auf, weil der zeilenbasierte Speicher eine Beschränkung der Größe der Daten (und Metadaten) vorsieht, die pro Datensatz gespeichert werden können. Um die Datensatzgröße zu verringern, versuchen Sie, die Tabelle zu erstellen, ohne größere Spalten (wie breite VARCHAR-Spalten) als indizierte Spalten anzugeben.
Sie können auch versuchen, die Tabelle zu erstellen, indem Sie INCLUDE-Spalten auf sekundären Indizes verwenden, anstatt die Spalten direkt zu indizieren. Ein einfaches Beispiel finden Sie unter Sekundären Index mit einer INCLUDE-Spalte erstellen.
Bemerkung
Andere Methoden zum Laden von Daten in Snowflake-Tabellen (z. B. Snowpipe) werden derzeit nicht unterstützt.
Hinzufügen von Indizes zu einer Hybridtabelle¶
Sie können alle Schlüssel, Indizes und Einschränkungen definieren, wenn Sie eine Hybridtabelle erstellen. Beispiel:
CREATE OR REPLACE HYBRID TABLE targethybridtable (
col1 VARCHAR(32) PRIMARY KEY,
col2 NUMBER(38,0) UNIQUE,
col3 NUMBER(38,0),
INDEX index_col3 (col3)
)
AS SELECT col1, col2, col3 FROM sourcetable);
Optional können Sie mit CREATE INDEX einen Index für eine bestehende Hybridtabelle erstellen. Verwenden Sie diesen Befehl, um einen Index zu einer Hybridtabelle hinzuzufügen, die aktiv für einen Workload verwendet wird und Abfragen bedient oder Fremdschlüssel hat. CREATE INDEX baut einen Index parallel auf, ohne dass die Tabelle während der Operation gesperrt wird.
Wenn sich Ihre Hybridtabellenanwendung jedoch im Entwicklungs- oder Testmodus befindet und eine gewisse Ausfallzeit für die Tabelle kein Problem darstellt, ist es effizienter, die Hybridtabelle neu zu erstellen und die Indizes mit dem CTAS-Befehl zu erstellen. Der schnelle Massenladepfad, den der Befehl CTAS bietet, ist effizienter als der Online-Indexaufbau mit dem Befehl CREATE INDEX.
Eine Hybridtabelle erfordert einen eindeutigen Primärschlüssel. Die Daten in Ihrer Hybridtabelle sind nach diesem Primärschlüssel geordnet. Sie können zusätzliche sekundäre Indizes zu nicht primären Schlüsselattributen hinzufügen, um Lookups entlang dieser Attribute zu beschleunigen. Um die Anzahl der zu durchsuchenden Datensätze zu reduzieren, können für Indizes die Prädikate =
, >
, >=
, <
, <=
und IN genutzt werden.
Achtung
Um einen sekundären Index hinzuzufügen, müssen Sie eine Rolle verwenden, die über die SELECT-Berechtigung für die Hybridtabelle verfügt. Wenn Sie Zugriff auf eine Ansicht der Daten in der Hybridtabelle haben, aber nicht auf Tabelle selbst, können Sie keinen sekundären Index hinzufügen.
Wenn Sie häufige, wiederholte Abfragen mit Prädikaten auf einem bestimmten Attribut oder eine zusammengesetzte Gruppe von Attributen haben, sollten Sie in Erwägung ziehen, einen Index für dieses Attribut oder diese Gruppe von Attributen hinzuzufügen, um die Leistung zu verbessern. Beachten Sie jedoch die folgenden Aspekte bei der Verwendung von Indizes:
Erhöhter Speicherbedarf bei der Speicherung zusätzlicher Kopien der Teilmenge von Daten im Index.
Hinzufügen von Overhead zu DMLs, da Indizes synchron verwaltet werden.