CREATE INTERACTIVE TABLE

Creates a new interactive table in the current/specified schema or replaces an existing table. Interactive tables are optimized for low-latency, interactive queries and provide the best performance when queried using interactive warehouses.

Les tables interactives prennent en charge un ensemble plus limité d’opérations SQL que les tables standard et sont conçus pour des charges de travail de requête en temps réel et à haute simultanéité telles que les tableaux de bord et les APIs alimentées par les données.

Note

Lorsque vous créez une table interactive, vous devez définir une clause CLUSTER BY sur une ou plusieurs colonnes qui sont utilisées dans les clauses WHERE pour vos requêtes les plus urgentes.

Vous pouvez également utiliser les variantes CREATE INTERACTIVE TABLE suivantes :

Pour la syntaxe complète CREATE TABLE utilisée pour les tables standard de Snowflake, voir CREATE TABLE.

Astuce

Avant de créer et d’utiliser des tables interactives, vous devez vous familiariser avec les limites et cas d’utilisation. Les tables interactives fonctionnent mieux avec des instructions SELECT simples comportant des clauses WHERE sélectives.

Voir aussi :

CREATE WAREHOUSE, ALTER WAREHOUSE, SHOW TABLES, SHOW WAREHOUSES, DROP TABLE

Syntaxe

CREATE [ OR REPLACE ] INTERACTIVE TABLE [ IF NOT EXISTS ] <table_name>
  (
    <col_name> <col_type>
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
      [ , <col_name> <col_type> [ ... ] ]
  )
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
  [ WAREHOUSE = <warehouse_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] AGGREGATION POLICY <policy_name> [ ENTITY KEY ( <col_name> [ , <col_name> ... ] ) ] ]
  [ [ WITH ] JOIN POLICY <policy_name> [ ALLOWED JOIN KEYS ( <col_name> [ , ... ] ) ] ]
  [ [ WITH ] STORAGE LIFECYCLE POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  AS <query>
Copy

Paramètres requis

table_name

Indique l’identificateur (c’est-à-dire le nom) de la table interactive ; doit être unique pour le schéma dans lequel la table est créée.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

CLUSTER BY ( expr [ , expr , ... ] )

Specifies one or more columns or column expressions in the table as the clustering key. Choose clustering columns that are used in the WHERE clauses of your most time-critical queries, as this significantly affects query performance.

Pour plus de détails sur le choix de clés de clustering performantes, voir Clés de clustering et tables en cluster.

AS query

Specifies the SELECT statement that populates the interactive table. This query must be specified last in the CREATE INTERACTIVE TABLE statement, regardless of other parameters included.

La requête suit les modèles CREATE TABLE AS SELECT (CTAS) et définit les données et le schéma de la table interactive.

col_name

Specifies the column identifier (i.e. name). Column identifiers must start with an alphabetic character and cannot contain spaces or special characters unless the entire identifier string is enclosed in double quotes.

Pour plus de détails, voir Exigences relatives à l’identificateur.

col_type

Spécifie le type de données pour la colonne.

Pour plus de détails sur les types de données qui peuvent être spécifiés pour les colonnes de la table, voir Référence de types de données SQL.

Paramètres facultatifs

MASKING POLICY policy_name

Spécifie la politique de masquage à définir sur une colonne.

USING ( col_name , cond_col_1 ... )

Spécifie les arguments à passer dans l’expression SQL de la politique de masquage conditionnelle.

La première colonne de la liste spécifie la colonne pour les conditions de la politique de masquage ou de tokenisation des données et doit correspondre à la colonne à laquelle la politique de masquage est définie.

Les colonnes supplémentaires spécifient les colonnes à évaluer pour déterminer s’il faut masquer ou tokeniser les données de chaque ligne du résultat de la requête lorsqu’une requête est effectuée sur la première colonne.

Si la clause USING est omise, Snowflake traite la politique de masquage conditionnelle comme une politique de masquage normale.

OR REPLACE

Indique de remplacer la table interactive si elle existe déjà dans le schéma. Cela revient à utiliser DROP TABLE sur la table existante, puis à créer une nouvelle table avec le même nom.

IF NOT EXISTS

Indique de créer la table interactive uniquement si elle n’existe pas déjà dans le schéma. Si une table portant le même nom existe déjà, l’instruction réussit sans créer de nouvelle table.

Note

Les clauses OR REPLACE et IF NOT EXISTS s’excluent mutuellement et elles ne peuvent pas toutes deux être utilisées dans la même instruction.

TARGET_LAG = 'num { seconds | minutes | hours | days }'

Indique le temps de latence maximal de l’actualisation automatique de la table interactive. Si spécifié, la table interactive devient une table interactive dynamique qui s’actualise automatiquement pour respecter le temps de latence spécifié des données sources.

  • La valeur minimale est de 60 secondes (1 minute).

  • Si aucune unité n’est spécifiée, le nombre représente les secondes.

  • Si TARGET_LAG n’est pas spécifié, la table est créée en tant que table interactive statique.

Lorsque TARGET_LAG est spécifié, le paramètre WAREHOUSE est également obligatoire.

WAREHOUSE = warehouse_name

Nécessaire lorsque TARGET_LAG est spécifié. Spécifie l’entrepôt standard utilisé pour les opérations d’actualisation lorsque TARGET_LAG est défini. Il doit s’agir d’un entrepôt standard et non d’un entrepôt interactif.

COPY GRANTS

Spécifie de conserver les privilèges d’accès de la table d’origine lors du remplacement d’une table interactive à l’aide de CREATE OR REPLACE INTERACTIVE TABLE.

Ce paramètre copie tous les privilèges, excepté OWNERSHIP, de la table existante vers la nouvelle table. Par défaut, le rôle qui exécute l’instruction CREATE INTERACTIVETABLE possède la nouvelle table.

COMMENT = 'string_literal'

Spécifie un commentaire pour la table interactive.

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

Spécifie la politique d’accès aux lignes à définir sur une table.

Ce paramètre n’est pas pris en charge par la syntaxe de variante CREATE OR ALTER.

AGGREGATION POLICY policy_name [ ENTITY KEY ( col_name [ , col_name ... ] ) ]

Spécifie une politique d’agrégation à définir sur une table. Vous pouvez appliquer une ou plusieurs politiques d’agrégation à une table.

Utilisez le paramètre ENTITY KEY facultatif pour définir les colonnes qui identifient de manière unique une entité dans la table. Pour plus d’informations, voir Mise en œuvre de la protection de la confidentialité au niveau de l’entité à l’aide de politiques d’agrégation. Vous pouvez spécifier une ou plusieurs clés d’entité pour une politique d’agrégation.

JOIN POLICY policy_name [ ALLOWED JOIN KEYS ( col_name [ , ... ] ) ]

Spécifie la politique de jointure à définir sur une table.

Utilisez le paramètre facultatif ALLOWED JOIN KEYS pour définir les colonnes autorisées à être utilisées comme colonnes de jonction lorsque cette politique est en vigueur. Pour plus d’informations, voir Politiques de jointure.

Ce paramètre n’est pas pris en charge par la syntaxe de variante CREATE OR ALTER.

STORAGE LIFECYCLE POLICY policy_name ON ( col_name [ , col_name ... ] )

Spécifie une politique de cycle de vie du stockage à joindre à la table.

Les colonnes spécifiées dans la clause ON doivent correspondre au nombre d’arguments et aux types de données définis dans la signature de la fonction de politique. Snowflake utilise ces colonnes pour évaluer l’expression de la politique et déterminer les lignes à archiver ou à supprimer.

Important

Si vous joignez une politique de stockage d’archives à une table, la table est définitivement affectée au niveau d’archivage spécifié pour sa durée de vie. Vous ne pouvez pas modifier le niveau d’archivage en appliquant une nouvelle politique. Par exemple, vous ne pouvez pas spécifier une politique créée avec un niveau d’archivage COOL dans ALTER TABLE…DROP STORAGE LIFECYCLE POLICY puis modifier le tableau pour y ajouter une politique créée avec un niveau d’archive COLD. Pour modifier le niveau d’archivage d’une table, contactez l’assistance Snowflake pour demander la suppression des données actuellement archivées. Pour d’autres considérations, voir Politiques du stockage d’archives.

Pour plus d’informations sur la création et la gestion des politiques de cycle de vie du stockage, voir Create and manage storage lifecycle policies.

Ce paramètre n’est pas pris en charge par la syntaxe de variante CREATE OR ALTER.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :

Privilège

Objet

Remarques

CREATE INTERACTIVE TABLE

Schéma

Requis pour créer une table interactive dans le schéma.

SELECT

Table, table externe, vue

Requis sur les tables et/ou les vues interrogées dans la clause AS SELECT.

APPLY

Politique de masquage, politique d’accès aux lignes, balise, politique de cycle de vie du stockage

Requis uniquement lors de l’application d’une politique de masquage, d’une politique d’accès aux lignes, de balises d’objet, d’une politique de cycle de vie du stockage ou de toute combinaison de ces fonctionnalités de gouvernance lors de la création de tables.

USAGE

Base de données, schéma

Requis pour la base de données et le schéma contenant la table interactive.

USAGE

Entrepôt

Requis sur l’entrepôt spécifié dans le paramètre WAREHOUSE (lorsque TARGET_LAG est utilisé).

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes sur l’utilisation

  • Les tables interactives doivent être créées en utilisant un entrepôt standard, et non un entrepôt interactif.

  • La clause CLUSTER BY est nécessaire pour toutes les tables interactives et affecte considérablement les performances des requêtes. Choisissez soigneusement les colonnes de clustering en fonction de vos modèles de clause WHERE les plus courants.

  • Les tables interactives offrent les meilleures performances lorsqu’elles sont interrogées via des entrepôts interactifs. Pour obtenir des performances optimales pour une table interactive :

    1. Créer un entrepôt interactif

    2. Associer la table interactive à l’entrepôt interactif à l’aide de ALTER WAREHOUSE … ADD TABLES

    3. Reprendre l’entrepôt interactif

    4. Utiliser l’entrepôt interactif pour interroger la table interactive

  • Les tables interactives prennent en charge un ensemble limité d’opérations SQL par rapport aux tables standard :

    • Les instructions SELECT contenant les clauses WHERE sont optimisées.

    • Les opérations GROUP BY simples sont prises en charge.

    • Les opérations DML (INSERT, UPDATE, DELETE) ne sont pas pris en charge. La seule opération DML autorisée est INSERT OVERWRITE.

    • Les opérations de requête complexes peuvent avoir des avantages limités en termes de performances.

  • Les tables interactives dynamiques (contenant TARGET_LAG) s’actualisent automatiquement en utilisant l’entrepôt standard spécifié. Le temps de latence permet d’équilibrer la fraîcheur des données et les coûts de calcul.

  • Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

  • Une seule politique de masquage qui utilise des colonnes conditionnelles peut être appliquée à plusieurs tables, à condition que la structure des colonnes de la table corresponde aux colonnes spécifiées dans la politique.

  • Lors de la création d’une table avec une politique de masquage sur une ou plusieurs colonnes de la table ou une politique d’accès aux lignes ajoutée à la table, utilisez la fonction POLICY_CONTEXT pour simuler une requête sur la ou les colonnes protégées par une politique de masquage et la table protégée par une politique d’accès aux lignes.

  • Les tables interactives stockent des métadonnées et des informations d’index supplémentaires pour accélérer les requêtes, mais elles sont compressées et ont des conséquences minimes sur la taille de stockage.

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

  • Pour créer une table avec la clause WITH STORAGE LIFECYCLE POLICY :

    • Vous devez disposer des privilèges nécessaires pour appliquer la politique. Pour obtenir des informations sur les privilèges requis, consultez Storage lifecycle policy privileges.

    • Une table ne peut avoir qu’une seule politique de cycle de vie de stockage associée.

    • Le nombre de colonnes doit correspondre au nombre d’arguments dans la signature de la fonction de politique, et les données des colonnes doivent être compatibles avec les types d’arguments.

    • Les politiques associées ne sont pas affectées si vous renommez les colonnes de la table. Snowflake associe des politiques à des tables en utilisant les IDs de colonne.

    • Afin d’évaluer et d’appliquer les expressions de politique de cycle de vie du stockage, Snowflake contourne en interne et temporairement toute politique de gouvernance sur une table.

La syntaxe de variante : Table interactive statique

Crée une table interactive statique qui est renseignée une fois à partir de la requête source :

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

La syntaxe de variante : Table interactive dynamique

Crée une table interactive dynamique qui s’actualise automatiquement en fonction du temps de latence spécifié :

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  TARGET_LAG = '<num> { seconds | minutes | hours | days }'
  WAREHOUSE = <warehouse_name>
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

Les tables interactives dynamiques sont actualisées automatiquement pour rester dans le TARGET_LAG spécifié des données sources, en utilisant l’entrepôt standard spécifié pour les opérations d’actualisation.

Exemples

Les exemples suivants montrent différentes façons de créer des tables interactives, en spécifiant la source de leurs données et la façon d’actualiser les données.

Table interactive statique de base

Créez une table interactive statique à partir de données de commandes existantes, regroupées par client et par date pour des performances optimales de requête :

CREATE INTERACTIVE TABLE orders_interactive
  CLUSTER BY (customer_id, order_date)
  COMMENT = 'Interactive table for real-time order analytics'
AS
  SELECT customer_id, order_date, product_id, quantity, total_amount
  FROM orders_staging
  WHERE order_date >= '2024-01-01';
Copy

Table interactive dynamique avec actualisation automatique

Créez une table interactive dynamique qui s’actualise toutes les 5 minutes pour fournir des synthèses de ventes en temps quasi réel :

CREATE INTERACTIVE TABLE sales_summary_interactive
  CLUSTER BY (region, product_category)
  TARGET_LAG = '5 minutes'
  WAREHOUSE = refresh_warehouse
  COMMENT = 'Real-time sales dashboard data'
AS
  SELECT
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count,
    AVG(sales_amount) as avg_sale
  FROM sales_data
  GROUP BY region, product_category;
Copy

Clustering multi-colonnes pour les requêtes complexes

Créez une table interactive avec un clustering multi-colonnes optimisé pour différents modèles de requêtes :

CREATE INTERACTIVE TABLE customer_analytics_interactive
  CLUSTER BY (customer_tier, region, signup_date)
  TARGET_LAG = '10 minutes'
  WAREHOUSE = analytics_warehouse
AS
  SELECT
    customer_id,
    customer_tier,
    region,
    signup_date,
    total_orders,
    lifetime_value,
    last_order_date
  FROM customer_metrics
  WHERE customer_tier IN ('GOLD', 'PLATINUM', 'DIAMOND');
Copy

Remplacer une table interactive existante

Remplacez une table interactive existante par des paramètres de clustering et d’actualisation mis à jour :

CREATE OR REPLACE INTERACTIVE TABLE product_performance_interactive
  CLUSTER BY (category, brand, launch_date)
  TARGET_LAG = '2 minutes'
  WAREHOUSE = fast_refresh_warehouse
  COPY GRANTS
AS
  SELECT
    product_id,
    category,
    brand,
    launch_date,
    units_sold,
    revenue,
    customer_rating
  FROM product_sales_view
  WHERE launch_date >= DATEADD('month', -6, CURRENT_DATE());
Copy