Création d’une table hybride

Ce chapitre présente brièvement la création de tables hybrides dans Snowflake.

Création d’une table hybride

Vous pouvez créer une table hybride via des commandes SQL de l’une des manières suivantes :

-- 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
  • Utilisez la syntaxe de variante CREATE HYBRID TABLE ... AS SELECT et CREATE HYBRID TABLE ... LIKE. Voir CREATE HYBRID TABLE. Par exemple :

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

Chargement des données

Note

Pour créer une table hybride, vous devez disposer d’un entrepôt en cours d’exécution spécifié comme l’entrepôt actuel de votre session. Des erreurs peuvent se produire si aucun entrepôt en cours d’exécution n’est spécifié lorsque vous créez une table hybride. Pour plus d’informations, voir Utilisation des entrepôts.

Vous pouvez charger des données en masse dans des tables hybrides en les copiant à partir d’une zone de préparation de données ou d’autres tables (c’est-à-dire en utilisant CREATE TABLE … AS SELECT, COPY ou INSERT INTO … SELECT), mais il est vivement conseillé de charger des données en masse dans une table hybride via une instruction CREATE TABLE… AS SELECT. Le chargement en masse est optimisé en termes de performances et permet des opérations CREATE TABLE … AS SELECT environ 10 fois plus rapides que les autres options, dans la plupart des cas, lors du chargement de plusieurs millions d’enregistrements.

Le chargement en masse via INSERT ou COPY est également pris en charge, mais le chargement de données est plus lent pour les grandes quantités de données. Vous risquez d’être confronté(e) à de longs temps d’attente, voire à des dépassements de délai, lors du chargement d’ensembles de données volumineux. Les requêtes portant sur des données récemment chargées seront elles aussi plus lentes. L’optimisation du chargement en masse pour les instructions DML telles que COPY est prévue dans un avenir proche.

Attention

CREATE TABLE … AS SELECT ne prend pas en charge les contraintes de clé étrangère. Si vous devez utiliser des contraintes de clé étrangère dans votre table hybride, vous devez utiliser une autre option telle que COPY ou INSERT INTO … SELECT.

Si vos données sources existent dans une zone de préparation externe au lieu d’une table Snowflake, utilisez CREATE TABLE ... AS SELECT * FROM @stage/data.csv au lieu de COPY FROM @stage/data.csv pour bénéficier de la méthode de chargement la plus efficace.

Si vous n’utilisez pas CREATE TABLE … AS SELECT, vous devriez pouvoir charger jusqu’à environ 1 million d’enregistrements par minute. Notez toutefois que cette approximation dépend de la structure de la table (par exemple, la taille des enregistrements, les enregistrements plus volumineux étant plus lents à charger). Si vos opérations de chargement prennent trop de temps et échouent, testez avec un ensemble de données plus petit ou divisez vos chargements en morceaux plus petits.

Note

Les autres méthodes de chargement de données dans des tables Snowflake (par exemple, Snowpipe) ne sont actuellement pas prises en charge.

Ajout d’un index à une table hybride

Vous pouvez définir l’ensemble des clés, index et contraintes lorsque vous créez une table hybride. Par exemple :

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

Lors de l’ajout d’un index à une table hybride existante, il est recommandé de recréer la table hybride.

Vous pouvez éventuellement créer un index pour une table hybride existante via CREATE INDEX. Lors de l’ajout d’un index à une table hybride existante actuellement utilisée pour une charge de travail, employez CREATE INDEX. CREATE INDEX créera un index simultanément sans verrouiller la table pendant l’opération.

Une table hybride nécessite une clé primaire unique. Les données de votre table hybride sont triées en fonction de cette clé primaire. Vous pouvez ajouter des index secondaires supplémentaires à des attributs de clé non primaire afin d’accélérer les recherches sur cet attribut. Les index peuvent être exploités pour les prédicats =, >, >=, <, <=, IN afin de réduire le nombre d’enregistrements à analyser.

Attention

Pour ajouter un index secondaire, vous devez utiliser un rôle bénéficiant du privilège SELECT sur la table hybride. Si vous avez accès à une vue des données de la table hybride, mais pas à la table elle-même, vous ne pourrez pas ajouter d’index secondaire.

Si vous avez des requêtes courantes et répétées avec des prédicats sur un attribut spécifique ou un groupe d’attributs composite, vous pouvez envisager d’ajouter un index à cet attribut ou à ce groupe d’attributs pour améliorer les performances. Il convient toutefois de tenir compte des considérations suivantes lors de l’utilisation d’index :

  • Augmentation de la consommation de stockage lors du stockage de copies supplémentaires du sous-ensemble de données dans l’index.

  • Ajout de frais généraux aux DMLs, car les index sont gérés de manière synchrone.