Hybridtabelle erstellen

Dieses Thema bietet einen Überblick über das Erstellen von Hybridtabellen in Snowflake.

Erstellen einer Hybridtabelle

Sie können eine Hybridtabelle mit SQL-Befehlen auf eine der folgenden Arten erstellen:

-- Create hybrid table
CREATE OR REPLACE HYBRID TABLE icecream (
  id NUMBER PRIMARY KEY AUTOINCREMENT START 1 INCREMENT 1,
  col1 VARCHAR NOT NULL,
  col2 VARCHAR NOT NULL
);

-- Insert data into hybrid table
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 data in hybrid table
UPDATE icecream SET col2 = 'B3-updated' WHERE id = 3;

-- Delete data from hybrid table
DELETE FROM icecream WHERE id = 4;

-- Select data from hybrid table
SELECT * FROM icecream;
Copy
  • Verwenden Sie die Syntaxvariante CREATE HYBRID TABLE ... AS SELECT und CREATE HYBRID TABLE ... LIKE. Siehe CREATE HYBRID TABLE. Beispiel:

CREATE OR REPLACE HYBRID TABLE table1 (
  employee_id INT PRIMARY KEY,
  department_id VARCHAR(200)
) as
SELECT * FROM table2;
Copy

Laden von Daten

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.

Sie können Daten in Hybridtabellen laden, indem Sie sie aus einem Stagingbereich oder aus anderen Tabellen kopieren (d. h. mit CREATE TABLE … AS SELECT, COPY oder INSERT INTO … SELECT), aber es wird dringend das Massenladen von Daten in eine Hybridtabelle mit einer CREATE TABLE … AS SELECT-Anweisung empfohlen. Das Massenladen ist auf Performance optimiert, sodass CREATE TABLE … AS SELECT-Operationen in den meisten Fällen etwa 10 Mal schneller als andere Optionen sind, wenn mehrere Millionen Datensätze geladen werden.

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. Auch Abfragen auf kürzlich geladene Daten werden langsamer sein. Das Optimieren des Massenladens für DML-Anweisungen wie COPY ist für die nahe Zukunft geplant.

Achtung

CREATE TABLE … AS SELECT unterstützt keine Fremdschlüsseleinschränkungen. Wenn Sie Fremdschlüsseleinschränkungen in Ihrer Hybridtabelle verwenden müssen, müssen Sie eine andere Option wie COPY oder INSERT INTO … SELECT verwenden.

Wenn Ihre Quelldaten nicht in einer Snowflake-Tabelle, sondern in einem externen Stagingbereich vorliegen, verwenden Sie CREATE TABLE ... AS SELECT * FROM @stage/data.csv anstelle von COPY FROM @stage/data.csv, um von der effizienteren Lademethode zu profitieren.

Wenn Sie nicht CREATE TABLE … AS SELECT verwenden, sollten Sie in der Lage sein, bis zu etwa 1 Millionen 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.

Bemerkung

Andere Methoden zum Laden von Daten in Snowflake-Tabellen (z. B. Snowpipe) werden derzeit nicht unterstützt.

Index zu einer Hybridtabelle hinzufügen

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);
Copy

Wenn Sie einen Index zu einer bestehenden Hybridtabelle hinzufügen, wird empfohlen, die Hybridtabelle neu zu erstellen.

Optional können Sie mit CREATE INDEX einen Index für eine bestehende Hybridtabelle erstellen. Wenn Sie einen Index zu einer bestehenden Hybridtabelle hinzufügen, die für einen Workload verwendet wird, verwenden Sie CREATE INDEX. CREATE INDEX baut einen Index parallel auf, ohne dass die Tabelle während der Operation gesperrt wird.

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 dieses Attributs zu beschleunigen. Indizes können für die Prädikate =, >, >=, <, <= und IN genutzt werden, um die Anzahl der zu durchsuchenden Datensätze zu reduzieren.

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 die 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.