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

DISTINCT

Pris en charge

Pris en charge

Fonctions externes

Non pris en charge

Non pris en charge

FROM

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

GROUP BY

Pris en charge

Pris en charge

CROSS 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

INNER 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

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" } ] } ] }');
Copy
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;
Copy

Notez le comportement suivant lors de l’utilisation de l’aplatissement latéral avec le rafraîchissement incrémentiel :

  • La sélection de la colonne SEQ aplatie à partir d’une jointure à aplatissement latérale n’est pas prise en charge.

  • Lorsque vous utilisez le paramètre AUTO, Snowflake choisit généralement une actualisation incrémentielle pour les requêtes avec des jointures latérales aplaties, à moins que d’autres limites ne l’empêchent.

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 :

  • Les jointures externes dans lesquelles les deux parties sont la même table.

  • Les jointures externes dans lesquelles les deux parties sont une sous-requête avec des clauses GROUP BY.

  • Les jointures externes avec des prédicats de non-égalité.

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

Fonctions ML ou LLM

Non pris en charge

Pris en charge

PIVOT et UNPIVOT

Non pris en charge

Non pris en charge

SAMPLE / TABLESAMPLE

Non pris en charge

Non pris en charge

Agrégats scalaires

Pris en charge

Pris en charge

SELECT

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

Séquences

Non pris en charge

Non pris en charge

Tous les opérateurs de sous-requête.

Non pris en charge

Pris en charge

UNION ALL

Pris en charge

Pris en charge

Fonctions définies par l’utilisateur (UDFs)

Pris en charge, à l’exception des limites suivantes :

  • Les UDFs écrites en Python, Java, Scala ou Javascript qui spécifient le paramètre VOLATILE ne sont pas prises en charge.

  • Les UDFs écrites en SQL et contenant des sous-requêtes ne sont pas prises en charge (par exemple, une instruction SELECT).

  • Le remplacement d’une IMMUTABLE UDF alors qu’elle est utilisée par une table dynamique qui utilise l’actualisation incrémentielle entraîne l’échec de l’actualisation.

  • L’importation d’UDFs à partir d’une zone de préparation externe n’est pas possible.

Pris en charge

Fonctions de table définies par l’utilisateur (UDTFs)

Pris en charge, à l’exception des limites suivantes :

  • Les UDTFs écrites en SQL ne sont pas prises en charge.

  • Les blocs SELECT qui lisent à partir des UDTFs doivent spécifier explicitement les colonnes et ne peuvent pas utiliser *.

Pris en charge

WHERE / HAVING / QUALIFY

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.

Fonctions de fenêtre

Pris en charge, à l’exception des limites suivantes :

  • Les fonctions de fenêtre multiples dans la même définition de table dynamique, où les clauses PARTITION BY ne sont pas identiques ou apparaissent dans des blocs de requête distincts, ne sont pas prises en charge.

  • L’utilisation des fonctions de fenêtre PERCENT_RANK, DENSE_RANK, RANK avec des cadres de fenêtre coulissants n’est pas prise en charge.

  • L’utilisation de ANY_VALUE n’est pas possible, car il s’agit d’une fonction non déterministe.

Pris en charge

WITH

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

ANY_VALUE

Non pris en charge

Non pris en charge

CLASSIFY_TEXT (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

COMPLETE (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

CURRENT_ACCOUNT

Non pris en charge

Pris en charge

CURRENT_DATE (et alias)

Pris en charge

Pris en charge

CURRENT_REGION

Non pris en charge

Pris en charge

CURRENT_ROLE

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.

CURRENT_WAREHOUSE

Non pris en charge

Pris en charge

DENSE_RANK

Non pris en charge

Pris en charge

EMBED_TEXT_768 (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

EMBED_TEXT_1024 (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

EXTRACT_ANSWER (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

FINETUNE (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

FIRST_VALUE

Pris en charge

Pris en charge

LAST_VALUE

Pris en charge

Pris en charge

NTH_VALUE

Pris en charge

Pris en charge

RANK

Non pris en charge

Pris en charge

ROW_NUMBER

Non pris en charge

Pris en charge

SENTIMENT (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

Fonctions séquentielles (par exemple SEQ1, SEQ2)

Non pris en charge

Pris en charge

TRANSLATE (SNOWFLAKE.CORTEX)

Non pris en charge

Pris en charge

Fonctions définies par l’utilisateur VOLATILE

Non pris en charge

Pris en charge