CREATE INTERACTIVE TABLE¶
Crée une nouvelle table interactive dans le schéma actuel/spécifié ou remplace une table existante. Les tables interactives sont optimisées pour les requêtes interactives à faible latence et offrent les meilleures performances lorsqu’elles sont interrogées à l’aide d’entrepôts interactifs.
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 :
La syntaxe de variante : Table interactive statique (crée une table interactive statique alimentée à partir d’une requête)
La syntaxe de variante : Table interactive dynamique (crée une table interactive dynamique avec actualisation automatique)
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>
CLUSTER BY ( <expr> [ , <expr> , ... ] )
[ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
[ WAREHOUSE = <warehouse_name> ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
AS <query>
Paramètres requis¶
table_nameIndique 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 , ... ] )Obligatoire. Spécifie une ou plusieurs colonnes ou expressions de colonne dans la table comme clés de clustering. Choisissez les colonnes de clustering qui sont utilisées dans les clauses WHERE de vos requêtes les plus urgentes, car cela affecte considérablement les performances des requêtes.
Pour plus de détails sur le choix de clés de clustering performantes, voir Clés de clustering et tables en cluster.
AS queryObligatoire. Spécifie l’instruction SELECT qui renseigne la table interactive. Cette requête doit être spécifiée en dernier dans l’instruction CREATE INTERACTIVE TABLE, indépendamment des autres paramètres inclus.
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.
Paramètres facultatifs¶
OR REPLACEIndique 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 EXISTSIndique 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_nameNé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 GRANTSSpé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.
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. |
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 :
Créer un entrepôt interactif
Associer la table interactive à l’entrepôt interactif à l’aide de ALTER WAREHOUSE … ADD TABLES
Reprendre l’entrepôt interactif
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.
Les tables interactives statiques nécessitent une actualisation manuelle pour se mettre à jour avec les nouvelles données des tables sources.
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.
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>
Les tables interactives statiques ne s’actualisent pas automatiquement et nécessitent des mises à jour manuelles pour refléter les modifications apportées aux données sources.
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>
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';
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;
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');
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());