Requêtes prises en charge pour les tables dynamiques¶
Les tables dynamiques prennent en charge les expressions SQL standard et les fonctions supportées par Snowflake, notamment les opérations mathématiques, les fonctions de chaîne, les fonctions de date, etc. Ce sujet décrit les expressions, les constructions, les fonctions, les opérateurs et les clauses que les tables dynamiques prennent en charge dans les modes d’actualisation incrémentielle et complète.
SSi une requête utilise des expressions, des mots-clés, des opérateurs ou des clauses qui ne sont pas pris en charge par l’actualisation incrémentielle, le processus d’actualisation automatisé utilise à la place une actualisation complète, , ce qui peut entraîner un coût supplémentaire.
Types de données pris en charge¶
Les tables dynamiques prennent en charge tous les types de données SQL Snowflake pour les actualisations incrémentielles et complètes, à l’exception de ce qui suit :
Types de données structurés
Types de données géospatiales (actualisation complète uniquement)
Prise en charge des requêtes en modes d’actualisation incrémentiel et complet¶
Mot clé |
Mode d’actualisation incrémentielle |
Mode d’actualisation complète |
---|---|---|
Pris en charge |
Pris en charge |
|
Non pris en charge |
Non pris en charge |
|
Tables sources, vues, tables Apache Iceberg™ gérées par Snowflake et autres tables dynamiques. Les sous-requêtes en dehors des clauses FROM (par exemple, WHERE EXISTS) ne sont pas prises en charge. |
Pris en charge |
|
Pris en charge |
Pris en charge |
|
Pris en charge. Vous pouvez spécifier un nombre quelconque de tables dans la jointure, et les mises à jour de toutes les tables de la jointure sont reflétées dans les résultats de la requête. |
Pris en charge |
|
Pris en charge. Vous pouvez spécifier un nombre quelconque de tables dans la jointure, et les mises à jour de toutes les tables de la jointure sont reflétées dans les résultats de la requête. |
Pris en charge |
|
LATERAL JOIN |
Non pris en charge. Toutefois, vous pouvez utiliser LATERAL avec FLATTEN(). Par exemple : CREATE TABLE persons
AS
SELECT column1 AS id, parse_json(column2) AS entity
FROM values
(12712555,
'{ name: { first: "John", last: "Smith"},
contact: [
{ business:[
{ type: "phone", content:"555-1234" },
{ type: "email", content:"j.smith@example.com" } ] } ] }'),
(98127771,
'{ name: { first: "Jane", last: "Doe"},
contact: [
{ business:[
{ type: "phone", content:"555-1236" },
{ type: "email", content:"j.doe@example.com" } ] } ] }');
CREATE DYNAMIC TABLE my_dynamic_table
TARGET_LAG = DOWNSTREAM
WAREHOUSE = mywh
AS
SELECT p.id, f.value, f.path
FROM persons p,
LATERAL FLATTEN(input => p.entity) f;
Notez le comportement suivant lors de l’utilisation de l’aplatissement latéral avec le rafraîchissement incrémentiel :
|
Pris en charge. |
OUTER-EQUI JOIN. |
Pris en charge. Vous pouvez spécifier un nombre quelconque de tables dans la jointure, et les mises à jour de toutes les tables de la jointure sont reflétées dans les résultats de la requête. |
Pris en charge |
[{LEFT | RIGHT | FULL }] OUTER JOIN |
Ceci n’est pas pris en charge :
Autrement, vous pouvez spécifier un nombre quelconque de tables dans une jointure externe, et les mises à jour de toutes les tables de la jointure sont reflétées dans les résultats de la requête. |
Pris en charge |
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Non pris en charge |
|
Non pris en charge |
Non pris en charge |
|
Agrégats scalaires |
Pris en charge |
Pris en charge |
Expressions, y compris celles qui utilisent des fonctions intégrées déterministes et des fonctions définies par l’utilisateur immuables. |
Pris en charge |
|
Définir les opérateurs (UNION, MINUS, EXCEPT, INTERSECT) |
Non pris en charge |
Pris en charge |
Non pris en charge |
Non pris en charge |
|
Tous les opérateurs de sous-requête. |
Non pris en charge |
Pris en charge |
Pris en charge |
Pris en charge |
|
Pris en charge, à l’exception des limites suivantes :
|
Pris en charge |
|
Pris en charge, à l’exception des limites suivantes :
|
Pris en charge |
|
Les filtres contenant les mêmes expressions que celles valables dans SELECT sont pris en charge. Les filtres utilisant les fonctions CURRENT_TIMESTAMP, CURRENT_TIME et CURRENT_DATE et leurs alias sont pris en charge. |
Pris en charge. Les filtres utilisant les fonctions CURRENT_TIMESTAMP, CURRENT_TIME et CURRENT_DATE et leurs alias sont pris en charge. |
|
Pris en charge, à l’exception des limites suivantes :
|
Pris en charge |
|
Expressions de table communes (CTEs) qui utilisent des fonctions d’actualisation incrémentielle prises en charge dans la sous-requête. |
Pris en charge |
Prise en charge des fonctions non déterministes dans les modes d’actualisation incrémentielle et complète¶
Fonction non déterministe |
Mode d’actualisation incrémentielle |
Mode d’actualisation complète |
---|---|---|
Non pris en charge |
Non pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
CURRENT_DATE (et alias) |
Pris en charge |
Pris en charge |
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
CURRENT_TIME (et alias) |
Pris en charge |
Pris en charge |
CURRENT_TIMESTAMP (et alias) |
Pris en charge |
Pris en charge |
Des fonctions qui s’appuient sur CURRENT_USER. |
Non pris en charge. Les actualisations des tables dynamiques jouent le rôle de leur propriétaire avec un utilisateur SYSTEM spécial. |
Non pris en charge. Les actualisations des tables dynamiques jouent le rôle de leur propriétaire avec un utilisateur SYSTEM spécial. |
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Pris en charge |
Pris en charge |
|
Pris en charge |
Pris en charge |
|
Pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Non pris en charge |
Pris en charge |
|
Fonctions séquentielles (par exemple |
Non pris en charge |
Pris en charge |
Non pris en charge |
Pris en charge |
|
Fonctions définies par l’utilisateur VOLATILE |
Non pris en charge |
Pris en charge |