Guide de traduction SQL Snowflake
Ce document décrit les similitudes et les différences de syntaxe SQL entre Snowflake et BigQuery pour vous aider à accélérer la planification et l'exécution de la migration de votre entrepôt de données d'entreprise (EDW, Enterprise Data Warehouse) vers BigQuery. L'entreposage de données Snowflake est conçu pour fonctionner avec la syntaxe SQL propre à Snowflake. Vous devrez peut-être modifier les scripts écrits pour Snowflake pour pouvoir les utiliser dans BigQuery, car les dialectes SQL varient selon les services. Utilisez la traduction SQL par lot pour migrer vos scripts SQL de façon groupée, ou la traduction SQL interactive pour traduire des requêtes ad hoc. Snowflake SQL est compatible avec les deux outils en version preview.
Types de données
Cette section présente les équivalences entre les types de données dans Snowflake et BigQuery.
Snowflake | BigQuery | Remarques |
---|---|---|
NUMBER/
DECIMAL/NUMERIC |
NUMERIC |
Le type de données NUMBER dans Snowflake accepte 38 chiffres de précision et 37 chiffres d'échelle. La précision et l'échelle peuvent être spécifiées en fonction de l'utilisateur.BigQuery accepte NUMERIC et BIGNUMERIC avec la précision et l'échelle facultatives dans certaines limites. |
INT/INTEGER |
BIGNUMERIC |
INT/INTEGER et tous les autres types de données INT , tels que BIGINT, TINYINT, SMALLINT, BYTEINT , représentent un alias pour le type de données NUMBER , où la précision et l'échelle ne peuvent pas être spécifiées, et sont toujours définies sur NUMBER(38, 0) . |
BIGINT |
BIGNUMERIC |
|
SMALLINT |
BIGNUMERIC |
|
TINYINT |
BIGNUMERIC |
|
BYTEINT |
BIGNUMERIC |
|
FLOAT/ |
FLOAT64 |
Le type de données FLOAT de Snowflake établit "NaN" comme étant supérieur à X, où X est une valeur FLOAT (autre que "NaN").Le type de données FLOAT de BigQuery établit "NaN" sur <X, où X est une valeur FLOAT (autre que "NaN"). |
DOUBLE/ REAL |
FLOAT64 |
Le type de données DOUBLE de Snowflake est synonyme du type de données FLOAT dans Snowflake, mais il s'affiche généralement de manière incorrecte comme FLOAT . Il est correctement stocké sous le nom DOUBLE . |
VARCHAR |
STRING |
Le type de données VARCHAR dans Snowflake ne doit pas dépasser 16 Mo de longueur (non compressé). Si la longueur n'est pas spécifiée, la valeur par défaut est la longueur maximale.Dans BigQuery, le type de données STRING est stocké sous la forme d'un Unicode encodé UTF-8 de longueur variable. La longueur ne doit pas dépasser 16 000 caractères. |
CHAR/CHARACTER |
STRING |
Le type de données CHAR dans Snowflake a une longueur maximale de 1. |
STRING/TEXT |
STRING |
Le type de données STRING dans Snowflake est synonyme de VARCHAR de Snowflake. |
BINARY |
BYTES |
|
VARBINARY |
BYTES |
|
BOOLEAN |
BOOL |
Le type de données BOOL de BigQuery ne peut accepter que TRUE/FALSE , contrairement au type de données BOOL de Snowflake, qui peut accepter TRUE/FALSE/NULL. |
DATE |
DATE |
Le type DATE dans Snowflake accepte les formats de date les plus courants, contrairement au type DATE dans BigQuery, qui n'accepte que les dates au format AAAA-[M]M-[D]D. |
TIME |
TIME |
Le type TIME de Snowflake accepte une précision de 0 à 9 nanosecondes, tandis que le type TIME de BigQuery accepte une précision de 0 à 6 nanosecondes. |
TIMESTAMP |
DATETIME |
TIMESTAMP est un alias configurable par l'utilisateur dont la valeur par défaut est TIMESTAMP_NTZ et qui correspond à DATETIME dans BigQuery. |
TIMESTAMP_LTZ |
TIMESTAMP |
|
TIMESTAMP_NTZ/DATETIME |
DATETIME |
|
TIMESTAMP_TZ |
TIMESTAMP |
|
OBJECT |
JSON |
Le type OBJECT de Snowflake n'accepte pas les valeurs de type explicite. Les valeurs sont de type VARIANT . |
VARIANT |
JSON |
Le type OBJECT de Snowflake n'accepte pas les valeurs de type explicite. Les valeurs sont de type VARIANT . |
ARRAY |
ARRAY<JSON> |
Le type ARRAY de Snowflake n'accepte que les types VARIANT , tandis que le type ARRAY de BigQuery peut accepter tous les types de données, à l'exception d'un tableau lui-même. |
BigQuery dispose également des types de données suivants, qui ne disposent pas d'un équivalent direct Snowflake :
Syntaxe des requêtes et opérateurs de requêtes
Cette section traite des différences de syntaxe des requêtes entre Snowflake et BigQuery.
Instruction SELECT
La plupart des instructions SELECT
Snowflake sont compatibles avec BigQuery. Le tableau suivant contient une liste de différences mineures.
Snowflake | BigQuery | |
---|---|---|
|
|
|
Remarque : Snowflake permet de créer et de référencer un alias dans la même instruction SELECT . |
|
|
|
|
Par défaut, les alias et les identifiants Snowflake ne sont pas sensibles à la casse. Pour conserver la casse, placez les alias et les identifiants entre guillemets doubles (").
Clause FROM
Une clause FROM
d'une requête spécifie les tables, les vues, les sous-requêtes ou les fonctions de table possibles à utiliser dans une instruction SELECT. Toutes ces références de table sont acceptées dans BigQuery.
Le tableau suivant contient une liste de différences mineures.
Snowflake | BigQuery | |
---|---|---|
|
WITH table1 AS |
|
|
|
|
|
Remarque: BigQuery ne dispose pas d'une alternative directe à BEFORE de Snowflake avec utilisation d'un ID d'instruction. La valeur du code temporel ne peut pas être antérieure de plus de sept jours au code temporel actuel. |
|
|
BigQuery n'est pas compatible avec le concept de fichier intermédiaires. |
|
|
BigQuery ne propose pas d'alternative directe à |
Les tables BigQuery peuvent être référencées dans la clause FROM
à l'aide des commandes suivantes:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery accepte également d'autres références de table :
- Versions historiques de la définition de table et des lignes, en utilisant
FOR SYSTEM_TIME AS OF
- Chemins d'accès de champ, ou tout chemin menant à un champ dans un type de données (c'est-à-dire un objet
STRUCT
) - Tableaux aplatis.
Clause WHERE
Les clauses WHERE
de Snowflake et WHERE
de BigQuery sont identiques, à l'exception des éléments suivants :
Snowflake | BigQuery | |
---|---|---|
|
SELECT col1, col2 Remarque: BigQuery n'est pas compatible avec la syntaxe (+) pour les JOIN . |
Types JOIN
Snowflake et BigQuery sont tous deux compatibles avec les types de jointure suivants:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
et la jointure croisée avec virgules implicite équivalente
Snowflake et BigQuery sont tous deux compatibles avec la clause ON
et USING
.
Le tableau suivant contient une liste de différences mineures.
Snowflake | BigQuery | |
---|---|---|
|
Remarque : dans BigQuery, les clauses JOIN nécessitent une condition JOIN, sauf s'il s'agit d'une jointure CROSS JOIN ou si l'une des tables jointes est un champ dans un type de données ou un tableau. |
|
Remarque: Contrairement à la sortie d'une jointure non latérale, le résultat d'une jointure latérale n'inclut que les lignes générées à partir de la vue intégrée. Les lignes du côté gauche ne doivent pas nécessairement être jointes au côté droit, car les lignes du côté gauche ont déjà été prises en compte en étant transmises dans la vue intégrée. |
LATERAL JOIN . |
Clause WITH
Une clause WITH
BigQuery contient une ou plusieurs sous-requêtes nommées qui s'exécutent chaque fois qu'une instruction SELECT
ultérieure leur fait référence. Les clauses WITH
Snowflake se comportent de la même manière que BigQuery, à l'exception que BigQuery n'est pas compatible avec WITH RECURSIVE
.
Clause GROUP BY
Les clauses GROUP BY
Snowflake sont compatibles avec GROUP
BY
, GROUP BY
ROLLUP
, GROUP BY GROUPING
SETS
et GROUP BY
CUBE
, tandis que les clauses GROUP BY
BigQuery sont compatibles avec GROUP
BY
, GROUP BY
ALL
, GROUP
BY ROLLUP
, GROUP BY GROUPING
SETS
et GROUP BY
CUBE
.
Snowflake HAVING
et BigQuery HAVING
sont synonymes. Notez que HAVING
se produit après GROUP BY
et l'agrégation, et avant ORDER BY
.
Snowflake | BigQuery | |
---|---|---|
|
|
|
|
|
|
Remarque: Snowflake autorise jusqu'à 128 ensembles de regroupement dans le même bloc de requête |
|
|
Remarque: Snowflake autorise jusqu'à sept éléments (128 ensembles de regroupement) dans chaque cube |
|
Clause ORDER BY
Il existe des différences mineures entre les clauses ORDER BY
de Snowflake et les clauses ORDER BY
de BigQuery.
Snowflake | BigQuery | |
---|---|---|
Dans Snowflake, les valeurs NULL sont classées en dernier par défaut (ordre croissant). |
Dans BigQuery, les valeurs NULLS sont classées par défaut en premier (par ordre croissant). |
|
Vous pouvez spécifier si les valeurs NULL doivent être triées en premier ou en dernier à l'aide de NULLS FIRST ou de NULLS LAST , respectivement. |
Il n'y a pas d'équivalent pour spécifier si les valeurs NULL doivent être affichées en premier ou en dernier dans BigQuery. |
Clause LIMIT/FETCH
La clause LIMIT/FETCH
de Snowflake limite le nombre maximal de lignes renvoyées par une instruction ou une sous-requête.
LIMIT
(Postgres syntax) et
FETCH
(syntaxe ANSI) produisent le même résultat.
Dans Snowflake et BigQuery, l'application d'une clause LIMIT
à une requête n'a aucune incidence sur la quantité de données lues.
Snowflake | BigQuery | |
---|---|---|
Remarque: Les valeurs NULL , de chaîne vide ('') et $$$$ sont acceptées et traitées comme "illimitées". Elles sont principalement utilisées pour les connecteurs et les pilotes. |
REMARQUE : BigQuery n'est pas compatible avec FETCH . Remplacement de FETCH par LIMIT .Remarque : Dans BigQuery, OFFSET doit être utilisé avec un LIMIT count . Pour des performances optimales, veillez à définir la valeur INT64 count sur le nombre minimal de lignes ordonnées nécessaires. Le classement de toutes les lignes de résultats entraîne inutilement de mauvaises performances lors de l'exécution de la requête. |
Clause QUALIFY
La clause QUALIFY
de Snowflake vous permet de filtrer les résultats des fonctions de fenêtrage similairement à ce que HAVING
fait avec les fonctions d'agrégation et les clauses GROUP BY
.
Snowflake | BigQuery | |
---|---|---|
|
La clause QUALIFY de Snowflake avec une fonction d'analyse telle que ROW_NUMBER() , COUNT() , et avec OVER PARTITION BY est exprimée dans BigQuery en tant que clause WHERE sur une sous-requête contenant la valeur d'analyse.Avec ROW_NUMBER() : SELECT col1, col2
Avec ARRAY_AGG() , compatible avec les partitions plus volumineuses:
|
Fonctions
Les sections suivantes répertorient les fonctions Snowflake et leurs équivalents dans BigQuery.
Fonctions d'agrégation
Le tableau suivant présente les mappages des fonctions courantes d'agrégation, d'analyse agrégée et d'agrégation approximative Snowflake avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
Remarque: DISTINCT n'a aucun effet |
|
Remarque: DISTINCT n'a aucun effet |
Remarque: BigQuery ne permet pas la compatibilité de la fonction APPROX_COUNT_DISTINCT avec les fonctions de fenêtrage. |
Remarque: Snowflake n'a pas l'option RESPECT NULLS |
Remarque: BigQuery ne permet pas la compatibilité de la fonction APPROX_QUANTILES avec les fonctions de fenêtrage. |
|
BigQuery ne permet pas de stocker l'état intermédiaire lors de la prédiction de valeurs approximatives. |
|
BigQuery ne permet pas de stocker l'état intermédiaire lors de la prédiction de valeurs approximatives. |
|
BigQuery ne permet pas de stocker l'état intermédiaire lors de la prédiction de valeurs approximatives. |
Remarque: Si aucun paramètre de nombre n'est spécifié, la valeur par défaut est 1. Les compteurs doivent être beaucoup plus volumineux que le nombre. |
Remarque: BigQuery ne permet pas la compatibilité de la fonction APPROX_TOP_COUNT avec les fonctions de fenêtrage. |
|
BigQuery ne permet pas de stocker l'état intermédiaire lors de la prédiction de valeurs approximatives. |
|
BigQuery ne permet pas de stocker l'état intermédiaire lors de la prédiction de valeurs approximatives. |
|
BigQuery ne permet pas de stocker l'état intermédiaire lors de la prédiction de valeurs approximatives. |
|
Vous pouvez utiliser une fonction définie par l'utilisateur personnalisée pour mettre en œuvre MINHASH avec des fonctions de hachage distinctes de k . Une autre approche permettant de réduire la variance dans MINHASH consiste à conserverk des valeurs minimales d'une fonction de hachage. Dans ce cas, l'index Jaccard peut être évalué comme suit:
|
|
Il s'agit d'un synonyme de APPROXIMATE_JACCARD_INDEX et peut être mis en œuvre de la même manière. |
|
|
|
Remarque: La fonction AVG de BigQuery n'effectue pas de conversion automatique sur les STRING . |
|
INTEGER le plus proche. |
|
Remarque: BigQuery ne convertit pas implicitement les colonnes de caractères/texte vers l' INTEGER le plus proche. |
|
Remarque: BigQuery ne convertit pas implicitement les colonnes de caractères/texte vers l' INTEGER le plus proche. |
Remarque: Snowflake permet aux valeurs numériques, décimales et à virgule flottante d'être traitées comme TRUE si ce n'est pas zéro. |
|
Remarque: Snowflake permet aux valeurs numériques, décimales et à virgule flottante d'être traitées comme TRUE si ce n'est pas zéro. |
|
Remarque: Snowflake permet aux valeurs numériques, décimales et à virgule flottante d'être traitées comme TRUE si ce n'est pas zéro. |
Pour l'expression numérique:
Pour utiliser OVER , vous pouvez exécuter l'exemple booléen suivant :
|
|
|
|
|
|
|
|
|
|
BigQuery ne dispose pas d'une alternative directe compatible avec GROUPING de Snowflake. Disponible via une fonction définie par l'utilisateur. |
|
BigQuery n'est pas compatible avec une alternative directe à GROUPING_ID de Snowflake. Disponible via une fonction définie par l'utilisateur. |
|
SELECT BIT_XOR( FARM_FINGERPRINT( TO_JSON_STRING(t))) [OVER] FROM t |
Remarque: Snowflake ne vous permet pas de spécifier la précision. |
Remarque: BigQuery ne permet pas la compatibilité de la fonction HLL_COUNT… avec les fonctions de fenêtrage. Un utilisateur ne peut pas inclure plusieurs expressions dans une même fonction HLL_COUNT... . |
Remarque: Snowflake ne vous permet pas de spécifier la précision. |
HLL_COUNT.INIT (expression [, précision]) |
|
HLL_COUNT.MERGE_PARTIAL (résumé) |
|
|
|
BigQuery n'est pas compatible avec une alternative directe à HLL_EXPORT de Snowflake. |
|
BigQuery n'est pas compatible avec une alternative directe à HLL_IMPORT de Snowflake. |
|
BigQuery n'est pas compatible avec une alternative directe à KURTOSIS de Snowflake. |
|
|
Remarque: Snowflake n'est pas en mesure de IGNORE|RESPECT NULLS et LIMIT directement dans ARRAY_AGG. . |
|
|
|
|
Vous pouvez utiliser une fonction définie par l'utilisateur personnalisée pour implémenter MINHASH avec des fonctions de hachage distinctes de k . Une autre approche permettant de réduire la variance dans MINHASH consiste à conserver k des valeurs minimales d'une fonction de hachage : SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS MINHASH
|
|
<code<select FROM ( SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TA AS t ORDER BY h LIMIT k UNION SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TB AS t ORDER BY h LIMIT k ) ORDER BY h LIMIT k |
|
|
|
Vous pouvez envisager d'utiliser TO_JSON_STRING pour convertir une valeur en chaîne au format JSON. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery n'est pas compatible avec une alternative directe à SKEW de Snowflake. |
|
|
|
|
|
|
|
|
Remarque: Snowflake permet de convertir des valeurs VARCHAR en valeurs à virgule flottante. |
|
Remarque: Snowflake permet de convertir des valeurs VARCHAR en valeurs à virgule flottante. |
|
Remarque: Snowflake permet de convertir des valeurs VARCHAR en valeurs à virgule flottante. |
|
Remarque: Snowflake permet de convertir des valeurs VARCHAR en valeurs à virgule flottante. |
|
BigQuery propose également les fonctions d'agrégation, d'analyse analytique et d'agrégation approximative comme indiqué ci-dessous, qui n'ont pas d'équivalent direct dans Snowflake :
Fonctions d'expression bit à bit
Le tableau suivant présente les mappages des fonctions d'expression bit à bit Snowflake courantes avec leurs équivalents dans BigQuery.
Si le type de données d'une expression n'est pas INTEGER
, Snowflake tente de le convertir en INTEGER
. Cependant, BigQuery ne tente pas de le convertir en INTEGER
.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
BITSHIFTRIGHT
|
|
Remarque: Snowflake n'est pas compatible avec DISTINCT. . |
|
Fonctions d'expression conditionnelle
Le tableau suivant présente les mappages des expressions conditionnelles Snowflake courantes avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
|
|
Remarque: Snowflake permet aux valeurs numériques, décimales et à virgule flottante d'être traitées comme TRUE si ce n'est pas zéro. |
|
Remarque: Snowflake permet aux valeurs numériques, décimales et à virgule flottante d'être traitées comme TRUE si ce n'est pas zéro. |
|
BOOLOR Remarque: Snowflake permet aux valeurs numériques, décimales et à virgule flottante d'être traitées comme des valeurs TRUE si elles ne sont pas nulles. |
|
BOOLXOR Remarque: Snowflake permet aux valeurs numériques, décimales et à virgule flottante d'être traitées comme des valeurs TRUE si elles ne sont pas nulles. |
BigQuery n'est pas compatible avec une alternative directe au BOOLXOR. de Snowflake |
|
|
Remarque: Snowflake nécessite au moins deux expressions. BigQuery n'en nécessite qu'une. |
|
|
DECODE de Snowflake. L'utilisateur doit utiliser IS NULL au lieu de = NULL pour faire correspondre les expressions de sélection NULL avec les expressions de recherche NULL . |
|
BigQuery n'est pas compatible avec une alternative directe au EQUAL_NULL. de Snowflake |
|
|
|
|
|
|
|
|
|
BigQuery n'est pas compatible avec une alternative directe au IS [ NOT ] DISTINCT FROM. de Snowflake |
|
|
|
BigQuery n'accepte pas les types de données VARIANT . |
|
|
|
|
|
|
|
|
|
REGR... de Snowflake. |
|
Remarque: BigQuery n'est pas compatible avec une alternative directe aux fonctions REGR... de Snowflake. |
|
|
Fonctions de contexte
Le tableau suivant présente les mappages des fonctions de contexte Snowflake courantes avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
Remarque: Pas de comparaison directe. Snowflake renvoie l'ID de compte, BigQuery renvoie l'adresse e-mail de l'utilisateur. |
|
Concept non utilisé dans BigQuery |
|
Cette commande renvoie une table des noms de projets. Il ne s'agit pas d'une comparaison directe. |
|
Remarque: Snowflake n'applique pas "()" après la commande CURRENT_DATE pour se conformer aux normes ANSI. |
Remarque: La fonction CURRENT_DATE de BigQuery accepte la spécification facultative du fuseau horaire. |
Remarque: la fonction INFORMATION_SCHEMA.SCHEMATA de BigQuery renvoie des références d'emplacements plus généralisées que la fonction CURRENT_REGION() de Snowflake. Il ne s'agit pas d'une comparaison directe. |
|
Concept non utilisé dans BigQuery |
|
Cette commande renvoie une table de tous les ensembles de données (également appelés schémas) disponibles dans le projet ou la région. Il ne s'agit pas d'une comparaison directe. |
|
Concept non utilisé dans BigQuery |
|
Concept non utilisé dans BigQuery |
|
Remarque: la fonction INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permet de rechercher des requêtes par type de tâche, de début de fin, etc. |
|
Remarque: Snowflake autorise la précision facultative par fraction de seconde. Les valeurs valides sont comprises entre 0 et 9 nanosecondes. La valeur par défaut est 9. Pour respecter l'ANSI, il est possible d'appeler cette méthode sans "()". |
|
Remarque: Snowflake autorise la précision facultative par fraction de seconde. Les valeurs valides sont comprises entre 0 et 9 nanosecondes. La valeur par défaut est 9. Pour respecter l'ANSI, il est possible d'appeler cette méthode sans "()". Définissez TIMEZONE en tant que paramètre de session. |
Remarque :
CURRENT_DATETIME renvoie le type de données DATETIME (non compatible avec Snowflake). CURRENT_TIMESTAMP renvoie le type de données TIMESTAMP . |
INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permet de rechercher des ID de tâche par type de tâche, type de début/fin, etc. |
|
Remarque: Snowflake n'applique pas "()" après la commande CURRENT_USER pour se conformer aux normes ANSI. |
|
Concept non utilisé dans BigQuery |
|
|
|
|
Remarque: La fonction INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permet de rechercher des ID de tâche par type de tâche, type de début/fin, etc. |
Remarque: La fonction INFORMATION_SCHEMA.JOBS_BY_* de BigQuery permet de rechercher des ID de tâche par type de tâche, type de début/fin, etc. |
|
Remarque: Snowflake n'applique pas "()" après la commande LOCALTIME pour se conformer aux normes ANSI. |
|
Remarque :
CURRENT_DATETIME renvoie le type de données DATETIME (non compatible avec Snowflake). CURRENT_TIMESTAMP renvoie le type de données TIMESTAMP . |
Fonctions de conversion
Le tableau suivant présente les mappages des fonctions de conversion courantes de Snowflake avec leurs équivalents dans BigQuery.
Gardez à l'esprit que les fonctions qui semblent identiques dans Snowflake et BigQuery peuvent renvoyer des types de données différents.
Snowflake | BigQuery |
---|---|
|
|
|
|
Remarque: Snowflake accepte les conversions HEX , BASE64 et UTF-8 . Snowflake accepte également TO_BINARY à l'aide du type de données VARIANT . BigQuery ne dispose pas d'une alternative au type de données VARIANT . |
Remarque: Le casting STRING par défaut de BigQuery utilise l'encodage UTF-8 . Snowflake ne dispose pas d'une option permettant l'encodage BASE32 . |
Remarque :
|
Remarque :
|
Remarque: Les modèles de format de Snowflake sont disponibles ici. BigQuery ne dispose pas d'une alternative au type de données VARIANT . |
Remarque: L'expression d'entrée de BigQuery peut être mise en forme à l'aide de FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME ou FORMAT_TIMESTAMP . |
Remarque: Snowflake accepte la conversion directe des types INTEGER en types DATE . Les modèles de format Snowflake sont disponibles ici. BigQuery ne dispose pas d'une alternative au type de données VARIANT . |
Remarque: L'expression d'entrée de BigQuery peut être mise en forme à l'aide de FORMAT , FORMAT_DATETIME ou FORMAT_TIMESTAMP . |
Remarque: Les modèles de format Snowflake pour les types de données DECIMAL , NUMBER et NUMERIC sont disponibles ici. BigQuery ne dispose pas d'une alternative au type de données VARIANT . |
Remarque: L'expression d'entrée de BigQuery peut être mise en forme à l'aide de FORMAT. . |
Remarque: Les modèles de format Snowflake pour les types de données DOUBLE sont disponibles ici. BigQuery ne dispose pas d'une alternative au type de données VARIANT . |
Remarque: L'expression d'entrée de BigQuery peut être mise en forme à l'aide de FORMAT. . |
|
BigQuery ne dispose pas d'une alternative au type de données VARIANT de Snowflake. |
|
BigQuery ne dispose pas d'une alternative au type de données VARIANT de Snowflake. |
Remarque: Les modèles de format Snowflake pour les types de données STRING sont disponibles ici. BigQuery ne dispose pas d'une alternative au type de données VARIANT . |
Remarque: BigQuery ne dispose pas d'une alternative au type de données VARIANT de Snowflake. L'expression d'entrée de BigQuery peut être mise en forme à l'aide de FORMAT , FORMAT_DATETIME , FORMAT_TIMESTAMP ou FORMAT_TIME . |
Remarque: BigQuery ne dispose pas d'une alternative au type de données VARIANT . |
Remarque: L'expression d'entrée de BigQuery peut être mise en forme à l'aide de FORMAT , FORMAT_DATE , FORMAT_DATETIME et FORMAT_TIME . Le fuseau horaire peut être inclus/non inclus via les paramètres FORMAT_TIMESTAMP . |
|
BigQuery ne dispose pas d'une alternative au type de données VARIANT de Snowflake. |
|
BigQuery ne dispose pas d'une alternative au type de données VARIANT de Snowflake. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery propose également les fonctions de conversion suivantes, qui n'ont pas d'équivalent direct dans Snowflake:
CODE_POINTS_TO_BYTES
CODE_POINTS_TO_STRING
FORMAT
FROM_BASE32
FROM_BASE64
FROM_HEX
SAFE_CONVERT_BYTES_TO_STRING
TO_BASE32
TO_CODE_POINTS
Fonctions de génération de données
Le tableau suivant présente les mappages des fonctions courantes de génération de données Snowflake avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
|
BigQuery n'est pas compatible avec une comparaison directe avec l'élément NORMAL. de Snowflake |
|
Remarque: BigQuery n'est pas compatible avec l'amorçage. |
|
BigQuery n'est pas compatible avec une comparaison directe avec l'élément RANDSTR. de Snowflake |
SEQ1 / SEQ2 / SEQ4 / SEQ8 |
BigQuery n'est pas compatible avec une comparaison directe avec l'élément SEQ_. de Snowflake |
|
Remarque: Utilisez des fonctions persistantes définies par l'utilisateur pour créer un équivalent à UNIFORM de Snowflake. Exemple ici. |
UUID_STRING([uuid, name]) Remarque: Snowflake renvoie 128 bits aléatoires. Snowflake accepte les UUID de version 4 (aléatoire) et 5 (nommé). |
Remarque: BigQuery renvoie 122 bits aléatoires. BigQuery n'est compatible qu'avec les UUID de la version 4. |
|
BigQuery n'est pas compatible avec une comparaison directe avec l'élément ZIPF. de Snowflake |
Fonctions de date et heure
Le tableau suivant présente les mappages des fonctions de date et heure courantes de Snowflake avec leurs équivalents dans BigQuery. Les fonctions de données et de date et heure de BigQuery incluent : les fonctions de date, les fonctions de date et heure, les fonctions temporelles, et les fonctions de code temporel.
Snowflake | BigQuery |
---|---|
|
|
|
Remarque: source_timezone est toujours UTC dans BigQuery. |
Remarque: Snowflake accepte les dépassements et les dates négatives. Par exemple, DATE_FROM_PARTS(2000, 1 + 24, 1) renvoie le 1er janvier 2002. Ceci n'est pas compatible avec BigQuery. |
|
Remarque: Snowflake est compatible avec les parties de dates de type jour de la semaine ISO, nanoseconde et epoch (secondes/millisecondes/microsecondes/nanoseconde). BigQuery ne l'est pas. Pour obtenir la liste complète des types de parties de date Snowflake, cliquez ici
. . |
Remarque: BigQuery accepte les parties de date de type hebdomadaire (<jour de la semaine>), microsecondes et milliseconde. Pas Snowflake. Consultez la liste complète des types de parties de date de BigQuery ici et ici. |
Remarque: Snowflake accepte le type de partie de date à la nanoseconde près. BigQuery ne l'est pas. Pour obtenir la liste complète des types de parties de date Snowflake, cliquez ici
. . |
Remarque: BigQuery est compatible avec les parties de date de type semaine (<jour de la semaine>), semaine ISO et année ISO. Pas Snowflake. |
|
|
Remarque: Snowflake accepte le calcul de la différence entre deux types de date, d'heure et d'horodatage dans cette fonction. |
Remarque: BigQuery est compatible avec les parties de date de type semaine (<jour de la semaine>) et année ISO. |
|
|
Remarque: Snowflake est compatible avec les parties de dates de type jour de la semaine ISO, nanoseconde et epoch (secondes/millisecondes/microsecondes/nanoseconde). BigQuery ne l'est pas. Pour obtenir la liste complète des types de parties de date Snowflake, cliquez ici
. . |
Remarque: BigQuery accepte les parties de date de type hebdomadaire (<jour de la semaine>), microsecondes et milliseconde. Pas Snowflake. Consultez la liste complète des types de parties de date de BigQuery ici et ici. |
|
|
|
|
|
|
|
Remarque: dowString peut avoir besoin d'être reformaté. Par exemple, "su" de Snowflake sera "SUNDAY" de BigQuery. |
|
Remarque: dowString peut avoir besoin d'être reformaté. Par exemple, "su" de Snowflake sera "SUNDAY" de BigQuery. |
Remarque: Snowflake accepte les dépassements de temps. Par exemple, TIME_FROM_PARTS(0, 100, 0) renvoie 01:40:00… Ceci n'est pas compatible avec BigQuery. BigQuery n'accepte pas les nanosecondes. |
|
|
Remarque: BigQuery n'est pas compatible avec une comparaison directe et exacte de TIME_SLICE de Snowflake. Utilisez DATETINE_TRUNC , TIME_TRUNC et TIMESTAMP_TRUNC pour le type de données approprié. |
|
|
Remarque: Snowflake accepte le calcul de la différence entre deux types de date, d'heure et d'horodatage dans cette fonction. |
Remarque: BigQuery est compatible avec les parties de date de type semaine (<jour de la semaine>) et année ISO. |
|
Remarque: BigQuery nécessite que les horodatages soient saisis en tant que types STRING . Exemple : "2008-12-25 15:30:00" |
|
|
Remarque: Snowflake accepte le calcul de la différence entre deux types de date, d'heure et d'horodatage dans cette fonction. |
Remarque: BigQuery est compatible avec les parties de date de type semaine (<jour de la semaine>) et année ISO. |
Remarque: Snowflake accepte le type de partie de date à la nanoseconde près. BigQuery ne l'est pas. Pour obtenir la liste complète des types de parties de date Snowflake, cliquez ici
. . |
Remarque: BigQuery est compatible avec les parties de date de type semaine (<jour de la semaine>), semaine ISO et année ISO. Pas Snowflake. |
|
|
BigQuery propose également les fonctions de date et heure suivantes, qui n'ont pas d'équivalent direct dans Snowflake:
Schéma d'informations et fonctions de table
D'un point de vue conceptuel, BigQuery n'est pas compatible avec de nombreux schémas d'informations et fonctions de table. Snowflake offre les schémas d'information et les fonctions de table suivants, qui n'ont pas d'équivalent direct dans BigQuery:
AUTOMATIC_CLUSTERING_HISTORY
COPY_HISTORY
DATA_TRANSFER_HISTORY
DATABASE_REFRESH_HISTORY
DATABASE_REFRESH_PROGRESS, DATABASE_REFRESH_PROGRESS_BY_JOB
DATABASE_STORAGE_USAGE_HISTORY
EXTERNAL_TABLE_FILES
EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY
LOGIN_HISTORY
,LOGIN_HISTORY_BY_USER
MATERIALIZED_VIEW_REFRESH_HISTORY
PIPE_USAGE_HISTORY
REPLICATION_USAGE_HISTORY
STAGE_STORAGE_USAGE_HISTORY
TASK_DEPENDENTS
VALIDATE_PIPE_LOAD
WAREHOUSE_LOAD_HISTORY
WAREHOUSE_METERING_HISTORY
Vous trouverez ci-dessous la liste des fonctions de table et de schéma d'informations BigQuery et Snowflake associés.
Snowflake | BigQuery |
---|---|
QUERY_HISTORY QUERY_HISTORY_BY_* |
INFORMATION_SCHEMA.JOBS_BY_* Remarque: Pas d'alternative directe. |
TASK_HISTORY |
INFORMATION_SCHEMA.JOBS_BY_* Remarque: Pas d'alternative directe. |
BigQuery propose le schéma d'informations et les fonctions de table suivants, qui n'ont pas d'équivalent direct dans Snowflake:
INFORMATION_SCHEMA.SCHEMATA
INFORMATION_SCHEMA.ROUTINES
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.VIEWS
Fonctions numériques
Le tableau suivant présente les mappages des fonctions numériques Snowflake courantes avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Remarque: La méthode CEIL de BigQuery n'est pas compatible avec la précision ou l'échelle. ROUND ne permet pas de spécifier des arrondis. |
|
|
|
|
|
|
|
|
|
|
|
BigQuery ne dispose pas d'une alternative directe au FACTORIAL de Snowflake. Utilisez une fonction définie par l'utilisateur. |
|
Remarque: La méthode FLOOR de BigQuery n'est pas compatible avec la précision ou l'échelle. ROUND ne permet pas de spécifier des arrondis. TRUNC fait de même pour les nombres positifs mais pas négatifs, car il évalue la valeur absolue. |
|
Remarque: Il ne s'agit pas d'une correspondance exacte, mais suffisamment proche. |
|
|
|
Remarque: La valeur par défaut de la base de LOG est de 10. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Remarque: La valeur renvoyée par BigQuery doit être inférieure à celle de l'expression. Elles ne peuvent pas être égales. |
BigQuery propose également les fonctions mathématiques suivantes, qui n'ont pas d'équivalent direct dans Snowflake:
IS_INF
IS_NAN
IEEE_DIVIDE
DIV
SAFE_DIVIDE
SAFE_MULTIPLY
SAFE_NEGATE
SAFE_ADD
SAFE_SUBTRACT
RANGE_BUCKET
Fonctions de données semi-structurées
Snowflake | BigQuery |
---|---|
ARRAY_APPEND |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_CAT |
ARRAY_CONCAT |
ARRAY_COMPACT |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_CONSTRUCT |
[ ] |
ARRAY_CONSTRUCT_COMPACT |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_CONTAINS |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_INSERT |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_INTERSECTION |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_POSITION |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_PREPEND |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_SIZE |
ARRAY_LENGTH |
ARRAY_SLICE |
Fonction définie par l'utilisateur personnalisée. |
ARRAY_TO_STRING |
ARRAY_TO_STRING |
ARRAYS_OVERLAP |
Fonction définie par l'utilisateur personnalisée. |
AS_<object_type> |
CAST |
AS_ARRAY |
CAST |
AS_BINARY |
CAST |
AS_BOOLEAN |
CAST |
AS_CHAR , AS_VARCHAR |
CAST |
AS_DATE |
CAST |
AS_DECIMAL , AS_NUMBER |
CAST |
AS_DOUBLE , AS_REAL |
CAST |
AS_INTEGER |
CAST |
AS_OBJECT |
CAST |
AS_TIME |
CAST |
AS_TIMESTAMP_* |
CAST |
CHECK_JSON |
Fonction définie par l'utilisateur personnalisée. |
CHECK_XML |
Fonction définie par l'utilisateur personnalisée. |
FLATTEN |
UNNEST |
GET |
Fonction définie par l'utilisateur personnalisée. |
GET_IGNORE_CASE |
Fonction définie par l'utilisateur personnalisée. |
|
Fonction définie par l'utilisateur personnalisée. |
IS_<object_type> |
Fonction définie par l'utilisateur personnalisée. |
IS_ARRAY |
Fonction définie par l'utilisateur personnalisée. |
IS_BINARY |
Fonction définie par l'utilisateur personnalisée. |
IS_BOOLEAN |
Fonction définie par l'utilisateur personnalisée. |
IS_CHAR , IS_VARCHAR |
Fonction définie par l'utilisateur personnalisée. |
IS_DATE , IS_DATE_VALUE |
Fonction définie par l'utilisateur personnalisée. |
IS_DECIMAL |
Fonction définie par l'utilisateur personnalisée. |
IS_DOUBLE , IS_REAL |
Fonction définie par l'utilisateur personnalisée. |
IS_INTEGER |
Fonction définie par l'utilisateur personnalisée. |
IS_OBJECT |
Fonction définie par l'utilisateur personnalisée. |
IS_TIME |
Fonction définie par l'utilisateur personnalisée. |
IS_TIMESTAMP_* |
Fonction définie par l'utilisateur personnalisée. |
OBJECT_CONSTRUCT |
Fonction définie par l'utilisateur personnalisée. |
OBJECT_DELETE |
Fonction définie par l'utilisateur personnalisée. |
OBJECT_INSERT |
Fonction définie par l'utilisateur personnalisée. |
PARSE_JSON |
JSON_EXTRACT |
PARSE_XML |
Fonction définie par l'utilisateur personnalisée. |
STRIP_NULL_VALUE |
Fonction définie par l'utilisateur personnalisée. |
STRTOK_TO_ARRAY |
SPLIT |
TRY_PARSE_JSON |
Fonction définie par l'utilisateur personnalisée. |
TYPEOF |
Fonction définie par l'utilisateur personnalisée. |
XMLGET |
Fonction définie par l'utilisateur personnalisée. |
Fonctions de chaîne et binaires
Snowflake | BigQuery |
---|---|
|
|
ASCII |
|
BASE64_DECODE_BINARY |
|
BASE64_DECODE_STRING |
|
BASE64_ENCODE |
|
BIT_LENGTH |
CHARACTER_LENGTH |
|
|
CHR,CHAR |
|
COLLATE |
Fonction définie par l'utilisateur personnalisée. |
COLLATION |
Fonction définie par l'utilisateur personnalisée. |
COMPRESS |
Fonction définie par l'utilisateur personnalisée. |
|
CONCAT (...) de BigQuery accepte la concaténation de n'importe quel nombre de chaînes. |
CONTAINS |
Fonction définie par l'utilisateur personnalisée. |
DECOMPRESS_BINARY |
Fonction définie par l'utilisateur personnalisée. |
DECOMPRESS_STRING |
Fonction définie par l'utilisateur personnalisée. |
EDITDISTANCE |
EDIT_DISTANCE |
ENDSWITH |
Fonction définie par l'utilisateur personnalisée. |
HEX_DECODE_BINARY |
|
HEX_DECODE_STRING |
|
HEX_ENCODE |
|
ILIKE |
Fonction définie par l'utilisateur personnalisée. |
ILIKE ANY |
Fonction définie par l'utilisateur personnalisée. |
INITCAP |
INITCAP |
INSERT |
Fonction définie par l'utilisateur personnalisée. |
LEFT |
Fonction définie par l'utilisateur |
LENGTH |
|
LIKE |
LIKE |
LIKE ALL |
Fonction définie par l'utilisateur personnalisée. |
LIKE ANY |
Fonction définie par l'utilisateur personnalisée. |
LOWER |
|
LPAD |
|
LTRIM |
|
|
|
MD5_BINARY |
Fonction définie par l'utilisateur personnalisée. |
OCTET_LENGTH |
Fonction définie par l'utilisateur personnalisée. |
PARSE_IP |
Fonction définie par l'utilisateur personnalisée. |
PARSE_URL |
Fonction définie par l'utilisateur personnalisée. |
POSITION |
|
REPEAT |
|
REPLACE |
|
REVERSE
|
|
RIGHT |
Fonction définie par l'utilisateur |
RPAD |
RPAD |
RTRIM |
|
RTRIMMED_LENGTH |
Fonction définie par l'utilisateur personnalisée. |
SHA1,SHA1_HEX |
|
SHA1_BINARY |
Fonction définie par l'utilisateur personnalisée. |
SHA2,SHA2_HEX |
Fonction définie par l'utilisateur personnalisée. |
SHA2_BINARY |
Fonction définie par l'utilisateur personnalisée. |
SOUNDEX |
Fonction définie par l'utilisateur personnalisée. |
SPACE |
Fonction définie par l'utilisateur personnalisée. |
SPLIT |
SPLIT |
SPLIT_PART |
Fonction définie par l'utilisateur personnalisée. |
SPLIT_TO_TABLE |
Fonction définie par l'utilisateur personnalisée. |
STARTSWITH |
Fonction définie par l'utilisateur personnalisée. |
STRTOK |
Remarque : L'argument de chaîne délimiteur entier est utilisé comme un délimiteur unique. Le délimiteur par défaut est une virgule. |
STRTOK_SPLIT_TO_TABLE |
Fonction définie par l'utilisateur personnalisée. |
SUBSTR,SUBSTRING |
SUBSTR |
TRANSLATE |
Fonction définie par l'utilisateur personnalisée. |
TRIM |
TRIM |
TRY_BASE64_DECODE_BINARY |
Fonction définie par l'utilisateur personnalisée. |
TRY_BASE64_DECODE_STRING |
|
TRY_HEX_DECODE_BINARY |
|
TRY_HEX_DECODE_STRING |
|
UNICODE |
Fonction définie par l'utilisateur personnalisée. |
|
UPPER |
Fonctions de chaîne (expressions régulières)
Snowflake | BigQuery |
---|---|
REGEXP |
|
REGEXP_COUNT |
Si position est spécifié:
Remarque : La bibliothèque re2 permet d'utiliser des expressions régulières dans BigQuery. Consultez la documentation de cette bibliothèque pour en savoir plus sur la syntaxe d'expression régulière à utiliser. |
REGEXP_INSTR |
Si position est spécifié:
Si occurrence est spécifié:
Remarque : La bibliothèque re2 permet d'utiliser des expressions régulières dans BigQuery. Consultez la documentation de cette bibliothèque pour en savoir plus sur la syntaxe d'expression régulière à utiliser. |
|
|
REGEXP_REPLACE |
Si replace_string est spécifié:
Si position est spécifié:
Remarque : La bibliothèque re2 permet d'utiliser des expressions régulières dans BigQuery. Consultez la documentation de cette bibliothèque pour en savoir plus sur la syntaxe d'expression régulière à utiliser. |
REGEXP_SUBSTR |
Si position est spécifié:
Si occurrence est spécifié:
Remarque : La bibliothèque re2 permet d'utiliser des expressions régulières dans BigQuery. Consultez la documentation de cette bibliothèque pour en savoir plus sur la syntaxe d'expression régulière à utiliser. |
RLIKE |
|
Fonctions système
Snowflake | BigQuery |
---|---|
SYSTEM$ABORT_SESSION |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$ABORT_TRANSACTION |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$CANCEL_ALL_QUERIES |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$CANCEL_QUERY |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$CLUSTERING_DEPTH |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$CLUSTERING_INFORMATION |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$CLUSTERING_RATIO — Deprecated |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$CURRENT_USER_TASK_NAME |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$DATABASE_REFRESH_HISTORY |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$GET_AWS_SNS_IAM_POLICY |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$GET_PREDECESSOR_RETURN_VALUE |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$LAST_CHANGE_COMMIT_TIME |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$PIPE_FORCE_RESUME |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$PIPE_STATUS |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$SET_RETURN_VALUE |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$STREAM_GET_TABLE_TIMESTAMP |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$STREAM_HAS_DATA |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$TASK_DEPENDENTS_ENABLE |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$TYPEOF |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$WAIT |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$WHITELIST |
Fonction définie par l'utilisateur personnalisée. |
SYSTEM$WHITELIST_PRIVATELINK |
Fonction définie par l'utilisateur personnalisée. |
Fonctions de table
Snowflake | BigQuery | |
---|---|---|
GENERATOR |
Fonction définie par l'utilisateur personnalisée. | |
GET_OBJECT_REFERENCES |
Fonction définie par l'utilisateur personnalisée. | |
RESULT_SCAN |
Fonction définie par l'utilisateur personnalisée. | |
VALIDATE |
Fonction définie par l'utilisateur personnalisée. |
Fonctions utilitaire et de hachage
Snowflake | BigQuery | |
---|---|---|
GET_DDL |
Demande de fonctionnalité | |
HASH |
HASH est une fonction propriétaire spécifique à Snowflake. Impossible de traduire sans connaître la logique sous-jacente utilisée par Snowflake. |
Fonctions de fenêtrage
Snowflake | BigQuery | |
---|---|---|
CONDITIONAL_CHANGE_EVENT |
Fonction définie par l'utilisateur personnalisée. | |
CONDITIONAL_TRUE_EVENT |
Fonction définie par l'utilisateur personnalisée. | |
CUME_DIST |
CUME_DIST |
|
DENSE_RANK |
DENSE_RANK |
|
FIRST_VALUE |
FIRST_VALUE |
|
LAG |
LAG |
|
LAST_VALUE |
LAST_VALUE |
|
LEAD |
LEAD |
|
NTH_VALUE |
NTH_VALUE |
|
NTILE |
NTILE |
|
PERCENT_RANK |
PERCENT_RANK |
|
RANK |
RANK |
|
RATIO_TO_REPORT |
Fonction définie par l'utilisateur personnalisée. | |
ROW_NUMBER |
ROW_NUMBER |
|
WIDTH_BUCKET |
Fonction définie par l'utilisateur personnalisée. |
BigQuery est également compatible avec SAFE_CAST
(expression AS typename), qui renvoie NULL si BigQuery ne peut pas effectuer de casting (par exemple, SAFE_CAST
("apple" AS INT64) renvoie NULL).
Opérateurs
Les sections suivantes répertorient les opérateurs Snowflake et leurs équivalents dans BigQuery.
Opérateurs arithmétiques
Le tableau suivant présente les mappages des opérateurs arithmétiques de Snowflake avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
Remarque: BigQuery est compatible avec le moins unaire standard, mais ne convertit pas les entiers au format de chaîne en type INT64 , NUMERIC ou FLOAT64 . |
|
|
|
|
|
|
|
|
|
|
Pour afficher les détails d'échelle et de précision Snowflake lors de l'exécution d'opérations arithmétiques, consultez la documentation de Snowflake.
Opérateurs de comparaison
Les opérateurs de comparaison de Snowflake et les opérateurs de comparaison de BigQuery sont identiques.
Opérateurs logiques/booléens
Les opérateurs logiques/booléens de Snowflake et les opérateurs logiques/booléens BigQuery sont identiques.
Opérateurs d'ensemble
Le tableau suivant présente les mappages des opérateurs d'ensemble Snowflake avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
|
INTERSECT DISTINCT
|
Remarque : MINUS et EXCEPT sont des synonymes. |
|
|
|
Opérateurs de sous-requêtes
Le tableau suivant présente les mappages des opérateurs de sous-requêtes Snowflake avec leurs équivalents dans BigQuery.
Snowflake | BigQuery |
---|---|
|
BigQuery n'est pas compatible avec une alternative directe à ALL/ANY de Snowflake. |
|
|
|
|
|
Remarque : BigQuery nécessite des parenthèses pour séparer les différentes opérations d'ensemble. Si le même opérateur d'ensemble est répété, les parenthèses ne sont pas nécessaires. |
Syntaxe LMD
Cette section traite des différences de syntaxe du langage de manipulation de données entre Snowflake et BigQuery.
Instruction INSERT
Snowflake propose un mot clé DEFAULT
configurable pour les colonnes. Dans BigQuery, la valeur DEFAULT
des colonnes pouvant être vides est NULL, et DEFAULT
n'est pas accepté pour les colonnes obligatoires. La plupart des instructions INSERT
de Snowflake sont compatibles avec BigQuery. Le tableau suivant présente les exceptions.
Snowflake | BigQuery |
---|---|
Remarque: BigQuery n'accepte pas l'insertion d'objets JSON avec une instruction INSERT .. |
VALUES (DEFAULT [, ...]) Remarque: BigQuery n'est pas compatible avec une alternative directe à OVERWRITE de Snowflake. Utilisez plutôt DELETE . |
|
|
... Remarque
<intoClause> représente l'élément INSERT statement standard répertorié ci-dessus. |
BigQuery n'est pas compatible avec les tables multiples conditionnelles et inconditionnelles INSERTs . |
BigQuery permet également d'insérer des valeurs à l'aide d'une sous-requête (où l'une des valeurs est calculée à l'aide d'une sous-requête), ce qui n'est pas compatible avec Snowflake. Par exemple :
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
Instruction COPY
Snowflake accepte les copies de données de fichiers d'étapes dans une table existante et depuis une table vers une étape interne nommée, une étape externe nommée et un emplacement externe (Amazon S3, Google Cloud Storage ou Microsoft Azure).
BigQuery n'utilise pas la commande SQL COPY
pour charger des données, mais vous pouvez utiliser n'importe lequel de ces outils et n'importe laquelle de ces options non-SQL pour charger des données dans des tables BigQuery. Vous pouvez également utiliser les récepteurs de pipelines de données fournis dans Apache Spark ou Apache Beam pour écrire des données dans BigQuery.
Instruction UPDATE
La plupart des instructions UPDATE
Snowflake sont compatibles avec BigQuery. Le tableau suivant présente les exceptions.
Snowflake | BigQuery | |
---|---|---|
|
Remarque : Toutes les instructions UPDATE de BigQuery nécessitent un mot clé WHERE , suivi d'une condition. |
Instructions DELETE
et TRUNCATE TABLE
Les instructions DELETE
et TRUNCATE TABLE
permettent de supprimer des lignes d'une table sans que cela n'affecte son schéma ou ses index.
Dans Snowflake, DELETE
et TRUNCATE TABLE
conservent les données supprimées à l'aide de la fonctionnalité temporelle de Snowflake à des fins de récupération pour la période de conservation des données.
Toutefois, DELETE ne supprime pas l'historique de chargement des fichiers externes ni les métadonnées de chargement.
Dans BigQuery, l'instruction DELETE
doit comporter une clause WHERE
. Pour en savoir plus sur l'instruction DELETE
dans BigQuery, consultez les exemples d'instructions DELETE
BigQuery dans la documentation sur le LMD.
Snowflake | BigQuery |
---|---|
|
Remarque: Les instructions BigQuery DELETE nécessitent une clause WHERE . |
Instruction MERGE
L'instruction MERGE
peut combiner les opérations INSERT
, UPDATE
et DELETE
en une seule instruction "upsert" et effectuer les opérations de manière automatique. L'opération MERGE
doit correspondre à une ligne source au maximum pour chaque ligne cible.
Les tables BigQuery sont limitées à 1 000 instructions LMD par jour. Vous devez donc optimiser en consolidant les instructions INSERT, UPDATE et DELETE en une seule instruction MERGE, comme indiqué dans le tableau suivant:
Snowflake | BigQuery |
---|---|
Remarque: Snowflake accepte un paramètre de session ERROR_ON_NONDETERMINISTIC_MERGE pour gérer les résultats non déterministes. |
Remarque : Toutes les colonnes doivent être répertoriées si vous souhaitez mettre à jour toutes les colonnes. |
Instructions GET
et LIST
L'instruction GET
télécharge les fichiers de données de l'une des étapes Snowflake suivantes dans un répertoire/dossier local sur une machine cliente:
- Étape interne nommée
- Étape interne pour une table spécifiée
- Étape interne pour l'utilisateur actuel
L'instruction LIST
(LS) renvoie la liste des fichiers intermédiaires (c'est-à-dire importés depuis un système de fichiers local ou déchargés d'une table) dans l'une des les étapes Snowflake suivantes:
- Étape interne nommée
- Étape externe nommée
- Étape pour une table spécifiée
- Étape pour l'utilisateur actuel
BigQuery n'est pas compatible avec le concept de préproduction et ne dispose pas d'équivalent GET
et LIST
.
Instructions PUT
et REMOVE
L'instruction PUT
importe (par étape) des fichiers de données depuis un répertoire/dossier local d'une machine cliente vers l'une des étapes Snowflake suivantes:
- Étape interne nommée
- Étape interne pour une table spécifiée
- Étape interne pour l'utilisateur actuel
L'instruction REMOVE
(RM)
supprime les fichiers qui ont été importés dans l'une des étapes internes de Snowflake suivantes:
- Étape interne nommée
- Étape pour une table spécifiée
- Étape pour l'utilisateur actuel
BigQuery n'est pas compatible avec le concept de préproduction et ne dispose pas d'équivalent PUT
et REMOVE
.
Syntaxe LDD
Cette section traite des différences de syntaxe du langage de définition de données entre Snowflake et BigQuery.
Base de données, schéma et partage LDD
La plupart des termes de Snowflake correspondent à ceux de BigQuery, à la différence que la base de données Snowflake est semblable à l'ensemble de données BigQuery. Consultez le mappage détaillé de la terminologie Snowflake vers BigQuery.
Instruction CREATE DATABASE
Snowflake permet de créer et de gérer une base de données via les commandes de gestion des bases de données tandis que BigQuery propose plusieurs options, telles que l'utilisation de la console, de la CLI, des bibliothèques clientes, etc. pour créer des ensembles de données. Cette section utilise les commandes de CLI BigQuery correspondant aux commandes Snowflake pour traiter les différences.
Snowflake | BigQuery |
---|---|
Remarque: Snowflake fournit ces exigences pour la dénomination des bases de données. Le nom ne peut contenir que 255 caractères. |
Remarque: BigQuery présente des exigences de dénomination des ensembles de données semblables à celles de Snowflake, sauf qu'il autorise 1 024 caractères dans le nom. |
|
Le remplacement de l'ensemble de données n'est pas disponible dans BigQuery. |
|
La création d'un ensemble de données temporaire n'est pas disponible dans BigQuery. |
|
Concept non compatible avec BigQuery |
|
Le clonage d'ensembles de données n'est pas encore disponible dans BigQuery. |
|
Les fonctionnalités temporelles ne sont pas disponibles dans BigQuery pour les ensembles de données. Cependant, les fonctionnalités temporelles sont disponibles pour les résultats de tables et de requêtes. |
|
Le classement LDD n'est pas compatible avec BigQuery. |
|
|
|
La création d'ensembles de données partagés n'est pas disponible dans BigQuery. Cependant, les utilisateurs peuvent partager l'ensemble de données via la console/l'interface utilisateur une fois l'ensemble de données créé. |
Remarque: Snowflake fournit l'option de maintenance automatique en arrière-plan des vues matérialisées dans la base de données secondaire, qui n'est pas compatible avec BigQuery. |
|
BigQuery propose également les options de commande bq mk
suivantes, qui n'ont pas d'équivalent direct dans Snowflake:
--location <dataset_location>
--default_table_expiration <time_in_seconds>
--default_partition_expiration <time_in_seconds>
Instruction ALTER DATABASE
Cette section utilise les commandes de la CLI BigQuery correspondant aux commandes Snowflake pour traiter les différences entre les instructions ALTER.
Snowflake | BigQuery |
---|---|
|
Il n'est pas possible de renommer des ensembles de données dans BigQuery, mais il est possible de les copier. |
|
Échanger des ensembles de données n'est pas compatible avec BigQuery. |
|
La gestion de la conservation et du classement des données au niveau de l'ensemble de données n'est pas disponible dans BigQuery. |
|
|
|
Concept non compatible avec BigQuery. |
|
Concept non compatible avec BigQuery. |
|
Concept non compatible avec BigQuery. |
|
Concept non compatible avec BigQuery. |
|
Concept non compatible avec BigQuery. |
|
Concept non compatible avec BigQuery. |
|
Concept non compatible avec BigQuery. |
Instruction DROP DATABASE
Cette section utilise la commande CLI BigQuery correspondant à la commande Snowflake pour traiter la différence concernant l'instruction DROP.
Snowflake | BigQuery |
---|---|
Remarque: Dans Snowflake, le fait de retirer une base de données ne la supprime pas définitivement du système. Une version de la base de données retirée est conservée pendant le nombre de jours spécifié par le paramètre DATA_RETENTION_TIME_IN_DAYS de la base de données. |
-r consiste à supprimer tous les objets de l'ensemble de données .
-d indique un ensemble de donnéesRemarque: Dans BigQuery, la suppression d'un ensemble de données est définitive. De plus, les données en cascade ne sont pas acceptées au niveau de l'ensemble de données, car toutes les données et tous les objets de l'ensemble de données sont supprimés. |
Snowflake accepte également la commande UNDROP DATASET
qui restaure la version la plus récente d'un ensemble de données retiré. Cette fonctionnalité n'est actuellement pas compatible avec BigQuery au niveau de l'ensemble de données.
Instruction USE DATABASE
Snowflake offre la possibilité de définir la base de données pour une session utilisateur à l'aide de la commande USE DATABASE
. Cela évite d'avoir à spécifier des noms d'objets complets dans les commandes SQL. BigQuery ne fournit aucune alternative à la commande USE DATABASE de Snowflake.
Instruction SHOW DATABASE
Cette section utilise la commande CLI BigQuery correspondant à la commande Snowflake pour traiter la différence concernant l'instruction SHOW.
Snowflake | BigQuery |
---|---|
Remarque: Snowflake fournit une seule option pour répertorier et afficher les détails de toutes les bases de données, y compris celles qui sont retirées pendant la période de conservation. |
bq ls --format=prettyjsonet / ou
Remarque: Dans BigQuery, la commande ls ne fournit que des noms d'ensemble de données et des informations de base, et la commande show fournit des détails tels que la dernière modification de l'horodatage, les LCA et les libellés d'un ensemble de données. BigQuery fournit également plus de détails sur les ensembles de données via le schéma d'informations. |
Remarque: Avec l'option TERSE, Snowflake permet d'afficher uniquement les informations/champs spécifiques sur les ensembles de données. |
Concept non compatible avec BigQuery. |
Les concepts de fonctionnalité temporelle ne sont pas compatibles avec BigQuery au niveau de l'ensemble de données. | |
SHOW DATABASES
|
Le filtrage des résultats par nom d'ensemble de données n'est pas disponible dans BigQuery. Toutefois, le filtrage par libellé est compatible. |
SHOW DATABASES
Remarque: Par défaut, Snowflake ne limite pas le nombre de résultats. Toutefois, la valeur de LIMIT ne peut pas dépasser 10 000. |
Remarque: Par défaut, BigQuery n'affiche que 50 résultats. |
BigQuery propose également les options de commande bq
suivantes, qui n'ont pas d'équivalent direct dans Snowflake:
- bq ls --format=pretty: renvoie les résultats formatés de base
- *bq ls -a: *renvoie uniquement les ensembles de données anonymes (ceux commençant par un trait de soulignement).
- bq ls --all: renvoie tous les ensembles de données, y compris les ensembles anonymes
- bq ls --filter labels.key:value: renvoie les résultats filtrés par libellé d'ensemble de données.
- bq ls --d: exclut les ensembles de données des résultats
- bq show --format=pretty: renvoie les résultats détaillés au format de base pour tous les ensembles de données
Gestion de SCHEMA
Snowflake fournit plusieurs commandes de gestion de schéma semblables à ses commandes de gestion de base de données. Ce concept de création et de gestion de schéma n'est pas disponible dans BigQuery.
Cependant, BigQuery vous permet de spécifier le schéma d'une table lorsque vous chargez des données dans une table et lorsque vous créez une table vide. Vous pouvez également utiliser la détection automatique de schéma pour les formats de données compatibles.
Gestion de SHARE
Snowflake fournit plusieurs commandes de gestion de partage semblables à ses commandes de gestion de base de données et de schéma. Ce concept de création et de gestion des partages n'est pas disponible dans BigQuery.
Table, vue et séquence LDD
Instruction CREATE TABLE
La plupart des instructions CREATE TABLE
Snowflake sont compatibles avec BigQuery, à l'exception des éléments de syntaxe suivants, qui ne sont pas utilisés dans BigQuery :
Snowflake | BigQuery |
---|---|
Remarque: Les contraintes UNIQUE et PRIMARY KEY sont informatives et ne sont pas appliquées par le système Snowflake. |
|
où table_constraints sont:
Remarque: Les contraintes UNIQUE et PRIMARY KEY sont informatives et ne sont pas appliquées par le système Snowflake. |
Remarque : BigQuery n'utilise pas les contraintes de table UNIQUE , PRIMARY KEY ou FOREIGN KEY . Pour obtenir une optimisation similaire à celle fournie par ces contraintes lors de l'exécution des requêtes, partitionnez et mettez en cluster vos tables BigQuery. CLUSTER BY accepte jusqu'à quatre colonnes. |
|
Consultez cet exemple pour apprendre à utiliser les tables INFORMATION_SCHEMA pour copier les noms de colonnes, les types de données et les contraintes NOT NULL dans une nouvelle table. |
Remarque: Dans Snowflake, le paramètre BACKUP NO est spécifié pour "économiser du temps de traitement lors de la création d'instantanés et de la restauration à partir d'instantanés, et pour réduire l'espace de stockage". |
L'option de table BACKUP NO n'est pas utilisée ou nécessaire, car BigQuery conserve automatiquement jusqu'à sept jours de versions historiques de toutes vos tables, sans effet sur le temps de traitement ou le stockage facturé. |
où table_attributes sont:
|
BigQuery accepte le clustering, ce qui permet de stocker les clés dans un ordre trié. |
|
|
|
|
BigQuery est également compatible avec l'instruction LDD CREATE OR REPLACE
TABLE
, qui écrase une table si elle existe déjà.
L'instruction BigQuery CREATE TABLE
accepte également les clauses suivantes, qui n'ont pas d'équivalent Snowflake:
Pour en savoir plus sur CREATE TABLE
dans BigQuery, consultez les exemples d'instructions CREATE TABLE
dans la documentation LDD.
Instruction ALTER TABLE
Cette section utilise les commandes de CLI BigQuery correspondant aux commandes Snowflake pour traiter les différences concernant les instructions ALTER pour les tables.
Snowflake | BigQuery |
---|---|
|
|
|
Échanger des tables n'est pas compatible avec BigQuery. |
|
La gestion du classement des données dans les tables n'est pas disponible dans BigQuery. |
|
|
|
|
En outre, Snowflake fournit des options de clustering, de colonne et de contrainte pour modifier les tables non compatibles avec BigQuery.
Instructions DROP TABLE
et UNDROP TABLE
Cette section utilise la commande BigQuery CLI correspondant à la commande Snowflake pour traiter la différence concernant les instructions DROP et UNDROP.
Snowflake | BigQuery |
---|---|
Remarque: Dans Snowflake, le fait de retirer une table ne la supprime pas définitivement du système. Une version de la table retirée est conservée pendant le nombre de jours spécifié par le paramètre DATA_RETENTION_TIME_IN_DAYS de la base de données. |
-f permet d'ignorer la confirmation d'exécution -d indique l'ensemble de données Remarque: Dans BigQuery, la suppression d'une table n'est pas permanente, mais un instantané n'est actuellement conservé que pendant sept jours. |
|
Remarque: Dans BigQuery, vous devez d'abord déterminer un horodatage UNIX (en millisecondes) correspondant à la période d'existence de la table. Ensuite, copiez la table à cet horodatage dans une nouvelle table. La nouvelle table doit avoir un nom différent de celui de la table supprimée. |
Instruction CREATE EXTERNAL TABLE
BigQuery permet de créer des tables externes permanentes et temporaires, et d'interroger des données directement à partir de :
Snowflake permet de créer une table externe permanente qui, lorsqu'elle est interrogée, lit les données d'un ensemble d'un ou de plusieurs fichiers dans une étape externe spécifiée.
Cette section utilise la commande CLI BigQuery correspondant à la commande Snowflake pour traiter les différences concernant l'instruction CREATE EXTERNAL TABLE.
Snowflake | BigQuery |
---|---|
CREATE [OR REPLACE] EXTERNAL TABLE
Remarque: Snowflake permet de préparer les fichiers contenant des données à lire et de spécifier les options de type de format pour les tables externes. Les types de formats Snowflake : CSV, JSON, AVRO, PARQUET et ORC sont tous compatibles avec BigQuery, à l'exception du type XML. |
Remarque: BigQuery permet de créer une table permanente associée à votre source de données à l'aide d'un fichier de définition de table [1], d'un fichier de schéma JSON [2] ou d'une définition de schéma en ligne [3]. La préparation des fichiers à la lecture et la spécification des options de type de format n'est pas acceptée dans BigQuery. |
|
Remarque: BigQuery n'est actuellement compatible avec aucune des options de paramètres facultatives fournies par Snowflake pour la création de tables externes. Pour le partitionnement, BigQuery permet d'utiliser la pseudo-colonne _FILE_NAME pour créer des tables/vues partitionnées venant en surcouche des tables externes. Pour en savoir plus, consultez la section Interroger la pseudocolonne _FILE_NAME . |
De plus, BigQuery est également compatible avec l'interrogation des données partitionnées en externe aux formats AVRO, PARQUET, ORC, JSON et CSV stockées sur Google Cloud Storage à l'aide d'une configuration de partitionnement Hive par défaut.
Instruction CREATE VIEW
Le tableau suivant présente les équivalences entre Snowflake et BigQuery pour l'instruction CREATE VIEW
.
Snowflake | BigQuery |
---|---|
|
|
|
CREATE OR REPLACE VIEW
|
|
|
Non compatible | CREATE VIEW IF NOT EXISTS
|
|
Dans BigQuery, tous les objets référencés doivent déjà exister pour créer une vue. BigQuery vous permet d'interroger des sources de données externes. |
Instruction CREATE SEQUENCE
Les séquences ne sont pas utilisées dans BigQuery. Pour ce faire, vous pouvez utiliser le traitement par le lot suivant. Pour en savoir plus sur les clés de substitution et les dimensions à évolution lente, consultez les guides suivants:
|
---|
Chargement et déchargement de données LDD
Snowflake accepte le chargement et le déchargement de données via des commandes de gestion d'étape, de format de fichier et de canalisation. BigQuery fournit également plusieurs options telles que le chargement bq, le service de transfert de données BigQuery, l'extraction bq, etc. Cette section met en évidence les différences d'utilisation de ces méthodologies pour le chargement et le déchargement des données.
Compte et session LDD
Les concepts de compte et de session de Snowflake ne sont pas compatibles avec BigQuery. BigQuery permet la gestion des comptes via Cloud IAM à tous les niveaux. De plus, les transactions multi-instructions ne sont pas encore disponibles dans BigQuery.
Fonctions définies par l'utilisateur (User-defined functions, UDF)
Les fonctions définies par l'utilisateur (UDF) vous permettent de créer des fonctions pour des opérations personnalisées. Ces fonctions acceptent des colonnes d'entrée, effectuent des actions et renvoient le résultat de ces actions sous la forme d'une valeur.
Snowflake et BigQuery sont tous deux compatibles avec les fonctions définies par l'utilisateur à l'aide d'expressions SQL et de code JavaScript.
Vous trouverez une bibliothèque des fonctions définies par l'utilisateur courantes BigQuery dans le dépôt GitHub de GoogleCloudPlatform/bigquery-utils/.
Syntaxe de CREATE FUNCTION
Le tableau suivant traite des différences de syntaxe de création d'UDF (fonctions définies par l'utilisateur) SQL entre Snowflake et BigQuery.
Snowflake | BigQuery |
---|---|
|
Remarque: Dans la fonction définie par l'utilisateur SQL de BigQuery, le type de données renvoyé est facultatif. BigQuery déduit le type renvoyé par votre fonction à partir du corps de la fonction SQL lorsqu'elle est appelée par une requête. |
|
Remarque:Dans une UDF SQL BigQuery, le type de table renvoyé n'est actuellement pas compatible, mais figure sur la feuille de route du produit et le sera bientôt. Cependant, BigQuery accepte le renvoi de tableaux de type STRUCT. |
Remarque: Snowflake fournit une option sécurisée permettant de limiter la définition et les détails des fonctions définies par l'utilisateur uniquement aux utilisateurs autorisés (c'est-à-dire aux utilisateurs auxquels le rôle est propriétaire de la vue). |
Remarque : La sécurité des fonctions n'est pas un paramètre configurable dans BigQuery. BigQuery permet de créer des rôles et des autorisations IAM pour restreindre l'accès aux données sous-jacentes et à la définition de fonctions. |
|
Remarque: Le comportement de la fonction pour les entrées nulles est implicitement géré dans BigQuery et ne doit pas être spécifié comme option distincte. |
|
Remarque : La volatilité des fonctions n'est pas un paramètre configurable dans BigQuery. Toute volatilité d'UDF BigQuery est équivalente à la volatilité IMMUTABLE de Snowflake (c'est-à-dire qu'elle n'effectue pas de recherches de base de données et n'utilise pas d'autres informations que celles directement présentes dans sa liste d'arguments). |
|
CREATE [OR REPLACE] FUNCTION
Remarque: L'utilisation de guillemets simples ou d'une séquence de caractères telle que les guillemets dollars ($$) is not required or supported in BigQuery. BigQuery implicitly interprets the SQL expression. |
|
Note:Adding comments or descriptions in UDFs is currently not supported in BigQuery. |
|
Note: BigQuery supports using ANY TYPE as argument type. The function will accept an input of any type for this argument. For more information, see templated parameter in BigQuery. |
BigQuery also supports the CREATE FUNCTION IF NOT EXISTS
statement
which treats the query as successful and takes no action if a function with the
same name already exists.
BigQuery's CREATE FUNCTION
statement also supports creating
TEMPORARY or TEMP functions
,
which do not have a Snowflake equivalent. See
calling UDFs
for details on executing a BigQuery persistent UDF.
DROP FUNCTION
syntax
The following table addresses differences in DROP FUNCTION syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
|
Note: BigQuery does not require using the function's signature (argument data type) for deleting the function. |
BigQuery requires that you specify the project_name
if
the function is not located in the current project.
Additional function commands
This section covers additional UDF commands supported by Snowflake that are not directly available in BigQuery.
ALTER FUNCTION
syntax
Snowflake supports the following operations using
ALTER FUNCTION
syntax.
- Renaming a UDF
- Converting to (or reverting from) a secure UDF
- Adding, overwriting, removing a comment for a UDF
As configuring function security and adding function comments is not available in BigQuery, ALTER FUNCTION syntax is currently not supported. However, the CREATE FUNCTION statement can be used to create a UDF with the same function definition but a different name.
DESCRIBE FUNCTION
syntax
Snowflake supports describing a UDF using DESC[RIBE] FUNCTION syntax. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
SHOW USER FUNCTIONS
syntax
In Snowflake, SHOW USER FUNCTIONS syntax can be used to list all UDFs for which users have access privileges. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
Stored procedures
Snowflake stored procedures are written in JavaScript, which can execute SQL statements by calling a JavaScript API. In BigQuery, stored procedures are defined using a block of SQL statements.
CREATE PROCEDURE
syntax
In Snowflake, a stored procedure is executed with a CALL command while in BigQuery, stored procedures are executed like any other BigQuery function.
The following table addresses differences in stored procedure creation syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
Note: Snowflake requires that stored procedures return a single value. Hence, return data type is a required option. |
CREATE [OR REPLACE] PROCEDURE
Note: BigQuery doesn't support a return type for stored procedures. Also, it requires specifying argument mode for each argument passed. |
|
|
|
CREATE [OR REPLACE] PROCEDURE
Remarque: Le comportement de la procédure pour les entrées nulles est implicitement géré dans BigQuery et ne doit pas être spécifié comme option distincte. |
CREATE [OR REPLACE] PROCEDURE
|
Remarque : La volatilité des procédures n'est pas un paramètre configurable dans BigQuery. Il est équivalent à la volatilité IMMUTABLE de Snowflake. |
CREATE [OR REPLACE] PROCEDURE
|
Remarque: L'ajout de commentaires ou de descriptions dans les définitions de procédure n'est actuellement pas disponible dans BigQuery. |
CREATE [OR REPLACE] PROCEDURE
Remarque: Snowflake permet de spécifier l'appelant ou le propriétaire de la procédure pour l'exécution. |
Remarque: Les procédures stockées BigQuery sont toujours exécutées en tant qu'appelant |
BigQuery accepte également l'instruction CREATE PROCEDURE IF NOT EXISTS
, qui traite la requête comme réussie et n'effectue aucune action si une fonction du même nom existe déjà.
Syntaxe de DROP PROCEDURE
Le tableau suivant traite des différences de syntaxe de DROP FUNCTION entre Snowflake et BigQuery.
Snowflake | BigQuery |
---|---|
|
Remarque: BigQuery ne nécessite pas d'utiliser la signature de la procédure (type de données d'argument) pour supprimer la procédure. |
BigQuery nécessite que vous spécifiiez le project_name
si la procédure ne se trouve pas dans le projet actuel.
Commandes de procédure supplémentaires
Snowflake fournit des commandes supplémentaires telles que :ALTER PROCEDURE
,DESC[RIBE] PROCEDURE
etSHOW PROCEDURES
pour gérer les procédures stockées. Celles-ci ne sont actuellement pas compatibles avec BigQuery.
Instructions SQL de métadonnées et de transactions
Snowflake | BigQuery |
---|---|
|
BigQuery utilise toujours l'isolation d'instantané. Pour en savoir plus, consultez la section Garanties de cohérence ailleurs dans ce document. |
|
Non utilisé dans BigQuery. |
|
Non utilisé dans BigQuery |
|
Non utilisé dans BigQuery. |
Instructions SQL multi-instructions et multilignes
Snowflake et BigQuery acceptent les transactions (sessions) et donc les instructions séparées par un point-virgule qui sont systématiquement exécutées ensemble. Pour plus d'informations, consultez la section Transactions multi-instructions.
Colonnes de métadonnées pour les fichiers intermédiaires
Snowflake génère automatiquement des métadonnées pour les fichiers aux étapes internes et externes. Vous pouvez interroger et charger ces métadonnées dans une table avec les colonnes de données standards. Les colonnes de métadonnées suivantes peuvent être utilisées:
Garanties de cohérence et isolation de transaction
Snowflake et BigQuery sont tous deux atomiques, c'est-à-dire conformes à la norme ACID au niveau de chaque mutation sur de nombreuses lignes.
Transactions
Chaque transaction Snowflake se voit attribuer une heure de début unique (avec millisecondes) définie comme ID de transaction. Snowflake n'est compatible qu'avec le niveau d'isolation READ COMMITTED
. Toutefois, une instruction peut voir les modifications apportées par une autre instruction si elles se trouvent toutes les deux dans la même transaction, même si ces modifications ne sont pas encore validées. Les transactions Snowflake acquièrent des verrous sur les ressources (tables) lorsque ces ressources sont modifiées. Les utilisateurs peuvent ajuster le délai maximal d'attente d'une instruction bloquée jusqu'à ce qu'elle expire. Les instructions LMD sont validées automatiquement si le paramètre AUTOCOMMIT
est activé.
BigQuery est également compatible avec les transactions. BigQuery permet d'assurer un contrôle de simultanéité optimiste (le premier à effectuer un commit l'emporte) avec isolation d'instantané, où une requête lit les dernières données validées avant le démarrage de la requête. Cette approche garantit le même niveau de cohérence par ligne, par mutation et entre les lignes d'une même instruction LMD, tout en évitant les interblocages. Si plusieurs mises à jour LMD sont effectuées sur la même table, BigQuery bascule vers le contrôle de simultanéité pessimiste. Les jobs de chargement peuvent s'exécuter complètement indépendamment et ajouter des données aux tables. Cependant, BigQuery ne fournit pas encore de limite de transaction explicite ni de session.
Rollback
Si la session d'une transaction Snowflake est arrêtée de manière inattendue avant le commit ou le rollback de la transaction, elle est laissée dans un état dissocié. L'utilisateur doit exécuter SYSTEM$ABORT_TRANSACTION pour annuler la transaction dissociée, ou Snowflake effectuera un rollback de la transaction dissociée au bout de quatre heures d'inactivité. Dans ce cas, Snowflake détecte l'interblocage et sélectionne l'instruction la plus récente pour effectuer un rollback. Si l'instruction LMD d'une transaction explicitement ouverte échoue, les modifications sont annulées, mais la transaction reste ouverte jusqu'à ce qu'elle soit validée ou annulée. Les instructions LDD de Snowflake ne peuvent pas faire l'objet d'un rollback, car elles sont validées automatiquement.
BigQuery accepte l'instruction ROLLBACK TRANSACTION
.
Il n'y a pas d'instruction ABORT
dans BigQuery.
Limites des bases de données
Vérifiez toujours les derniers quotas et les dernières limites dans la documentation publique BigQuery. Les utilisateurs ayant un volume de requêtes important peuvent demander l'augmentation de nombreux quotas en contactant l'équipe d'assistance Cloud.
Tous les comptes Snowflake ont des limites flexibles définies par défaut. Les limites flexibles sont définies lors de la création d'un compte et peuvent varier. De nombreuses limites flexibles de Snowflake peuvent être augmentées via l'équipe de gestion de compte Snowflake ou une demande d'assistance.
Le tableau suivant présente une comparaison des limites de base de données pour Snowflake et BigQuery.
Limite | Snowflake | BigQuery |
---|---|---|
Taille du texte de la requête | 1 Mo | 1 Mo |
Nombre maximal de requêtes simultanées | XS Warehouse - 8 S Warehouse - 16 M Warehouse - 32 L Warehouse - 64 XL Warehouse - 128 |
100 |