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 mit einer der folgenden Methoden erstellen.

  • CREATE HYBRID TABLE. Das folgende Beispiel erstellt eine Hybridtabelle mit einer erforderlichen PRIMARY KEY-Einschränkung, fügt einige Zeilen ein, löscht eine Zeile und fragt die Tabelle ab:

    CREATE OR REPLACE HYBRID TABLE application_log (
      id NUMBER PRIMARY KEY AUTOINCREMENT,
      col1 VARCHAR(20),
      col2 VARCHAR(20) NOT NULL
      );
    
    INSERT INTO application_log (col1, col2) VALUES ('A1', 'B1');
    INSERT INTO application_log (col1, col2) VALUES ('A2', 'B2');
    INSERT INTO application_log (col1, col2) VALUES ('A3', 'B3');
    INSERT INTO application_log (col1, col2) VALUES ('A4', 'B4');
    
    SELECT * FROM application_log;
    
    UPDATE application_log SET col2 = 'B3-updated' WHERE id = 3;
    
    DELETE FROM application_log WHERE id = 4;
    
    SELECT * FROM application_log;
    
    Copy
  • CREATE HYBRID TABLE :.. AS SELECT (CTAS) oder CREATE HYBRID TABLE … LIKE. Beispiel:

    CREATE OR REPLACE HYBRID TABLE dept_employees (
      employee_id INT PRIMARY KEY,
      department_id VARCHAR(200)
      )
    AS SELECT employee_id, department_id FROM company_employees;
    
    Copy

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.

Optimiertes Massenladen

Sie können Daten in großen Mengen in Hybridtabellen laden, indem Sie sie entweder aus einem Stagingbereich oder aus anderen Tabellen kopieren (mit CTAS, COPY INTO <Tabelle> oder INSERT INTO. … SELECT).

Die Optimierung von Massenladungen hängt davon ab, ob die Tabelle frisch erstellt wurde, ohne dass jemals Datensätze geladen wurden, oder ob sie mit einer CTAS-Abfrage erstellt wurde.

Wenn eine Hybridtabelle leer ist, verwenden alle drei Lademethoden (CTAS, COPY, und INSERT INTO. .. SELECT) optimiertes Massenladen, um den Ladevorgang zu beschleunigen. Nachdem die Tabelle geladen wurde, gilt die normale INSERT-Leistung. Sie können immer noch inkrementelle Batch-Ladungen mit den Operationen COPY und INSERT INTO. .. SELECT durchführen, aber diese sind in der Regel weniger effizient. Massenladegeschwindigkeiten von ca. 1 Million Datensätzen pro Minute sind üblich, können aber je nach Struktur der Tabelle stark variieren (z. B. sind größere Datensätze langsamer zu laden). Das optimierte Massenladen wird in einem zukünftigen Release um die Unterstützung von inkrementellem Batch-Laden erweitert.

Sie können die Statistics-Informationen in Snowsight-Abfrageprofilen überprüfen, um festzustellen, ob der Massenlade-Schnellpfad verwendet wurde. Number of rows inserted wird als Number of rows bulk loaded bezeichnet, wenn der Schnellpfad verwendet wird. Diese CTAS-Operation lädt zum Beispiel 200.000 Zeilen in eine neue Tabelle:

CTAS-Abfrageprofil, das das optimierte Massenladen verwendet

Ein nachfolgendes inkrementelles Batch-Laden in dieselbe Tabelle würde kein optimiertes Massenladen verwenden.

Weitere Informationen zu Abfrageprofilen finden Sie unter Abfrageprofile für Hybridtabellen analysieren und Abfrageaktivität mit Abfrageverlauf überwachen.

Achtung

CTAS-Befehle unterstützen keine FOREIGN KEY-Einschränkungen. Wenn Ihre Hybridtabelle FOREIGN KEY-Einschränkungen erfordert, verwenden Sie COPY oder INSERT INTO. … SELECT, um die Tabelle zu laden.

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. Fügen Sie der Tabellendefinition zum Beispiel eine eindeutige Einschränkung und einen sekundären Index hinzu:

CREATE OR REPLACE HYBRID TABLE target_hybrid_table (
    col1 VARCHAR(32) PRIMARY KEY,
    col2 NUMBER(38,0) UNIQUE,
    col3 NUMBER(38,0),
    INDEX index_col3 (col3)
    )
  AS SELECT col1, col2, col3 FROM source_table;
Copy

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.

Bemerkung

Prüfen Sie den Status der Indexerstellung mit dem Befehl SHOW INDEXES. Es wird nur ein Indexaufbau zur gleichen Zeit unterstützt.

Wenn sich Ihre hybride Tabellenanwendung jedoch im Entwicklungs- oder Testmodus befindet und eine gewisse Ausfallzeit für die Tabelle kein Problem darstellt, ist es effizienter, die hybride Tabelle neu zu erstellen und die Indizes durch Ausführen eines optimierten Massenladens zu erstellen, was effizienter ist als die Online-Indexerstellung mit dem Befehl CREATE INDEX.

Optimiertes Massenladen wird unterstützt für CTAS, COPY und INSERT INTO. … SELECT, aber Sie können CTAS nicht verwenden, wenn Ihre Tabelle eine FOREIGN KEY-Einschränkung hat. Die zweite in diesem Beispiel erstellte Tabelle, fk_hybrid_table, müsste mit COPY oder INSERT INTO. … SELECT gefüllt werden:

CREATE OR REPLACE HYBRID TABLE ref_hybrid_table (
    col1 VARCHAR(32) PRIMARY KEY,
    col2 NUMBER(38,0) UNIQUE
);

CREATE OR REPLACE HYBRID TABLE fk_hybrid_table (
    col1 VARCHAR(32) PRIMARY KEY,
    col2 NUMBER(38,0),
    col3 NUMBER(38,0),
    FOREIGN KEY (col2) REFERENCES ref_hybrid_table(col2),
    INDEX index_col3 (col3)
);
Copy

Alle Hybridtabellen benötigen einen eindeutigen Primärschlüssel. Die Daten in einer Hybridtabelle sind nach diesem Primärschlüssel geordnet. Sie können zusätzliche sekundäre Indizes für nicht primäre Schlüsselattribute erstellen, um die Suche nach diesen Attributen zu beschleunigen. Indizes können die Anzahl der zu durchsuchenden Datensätze reduzieren, wenn ein Abfrageprädikat eine der folgenden Bedingungen verwendet:

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 bei der Verwendung von Indizes die folgenden Punkte:

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

Fehler bei der Indexerstellung während des Ladens

Die Indexgrößen sind in der Breite begrenzt. Wenn Sie Indizes für Spalten in einer Hybridtabelle erstellen, insbesondere Indizes für eine große Anzahl von Spalten, kann jeder Befehl, der die Tabelle lädt (einschließlich CTAS, COPY oder INSERT INTO. .. SELECT), den folgenden Fehler zurückgeben. In diesem Fall enthält die Tabelle einen Index namens IDX_HT100_COLS:

The value is too long for index "IDX_HT100_COLS".

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, Indizes für weniger Spalten zu erstellen.

Sie können auch versuchen, INCLUDE-Spalten auf sekundären Indizes zu verwenden, wenn Sie die Tabelle erstellen. Ein einfaches Beispiel finden Sie unter Sekundären Index mit einer INCLUDE-Spalte erstellen. (INCLUDE-Spalten werden unterstützt, wenn Sie Hybridtabellen erstellen, aber nicht, wenn Sie Indizes mit dem Befehl CREATE INDEX erstellen.)