Leitfaden zur Snowflake SQL-Übersetzung

In diesem Dokument werden die Ähnlichkeiten und Unterschiede in der SQL-Syntax zwischen Snowflake und BigQuery beschrieben, um die Planung und Ausführung der Verlagerung Ihres Enterprise Data Warehouse (EDW) nach BigQuery zu beschleunigen. Snowflake für Data Warehousing wurde für die SQL-Syntax von Snowflake entwickelt. Für Snowflake geschriebene Skripts müssen möglicherweise geändert werden, bevor Sie sie in BigQuery verwenden können, da die SQL-Dialekte zwischen den Diensten variieren. Verwenden Sie die Batch-SQL-Übersetzung, um Ihre SQL-Skripts im Bulk zu migrieren, oder die interaktive SQL-Übersetzung, um Ad-hoc-Abfragen zu übersetzen. Snowflake SQL wird von beiden Tools in der Vorabversion unterstützt.

Datentypen

In diesem Abschnitt werden die Entsprechungen zwischen den Datentypen in Snowflake und BigQuery beschrieben.



Snowflake BigQuery Hinweise
NUMBER/ DECIMAL/NUMERIC NUMERIC Der Datentyp NUMBER in Snowflake unterstützt eine Genauigkeit von 38 Ziffern und 37 Dezimalstellen. Die Genauigkeit und Skalierung können durch den Nutzer festgelegt werden.

BigQuery unterstützt NUMERIC und BIGNUMERIC mit optional angegebener Genauigkeit und Skalierung innerhalb bestimmter Grenzen.
INT/INTEGER BIGNUMERIC INT/INTEGER und alle anderen INT-ähnlichen Datentypen wie BIGINT, TINYINT, SMALLINT, BYTEINT sind ein Alias für den Datentyp NUMBER, bei dem Genauigkeit und Skalierung nicht angegeben werden können und immer NUMBER(38, 0) ist.
BIGINT BIGNUMERIC
SMALLINT BIGNUMERIC
TINYINT BIGNUMERIC
BYTEINT BIGNUMERIC
FLOAT/
FLOAT4/
FLOAT8
FLOAT64 Der Datentyp FLOAT in Snowflake legt „NaN“ als > X fest, wobei X ein beliebiger FLOAT-Wert (außer „NaN“ selbst) ist.

Der Datentyp FLOAT in BigQuery legt „NaN“ als < X fest, wobei X ein beliebiger FLOAT-Wert (außer „NaN“ selbst) ist.
DOUBLE/
DOUBLE PRECISION/

REAL
FLOAT64 Der Datentyp DOUBLE in Snowflake ist mit dem Datentyp FLOAT in Snowflake identisch, wird aber häufig fälschlicherweise als FLOAT angezeigt. Er wird ordnungsgemäß als DOUBLE gespeichert.
VARCHAR STRING Der Datentyp VARCHAR in Snowflake hat eine maximale Länge von 16 MB (unkomprimiert). Wenn keine Länge angegeben ist, wird die standardmäßig die maximale Länge verwendet.

Der Datentyp STRING in BigQuery wird als UTF-8-codierter Unicode mit variabler Länge gespeichert. Die maximale Länge beträgt 16.000 Zeichen.
CHAR/CHARACTER STRING Der Datentyp CHAR in Snowflake hat eine maximale Länge von 1.
STRING/TEXT STRING Der Datentyp STRING in Snowflake entspricht dem VARCHAR von Snowflake.
BINARY BYTES
VARBINARY BYTES
BOOLEAN BOOL Der Datentyp BOOL in BigQuery kann nur TRUE/FALSE akzeptieren, im Gegensatz zum Datentyp BOOL in Snowflake, der TRUE/FALSE/NULL akzeptieren kann.
DATE DATE Der Typ DATE in Snowflake akzeptiert die meisten gängigen Datumsformate im Gegensatz zum Typ DATE in BigQuery, der nur Datumsangaben im Format „JJJJ-[M]M-[D]D“ akzeptiert.
TIME TIME Der TIME-Typ in Snowflake unterstützt eine Genauigkeit von 0 bis 9 Nanosekunden, während der Typ TIME in BigQuery eine Genauigkeit von 0 bis 6 Nanosekunden unterstützt.
TIMESTAMP DATETIME TIMESTAMP ist ein benutzerkonfigurierbarer Alias, der standardmäßig TIMESTAMP_NTZ entspricht, was in BigQuery DATETIME entspricht.
TIMESTAMP_LTZ TIMESTAMP
TIMESTAMP_NTZ/DATETIME DATETIME
TIMESTAMP_TZ TIMESTAMP
OBJECT JSON Der Typ OBJECT in Snowflake unterstützt keine explizit typisierten Werte. Werte entsprechen dem Typ VARIANT.
VARIANT JSON Der Typ OBJECT in Snowflake unterstützt keine explizit typisierten Werte. Werte entsprechen dem Typ VARIANT.
ARRAY ARRAY<JSON> Der ARRAY-Typ in Snowflake kann nur VARIANT-Typen unterstützen, während der ARRAY-Typ in BigQuery alle Datentypen mit Ausnahme eines Arrays selbst unterstützen kann.

BigQuery verfügt auch über die folgenden Datentypen, die kein direktes Snowflake-Analog haben:

Abfragesyntax und Abfrageoperatoren

In diesem Abschnitt werden Unterschiede in der Abfragesyntax zwischen Snowflake und BigQuery behandelt.

SELECT-Anweisung

Die meisten Snowflake-SELECT-Anweisungen sind mit BigQuery kompatibel. Die folgende Tabelle enthält eine Liste mit geringfügigen Unterschieden.

Snowflake BigQuery

SELECT TOP ...

FROM table

SELECT expression

FROM table

ORDER BY expression DESC

LIMIT number

SELECT

x/total AS probability,

ROUND(100 * probability, 1) AS pct

FROM raw_data


Hinweis: Snowflake unterstützt das Erstellen und Referenzieren eines Alias in derselben SELECT-Anweisung.

SELECT

x/total AS probability,

ROUND(100 * (x/total), 1) AS pct

FROM raw_data

SELECT * FROM (

VALUES (1), (2), (3)

)

SELECT AS VALUE STRUCT(1, 2, 3)

Bei Snowflake-Aliassen und ‑Kennzeichnungen wird standardmäßig nicht zwischen Groß- und Kleinschreibung unterschieden. Um die Groß- und Kleinschreibung beizubehalten, setzen Sie Aliasse und Kennungen in doppelte Anführungszeichen (").

FROM-Klausel

Eine FROM-Klausel in einer Abfrage gibt die möglichen Tabellen, Ansichten, Unterabfragen oder Tabellenfunktionen an, die in einer SELECT-Anweisung verwendet werden sollen. Alle diese Tabellenreferenzen werden in BigQuery unterstützt.

Die folgende Tabelle enthält eine Liste mit geringfügigen Unterschieden.

Snowflake BigQuery

SELECT $1, $2 FROM (VALUES (1, 'one'), (2, 'two'));

WITH table1 AS
(
SELECT STRUCT(1 as number, 'one' as spelling)
UNION ALL
SELECT STRUCT(2 as number, 'two' as spelling)
)
SELECT *
FROM table1

SELECT* FROM table SAMPLE(10)

SELECT* FROM table

TABLESAMPLE

BERNOULLI (0.1 PERCENT)

SELECT * FROM table1 AT(TIMESTAMP => timestamp) SELECT * FROM table1 BEFORE(STATEMENT => statementID)

SELECT * FROM table

FOR SYSTEM_TIME AS OF timestamp


Hinweis. BigQuery hat keine direkte Alternative zu Snowflakes BEFORE unter Verwendung einer Anweisungs-ID. Der Wert von timestamp darf nicht mehr als sieben Tage vor dem aktuellen Zeitstempel liegen.

@[namespace]<stage_name>[/path]

BigQuery unterstützt das Konzept bereitgestellter Dateien nicht.

SELECT*

FROM table

START WITH predicate

CONNECT BY

[PRIOR] col1 = [PRIOR] col2

[, ...]

...

BigQuery bietet keine direkte Alternative zum CONNECT BY von Snowflake.

Auf BigQuery-Tabellen kann in der FROM-Klausel durch Folgendes verwiesen werden:

  • [project_id].[dataset_id].[table_name]
  • [dataset_id].[table_name]
  • [table_name]

BigQuery unterstützt auch zusätzliche Tabellenreferenzen:

  • Frühere Versionen der Tabellendefinition und der Zeilen mit FOR SYSTEM_TIME AS OF.
  • Feldpfade oder jeder Pfad, der in ein Feld innerhalb eines Datentyps aufgelöst wird (d. h. ein STRUCT)
  • Vereinfachte Arrays

WHERE-Klausel

Die Snowflake-Klausel WHERE und die BigQuery-Klausel WHERE sind identisch, bis auf die folgenden Elemente:

Snowflake BigQuery

SELECT col1, col2 FROM table1, table2 WHERE col1 = col2(+)

SELECT col1, col2
FROM table1 INNER JOIN table2
ON col1 = col2

Hinweis: BigQuery unterstützt die (+)-Syntax für JOINs nicht.

JOIN-Typen

Sowohl Snowflake als auch BigQuery unterstützen die folgenden Join-Typen:

Sowohl Snowflake als auch BigQuery unterstützen die Klausel ON und USING.

Die folgende Tabelle enthält eine Liste mit geringfügigen Unterschieden.

Snowflake BigQuery

SELECT col1

FROM table1

NATURAL JOIN

table2

SELECT col1

FROM table1

INNER JOIN

table2

USING (col1, col2 [, ...])


Hinweis: In BigQuery erfordern JOIN-Klauseln eine JOIN-Bedingung, es sei denn, es handelt sich um eine CROSS JOIN-Klausel oder eine der verknüpften Tabellen ist ein Feld innerhalb eines Datentyps oder eines Arrays.

SELECT ... FROM table1 AS t1, LATERAL ( SELECT*

FROM table2 AS t2

WHERE t1.col = t2.col )


Hinweis: Im Gegensatz zur Ausgabe eines nicht lateralen Joins enthält die Ausgabe eines „Lateral Join“ nur die Zeilen, die aus der Inline-Ansicht generiert wurden. Die Zeilen auf der linken Seite müssen nicht mit der rechten Seite verknüpft sein, da die Zeilen auf der linken Seite bereits berücksichtigt wurden, indem sie in die Inline-Ansicht übergeben wurden.

SELECT ... FROM table1 as t1 LEFT JOIN table2 as t2

ON t1.col = t2.col

Hinweis: BigQuery unterstützt keine direkte Alternative für LATERAL JOINs.

WITH-Klausel

Eine BigQuery-WITH-Klausel enthält eine oder mehrere Unterabfragen, die jedes Mal ausgeführt werden, wenn eine nachfolgende SELECT-Anweisung auf sie verweist. Snowflake-WITH-Klauseln funktionieren genauso wie in BigQuery, mit der Ausnahme, dass BigQuery WITH RECURSIVE nicht unterstützt.

GROUP BY-Klausel

Die Snowflake-Klausel GROUP BY unterstützt GROUP BY, GROUP BY ROLLUP, GROUP BY GROUPING SETS und GROUP BY CUBE, während die BigQuery-Klausel GROUP BY GROUP BY, GROUP BY ALL, GROUP BY ROLLUP, GROUP BY GROUPING SETS und GROUP BY CUBE unterstützt.

Snowflake HAVING und BigQuery HAVING sind synonym. Beachten Sie, dass HAVING nach GROUP BY und der Aggregation und vor ORDER BY kommt.

Snowflake BigQuery

SELECT col1 as one, col2 as two

FROM table GROUP BY (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY ROLLUP (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY ROLLUP (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY GROUPING SETS (one, 2)


Hinweis: Snowflake erlaubt bis zu 128 Gruppierungssätze im selben Abfrageblock.

SELECT col1 as one, col2 as two

FROM table GROUP BY GROUPING SETS (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY CUBE (one,2)


Hinweis: Snowflake erlaubt in jedem Cube bis zu 7 Elemente (128 Gruppierungssätze)

SELECT col1 as one, col2 as two

FROM table GROUP BY CUBE (one, 2)

ORDER BY-Klausel

Es gibt einige kleinere Unterschiede zwischen Snowflake-ORDER BY-Klauseln und BigQuery ORDER BY-Klauseln.

Snowflake BigQuery
In Snowflake werden NULLs standardmäßig am niedrigsten eingestuft (aufsteigende Reihenfolge). In BigQuery werden NULLSs standardmäßig am höchsten eingestuft (aufsteigende Reihenfolge).
Sie können mit NULLS FIRST bzw. NULLS LAST angeben, ob NULL-Werte zuerst oder zuletzt sortiert werden sollen. Es gibt keine Möglichkeit, anzugeben, ob NULL-Werte in BigQuery zuerst oder zuletzt stehen sollen.

LIMIT/FETCH-Klausel

Mit der Klausel LIMIT/FETCH in Snowflake wird die maximale Anzahl von Zeilen begrenzt, die von einem Ausdruck oder einer Unterabfrage zurückgegeben werden. LIMIT (Postgres-Syntax) und FETCH (ANSI-Syntax) führen zum selben Ergebnis.

In Snowflake und BigQuery hat die Anwendung einer LIMIT-Klausel auf eine Abfrage keine Auswirkungen auf den Umfang der gelesenen Daten.

Snowflake BigQuery

SELECT col1, col2

FROM table

ORDER BY col1

LIMIT count OFFSET start


SELECT ...

FROM ...

ORDER BY ...

OFFSET start {[ROW | ROWS]} FETCH {[FIRST | NEXT]} count

{[ROW | ROWS]} [ONLY]


Hinweis: NULL, leere String ('') und $$$$ -Werte werden akzeptiert und werden als „unbegrenzt“ behandelt. Sie wird hauptsächlich für Connectors und Treiber verwendet.

SELECT col1, col2

FROM table

ORDER BY col1

LIMIT count OFFSET start


Hinweis: FETCH wird von BigQuery nicht unterstützt. LIMIT ersetzt FETCH.

Hinweis: In BigQuery muss OFFSET zusammen mit einem LIMIT count verwendet werden. Achten Sie darauf, dass der Wert für count INT64 auf die mindestens erforderlichen geordneten Zeilen festgelegt wird, um die bestmögliche Leistung zu erzielen. Das Sortieren aller Ergebniszeilen führt zu einer unnötigen Verschlechterung der Abfrageausführungsleistung.

QUALIFY-Klausel

Die QUALIFY-Klausel in Snowflake gestattet Ihnen, Ergebnisse für Fensterfunktionen zu filtern, die dem ähnlich sind, was HAVING mit Aggregatfunktionen und GROUP BY-Klauseln macht.

Snowflake BigQuery

SELECT col1, col2 FROM table QUALIFY ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) = 1;

Die Snowflake QUALIFY-Klausel mit einer Analysefunktion wie ROW_NUMBER(), COUNT() und mit OVER PARTITION BY wird in BigQuery als WHERE-Klausel für eine Unterabfrage ausgedrückt, die den Analysewert enthält.

Mit ROW_NUMBER():

SELECT col1, col2

FROM ( SELECT col1, col2

ROW NUMBER() OVER (PARTITION BY col1 ORDER by col2) RN FROM table ) WHERE RN = 1;


Verwendung von ARRAY_AGG(), das größere Partitionen unterstützt:

SELECT result.* FROM ( SELECT ARRAY_AGG(table ORDER BY table.col2 DESC LIMIT 1) [OFFSET(0)] FROM table

GROUP BY col1 ) AS result;

Funktionen

In den folgenden Abschnitten werden die Snowflake-Funktionen und ihre BigQuery-Entsprechungen aufgeführt.

Aggregatfunktionen

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Snowflake-Aggregat-, Aggregatanalyse- und ungefähren Aggregatfunktionen mit ihren BigQuery-Entsprechungen.

Snowflake BigQuery

ANY_VALUE([DISTINCT] expression) [OVER ...]


Hinweis: DISTINCT hat keine Auswirkungen.

ANY_VALUE(expression) [OVER ...]

APPROX_COUNT_DISTINCT([DISTINCT] expression) [OVER ...]


Hinweis: DISTINCT hat keine Auswirkungen.

APPROX_COUNT_DISTINCT(expression)


Hinweis: APPROX_COUNT_DISTINCT wird in BigQuery nicht mit Fensterfunktionen unterstützt.

APPROX_PERCENTILE(expression, percentile) [OVER ...]


Hinweis: In Snowflake ist die Option RESPECT NULLS nicht verfügbar.

APPROX_QUANTILES([DISTINCT] expression,100) [OFFSET((CAST(TRUNC(percentile * 100) as INT64))]


Hinweis: APPROX_QUANTILES wird in BigQuery nicht mit Fensterfunktionen unterstützt.

APPROX_PERCENTILE_ACCUMULATE (expression)

BigQuery unterstützt nicht die Möglichkeit, Zwischenstatus beim Vorhersagen von ungefähren Werten zu speichern.

APPROX_PERCENTILE_COMBINE(state)

BigQuery unterstützt nicht die Möglichkeit, Zwischenstatus beim Vorhersagen von ungefähren Werten zu speichern.

APPROX_PERCENTILE_ESTIMATE(state, percentile)

BigQuery unterstützt nicht die Möglichkeit, Zwischenstatus beim Vorhersagen von ungefähren Werten zu speichern.

APPROX_TOP_K(expression, [number [counters]]


Hinweis: Wenn kein Zahlenparameter angegeben wird, ist der Standardwert 1. Zähler sollten deutlich größer als die Anzahl sein.

APPROX_TOP_COUNT(expression, number)


Hinweis: APPROX_TOP_COUNT wird in BigQuery nicht mit Fensterfunktionen unterstützt.

APPROX_TOP_K_ACCUMULATE(expression, counters)

BigQuery unterstützt nicht die Möglichkeit, Zwischenstatus beim Vorhersagen von ungefähren Werten zu speichern.

APPROX_TOP_K_COMBINE(state, [counters])

BigQuery unterstützt nicht die Möglichkeit, Zwischenstatus beim Vorhersagen von ungefähren Werten zu speichern.

APPROX_TOP_K_ESTIMATE(state, [k])

BigQuery unterstützt nicht die Möglichkeit, Zwischenstatus beim Vorhersagen von ungefähren Werten zu speichern.

APPROXIMATE_JACCARD_INDEX([DISTINCT] expression)


Mit einer benutzerdefinierten UDF können Sie MINHASH mit k verschiedenen Hash-Funktionen implementieren. Ein weiterer Ansatz zur Reduzierung der Varianz in MINHASH besteht darin,
k der Mindestwerte einer Hash-Funktion beizubehalten. In diesem Fall kann der Jaccard-Index so approximiert werden:

WITH

minhash_A AS (

SELECT DISTINCT FARM_FINGERPRINT(TO_JSON_STRING(t)) AS h

FROM TA AS t

ORDER BY h

LIMIT k),

minhash_B AS (

SELECT DISTINCT FARM_FINGERPRINT(TO_JSON_STRING(t)) AS h

FROM TB AS t

ORDER BY h

LIMIT k)

SELECT

COUNT(*) / k AS APPROXIMATE_JACCARD_INDEX

FROM minhash_A

INNER JOIN minhash_B

ON minhash_A.h = minhash_B.h

APPROXIMATE_SIMILARITY([DISTINCT] expression)


Ist ein Synonym für APPROXIMATE_JACCARD_INDEX und kann auf dieselbe Weise implementiert werden.

ARRAY_AGG([DISTINCT] expression1) [WITHIN GROUP (ORDER BY ...)]

[OVER ([PARTITION BY expression2])]

Note: Snowflake does not support ability to IGNORE|RESPECT NULLS and to LIMIT directly in ARRAY_AGG.

ARRAY_AGG([DISTINCT] expression1

[{IGNORE|RESPECT}] NULLS] [ORDER BY ...] LIMIT ...])

[OVER (...)]

AVG([DISTINCT] expression) [OVER ...]

AVG([DISTINCT] expression) [OVER ...]


Hinweis: AVG in BigQuery führt keine automatische Umwandlung von STRINGs aus.

BITAND_AGG(expression)

[OVER ...]

BIT_AND(expression) [OVER ...]

Hinweis: BigQuery wandelt Zeichen-/Textspalten nicht implizit in die nächste INTEGER um.

BITOR_AGG(expression)

[OVER ...]

BIT_OR(expression)

[OVER ...]


Hinweis: BigQuery wandelt Zeichen-/Textspalten nicht implizit in die nächste INTEGER um.

BITXOR_AGG([DISTINCT] expression) [OVER ...]

BIT_XOR([DISTINCT] expression) [OVER ...]


Hinweis: BigQuery wandelt Zeichen-/Textspalten nicht implizit in die nächste INTEGER um.

BOOLAND_AGG(expression) [OVER ...]


Hinweis: In Snowflake können numerische, Dezimal- und Gleitkommawerte als TRUE behandelt werden, wenn sie nicht null sind.

LOGICAL_AND(expression)

[OVER ...]

BOOLOR_AGG(expression)

[OVER ...]


Hinweis: In Snowflake können numerische, Dezimal- und Gleitkommawerte als TRUE behandelt werden, wenn sie nicht null sind.

LOGICAL_OR(expression)

[OVER ...]

BOOLXOR_AGG(expression)

[OVER ([PARTITION BY <partition_expr> ])


Hinweis: In Snowflake können numerische, Dezimal- und Gleitkommawerte als TRUE behandelt werden, wenn sie nicht null sind.
Für numerischen Ausdruck:

SELECT

CASE COUNT(*)

WHEN 1 THEN TRUE

WHEN 0 THEN NULL

ELSE FALSE

END AS BOOLXOR_AGG

FROM T

WHERE expression != 0


Zur Verwendung von OVER können Sie Folgendes ausführen (boolesches Beispiel bereitgestellt):

SELECT

CASE COUNT(expression) OVER (PARTITION BY partition_expr)

WHEN 0 THEN NULL

ELSE

CASE COUNT(

CASE expression

WHEN TRUE THEN 1

END) OVER (PARTITION BY partition_expr)

WHEN 1 THEN TRUE

ELSE FALSE

END

END AS BOOLXOR_AGG

FROM T

CORR(dependent, independent)

[OVER ...]

CORR(dependent, independent)

[OVER ...]

COUNT([DISTINCT] expression [,expression2]) [OVER ...]

COUNT([DISTINCT] expression [,expression2]) [OVER ...]

COVAR_POP(dependent, independent) [OVER ...]

COVAR_POP(dependent, independent) [OVER ...]

COVAR_SAMP(dependent, independent)

[OVER ...]

COVAR_SAMP(dependent, independent)

[OVER ...]

GROUPING(expression1, [,expression2...])

BigQuery unterstützt keine direkte Alternative zu den GROUPING von Snowflake. Verfügbar über eine benutzerdefinierte Funktion.

GROUPING_ID(expression1, [,expression2...])

BigQuery unterstützt keine direkte Alternative zu den GROUPING_ID von Snowflake. Verfügbar über eine benutzerdefinierte Funktion.

HASH_AGG([DISTINCT] expression1, [,expression2])

[OVER ...]


BIT_XOR(
FARM_FINGERPRINT(
TO_JSON_STRING(t))) [OVER]
AUS t AUSWÄHLEN

SELECT HLL([DISTINCT] expression1, [,expression2])

[OVER ...]


Hinweis: In Snowflake können Sie keine Genauigkeit angeben.

SELECT HLL_COUNT.EXTRACT(sketch) FROM (

SELECT HLL_COUNT.INIT(expression)

AS sketch FROM table )


Hinweis: HLL_COUNT… mit Fensterfunktionen wird von BigQuery nicht unterstützt. Nutzer können in einer einzelnen HLL_COUNT...-Funktion nicht mehrere Ausdrücke angeben.

HLL_ACCUMULATE([DISTINCT] expression)


Hinweis: In Snowflake können Sie keine Genauigkeit angeben.
HLL_COUNT.INIT(expression [, precision])

HLL_COMBINE([DISTINCT] state)

HLL_COUNT.MERGE_PARTIAL(Skizze)

HLL_ESTIMATE(state)

HLL_COUNT.EXTRACT(sketch)

HLL_EXPORT(binary)

BigQuery unterstützt keine direkte Alternative zu den HLL_EXPORT von Snowflake.

HLL_IMPORT(object)

BigQuery unterstützt keine direkte Alternative zu den HLL_IMPORT von Snowflake.

KURTOSIS(expression)

[OVER ...]

BigQuery unterstützt keine direkte Alternative zu den KURTOSIS von Snowflake.

LISTAGG(

[DISTINCT] aggregate_expression

[, delimiter]

)

[OVER ...]

STRING_AGG(

[DISTINCT] aggregate_expression

[, delimiter]

)

[OVER ...]

MEDIAN(expression) [OVER ...]


Hinweis: Snowflake unterstützt nicht die Möglichkeit, IGNORE|RESPECT NULLS und LIMIT direkt in ARRAY_AGG. zu verwalten.

PERCENTILE_CONT(

value_expression,

0.5

[ {RESPECT | IGNORE} NULLS]

) OVER()

MAX(expression) [OVER ...]


MIN(expression) [OVER ...]

MAX(expression) [OVER ...]


MIN(expression) [OVER ...]

MINHASH(k, [DISTINCT] expressions)

Mit einer benutzerdefinierten UDF können Sie MINHASH mit k verschiedenen Hash-Funktionen implementieren. Ein weiterer Ansatz zur Reduzierung der Varianz in MINHASH besteht darin, k der Mindestwerte einer Hash-Funktion beizubehalten: SELECT DISTINCT
FARM_FINGERPRINT(
TO_JSON_STRING(t)) AS MINHASH

FROM t

ORDER BY MINHASH

LIMIT k

MINHASH_COMBINE([DISTINCT] state)

<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

MODE(expr1)

OVER ( [ PARTITION BY <expr2> ] )

SELECT expr1

FROM (

SELECT

expr1,

ROW_NUMBER() OVER (

PARTITION BY expr2

ORDER BY cnt DESC) rn

FROM (

SELECT

expr1,

expr2,

COUNTIF(expr1 IS NOT NULL) OVER

(PARTITION BY expr2, expr1) cnt

FROM t))

WHERE rn = 1

OBJECT_AGG(key, value) [OVER ...]

Sie können TO_JSON_STRING verwenden, um einen Wert in einen JSON-formatierten String umzuwandeln.

PERCENTILE_CONT(percentile) WITHIN GROUP (ORDER BY value_expression)

[OVER ...]

PERCENTILE_CONT(

value_expression,

percentile

[ {RESPECT | IGNORE} NULLS]

) OVER()

PERCENTILE_DISC(percentile) WITHIN GROUP (ORDER BY value_expression)

[OVER ...]

PERCENTILE_DISC(

value_expression,

percentile

[ {RESPECT | IGNORE} NULLS]

) OVER()

REGR_AVGX(dependent, independent)

[OVER ...]

SELECT AVG(independent) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_AVGY(dependent, independent)

[OVER ...]

SELECT AVG(dependent) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_COUNT(dependent, independent)

[OVER ...]

SELECT COUNT(*) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_INTERCEPT(dependent, independent)

[OVER ...]

SELECT

AVG(dependent) -

COVAR_POP(dependent,independent)/

VAR_POP(dependent) *

AVG(independent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_R2(dependent, independent)

[OVER ...]

SELECT

CASE

WHEN VAR_POP(independent) = 0

THEN NULL

WHEN VAR_POP(dependent) = 0 AND VAR_POP(independent) != 0

THEN 1

ELSE POWER(CORR(dependent, independent), 2)

END AS ...

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SLOPE(dependent, independent)

[OVER ...]

SELECT

COVAR_POP(dependent,independent)/

VAR_POP(dependent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SXX(dependent, independent)

[OVER ...]

SELECT COUNT(*)*VAR_POP(independent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SYY(dependent, independent)

[OVER ...]

SELECT COUNT(*)*VAR_POP(dependent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

SKEW(expression)

BigQuery unterstützt keine direkte Alternative zum SKEW von Snowflake.

STDDEV([DISTINCT] expression)

[OVER ...]

STDDEV([DISTINCT] expression)

[OVER ...]

STDDEV_POP([DISTINCT] expression)

[OVER ...]

STDDEV_POP([DISTINCT] expression)

[OVER ...]

STDDEV_SAMP([DISTINCT] expression)

[OVER ...]

STDDEV_SAMP([DISTINCT] expression)

[OVER ...]

SUM([DISTINCT] expression)

[OVER ...]

SUM([DISTINCT] expression)

[OVER ...]

VAR_POP([DISTINCT] expression)

[OVER ...]


Hinweis: In Snowflake können VARCHAR in Gleitkommawerte umgewandelt werden.

VAR_POP([DISTINCT] expression)

[OVER ...]

VARIANCE_POP([DISTINCT] expression)

[OVER ...]


Hinweis: In Snowflake können VARCHAR in Gleitkommawerte umgewandelt werden.

VAR_POP([DISTINCT] expression)

[OVER ...]

VAR_SAMP([DISTINCT] expression)

[OVER ...]


Hinweis: In Snowflake können VARCHAR in Gleitkommawerte umgewandelt werden.

VAR_SAMP([DISTINCT] expression)

[OVER ...]

VARIANCE([DISTINCT] expression)

[OVER ...]


Hinweis: In Snowflake können VARCHAR in Gleitkommawerte umgewandelt werden.

VARIANCE([DISTINCT] expression)

[OVER ...]

BigQuery bietet auch die folgenden Aggregat-, Aggregatanalyse- und ungefähren Aggregatfunktionen, die kein direktes Äquivalent in Snowflake haben:

Funktionen für bitweise Ausdrücke

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen bitweisen Snowflake-Ausdrucksfunktionen mit ihren BigQuery-Entsprechungen.

Wenn der Datentyp eines Ausdrucks nicht INTEGER ist, versucht Snowflake, ihn in INTEGER umzuwandeln. In BigQuery wird jedoch keine Umwandlung in INTEGER versucht.

Snowflake BigQuery

BITAND(expression1, expression2)

BIT_AND(x) FROM UNNEST([expression1, expression2]) AS x expression1 & expression2

BITNOT(expression)

~ expression

BITOR(expression1, expression2)

BIT_OR(x) FROM UNNEST([expression1, expression2]) AS x


expression1 | expression2

BITSHIFTLEFT (expression, n)

expression << n

BITSHIFTRIGHT

(expression, n)

expression >> n

BITXOR(expression, expression)


Hinweis: DISTINCT. wird von Snowflake nicht unterstützt.

BIT_XOR([DISTINCT] x) FROM UNNEST([expression1, expression2]) AS x


expression ^ expression

Funktionen für bedingte Ausdrücke

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen bedingten Snowflake-Ausdrücken und ihren BigQuery-Entsprechungen.

Snowflake BigQuery

expression [ NOT ] BETWEEN lower AND upper

(expression >= lower AND expression <= upper)

BOOLAND(expression1, expression2)


Hinweis: In Snowflake können numerische, Dezimal- und Gleitkommawerte als TRUE behandelt werden, wenn sie nicht null sind.

LOGICAL_AND(x)

FROM UNNEST([expression1, expression2]) AS x


expression1 AND expression2

BOOLNOT(expression1)


Hinweis: In Snowflake können numerische, Dezimal- und Gleitkommawerte als TRUE behandelt werden, wenn sie nicht null sind.

NOT expression

BOOLOR

Hinweis: In Snowflake können numerische, Dezimal- und Gleitkommawerte als TRUE behandelt werden, wenn sie nicht null sind.

LOGICAL_OR(x) FROM UNNEST([expression1, expression2]) AS x


expression1 OR expression2

BOOLXOR

Hinweis: In Snowflake können numerische, Dezimal- und Gleitkommawerte als TRUE behandelt werden, wenn sie nicht null sind.
BigQuery unterstützt keine direkte Alternative zum BOOLXOR. von Snowflake.

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

COALESCE(expr1, expr2, [,...])


Hinweis: Für Snowflake sind mindestens zwei Ausdrücke erforderlich. BigQuery benötigt nur einen.

COALESCE(expr1, [,...])

DECODE(expression, search1, result1, [search2, result2...] [,default])

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

Hinweis: BigQuery unterstützt Unterabfragen in Bedingungsanweisungen. So können Sie die DECODE von Snowflake reproduzieren. Der Nutzer muss IS NULL anstelle von = NULL verwenden, um NULL-Auswahlausdrücke mit NULL-Suchausdrücken abzugleichen.

EQUAL_NULL(expression1, expression2)

BigQuery unterstützt keine direkte Alternative zum EQUAL_NULL. von Snowflake.

GREATEST(expression1, [,expression2]...)

GREATEST(expression1, [,expression2]...)

IFF(condition, true_result, false_result)

IF(condition, true_result, false_result)

IFNULL(expression1, expression2)

IFNULL(expression1, expression2)

[ NOT ] IN ...

[ NOT ] IN ...

expression1 IS [ NOT ] DISTINCT FROM expression2

BigQuery unterstützt keine direkte Alternative zum IS [ NOT ] DISTINCT FROM. von Snowflake.

expression IS [ NOT ] NULL

expression IS [ NOT ] NULL

IS_NULL_VALUE(variant_expr)

VARIANT-Datentypen werden von BigQuery nicht unterstützt.

LEAST(expression,...)

LEAST(expression,...)

NULLIF(expression1,expression2)

NULLIF(expression1,expression2)

NVL(expression1, expression2)

IFNULL(expression1,expression2)

NVL2(expr1,expr2,expr2)

IF(expr1 IS NOT NULL, expr2,expr3)

REGR_VALX(expr1,expr2)

IF(expr1 IS NULL, NULL, expr2)

Hinweis: BigQuery unterstützt keine direkte Alternative zu den REGR... -Funktionen von Snowflake.

REGR_VALY(expr1,expr2)

IF(expr2 IS NULL, NULL, expr1)


Hinweis: BigQuery unterstützt keine direkte Alternative zu den REGR... -Funktionen von Snowflake.

ZEROIFNULL(expression)

IFNULL(expression,0)

Kontextfunktionen

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Snowflake-Kontextfunktionen und ihren BigQuery-Entsprechungen.

Snowflake BigQuery

CURRENT_ACCOUNT()

SESSION_USER()


Hinweis: Kein direkter Vergleich. Snowflake gibt die Konto-ID zurück, BigQuery die E-Mail-Adresse des Nutzers.

CURRENT_CLIENT()

Konzept wird in BigQuery nicht verwendet

CURRENT_DATABASE()

SELECT catalog_name

FROM INFORMATION_SCHEMA.SCHEMATA

Dadurch wird eine Tabelle mit Projektnamen zurückgegeben. Kein direkter Vergleich.

CURRENT_DATE[()]


Hinweis: Snowflake erzwingt „()“ nach dem Befehl CURRENT_DATE nicht, um ANSI-Standards zu erfüllen.

CURRENT_DATE([timezone])


Hinweis: Der BigQuery-Befehl CURRENT_DATE unterstützt die optionale Angabe einer Zeitzone.

CURRENT_REGION()

SELECT location

FROM INFORMATION_SCHEMA.SCHEMATA


Hinweis: INFORMATION_SCHEMA.SCHEMATA in BigQuery gibt allgemeinere Standortreferenzen zurück als CURRENT_REGION() in Snowflake. Kein direkter Vergleich.

CURRENT_ROLE()

Konzept wird in BigQuery nicht verwendet

CURRENT_SCHEMA()

SELECT schema_name

FROM INFORMATION_SCHEMA.SCHEMATA

Dadurch wird eine Tabelle mit allen Datasets (auch Schemas genannt) zurückgegeben, die im Projekt oder in der Region verfügbar sind. Kein direkter Vergleich.

CURRENT_SCHEMAS()

Konzept wird in BigQuery nicht verwendet

CURRENT_SESSION()

Konzept wird in BigQuery nicht verwendet

CURRENT_STATEMENT()

SELECT query

FROM INFORMATION_SCHEMA.JOBS_BY_*


Hinweis: Mit INFORMATION_SCHEMA.JOBS_BY_* in BigQuery können Sie nach Abfragen nach Jobtyp, Start-/Endtyp usw. suchen.

CURRENT_TIME[([frac_sec_prec])]


Hinweis: Snowflake ermöglicht eine optionale Genauigkeit mit Bruchteilen einer Sekunde. Gültige Werte reichen von 0 bis 9 Nanosekunden. Der Standardwert ist 9. Zur Einhaltung von ANSI kann dies ohne „()“ aufgerufen werden.

CURRENT_TIME()

CURRENT_TIMESTAMP[([frac_sec_prec])]


Hinweis: Snowflake ermöglicht eine optionale Genauigkeit mit Bruchteilen einer Sekunde. Gültige Werte reichen von 0 bis 9 Nanosekunden. Der Standardwert ist 9. Zur Einhaltung von ANSI kann dies ohne „()“ aufgerufen werden. Legen Sie TIMEZONE als Sitzungsparameter fest.

CURRENT_DATETIME([timezone]) CURRENT_TIMESTAMP()


Hinweis: CURRENT_DATETIME gibt den Datentyp DATETIME zurück, der in Snowflake nicht unterstützt wird. CURRENT_TIMESTAMP gibt den Datentyp TIMESTAMP zurück.

CURRENT_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*

Hinweis: Mit INFORMATION_SCHEMA.JOBS_BY_* in BigQuery können Sie nach Job-IDs nach Jobtyp, Start-/Endtyp usw. suchen.

CURRENT_USER[()]


Hinweis: Snowflake erzwingt „()“ nach dem Befehl CURRENT_USER nicht, um ANSI-Standards zu erfüllen.

SESSION_USER()


SELECT user_email

FROM INFORMATION_SCHEMA.JOBS_BY_*

Hinweis: Kein direkter Vergleich. Snowflake gibt den Nutzernamen zurück, BigQuery die E-Mail-Adresse des Nutzers.

CURRENT_VERSION()

Konzept wird in BigQuery nicht verwendet

CURRENT_WAREHOUSE()

SELECT catalg_name

FROM INFORMATION_SCHEMA.SCHEMATA

LAST_QUERY_ID([num])

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


Hinweis: Mit INFORMATION_SCHEMA.JOBS_BY_* in BigQuery können Sie nach Job-IDs nach Jobtyp, Start-/Endtyp usw. suchen.

LAST_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


Hinweis: Mit INFORMATION_SCHEMA.JOBS_BY_* in BigQuery können Sie nach Job-IDs nach Jobtyp, Start-/Endtyp usw. suchen.

LOCALTIME()


Hinweis: Snowflake erzwingt „()“ nach dem Befehl LOCALTIME nicht, um ANSI-Standards zu erfüllen.

CURRENT_TIME()

LOCALTIMESTAMP()

CURRENT_DATETIME([timezone]) CURRENT_TIMESTAMP()


Hinweis: CURRENT_DATETIME gibt den Datentyp DATETIME zurück, der in Snowflake nicht unterstützt wird. CURRENT_TIMESTAMP gibt den Datentyp TIMESTAMP zurück.

Umrechnungsfunktionen

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Snowflake-Konvertierungsfunktionen und ihren BigQuery-Entsprechungen.

Beachten Sie, dass Funktionen, die in Snowflake und BigQuery identisch erscheinen, unterschiedliche Datentypen zurückgeben können.

Snowflake BigQuery

CAST(expression AS type)


expression :: type

CAST(expression AS type)

TO_ARRAY(expression)

[expression]


ARRAY(subquery)

TO_BINARY(expression[, format])


Hinweis: Snowflake unterstützt die Konvertierung von HEX, BASE64 und UTF-8. Snowflake unterstützt auch TO_BINARY mit dem Datentyp VARIANT. BigQuery hat keine Alternative zum Datentyp VARIANT.

TO_HEX(CAST(expression AS BYTES)) TO_BASE64(CAST(expression AS BYTES))

CAST(expression AS BYTES)


Hinweis: Für die standardmäßige STRING-Codierung in BigQuery wird die UTF-8-Codierung verwendet. Snowflake unterstützt keine BASE32-Codierung.

TO_BOOLEAN(expression)


Hinweis:
  • INT64
    TRUE:
    andernfalls FALSE: 0
  • STRING
    TRUE: "true"/"t"/"yes"/"y"/"on"/"1", FALSE: "false"/"f"/"no"/"n"/"off"/"0"

CAST(expression AS BOOL)


Hinweis:
  • INT64
    TRUE:
    andernfalls FALSE: 0
  • STRING
    TRUE: "true", FALSE: "false"

TO_CHAR(expression[, format])


TO_VARCHAR(expression[, format])


Hinweis: Die Formatmodelle von Snowflake finden Sie in diesem Artikel. BigQuery hat keine Alternative zum Datentyp VARIANT.

CAST(expression AS STRING)


Hinweis: Der Eingabeausdruck von BigQuery kann mit FORMAT_DATE, FORMAT_DATETIME, FORMAT_TIME oder FORMAT_TIMESTAMP formatiert werden.

TO_DATE(expression[, format])


DATE(expression[, format])


Hinweis: In Snowflake können INTEGER-Typen direkt in DATE-Typen konvertiert werden. Die Formatmodelle von Snowflake finden Sie hier. BigQuery hat keine Alternative zum Datentyp VARIANT.

CAST(expression AS DATE)


Hinweis: Der Eingabeausdruck in BigQuery kann mit FORMAT, FORMAT_DATETIME oder FORMAT_TIMESTAMP formatiert werden.

TO_DECIMAL(expression[, format]

[,precision[, scale]]


TO_NUMBER(expression[, format]

[,precision[, scale]]


TO_NUMERIC(expression[, format]

[,precision[, scale]]


Hinweis: Die Formatmodelle von Snowflake für die Datentypen DECIMAL, NUMBER und NUMERIC finden Sie hier. BigQuery hat keine Alternative zum Datentyp VARIANT.

ROUND(CAST(expression AS NUMERIC)

, x)


Hinweis: Der Eingabeausdruck von BigQuery kann mit FORMAT. formatiert werden.

TO_DOUBLE(expression[, format])


Hinweis: Die Formatmodelle von Snowflake für die DOUBLE -Datentypen finden Sie hier. BigQuery hat keine Alternative zum Datentyp VARIANT.

CAST(expression AS FLOAT64)


Hinweis: Der Eingabeausdruck von BigQuery kann mit FORMAT. formatiert werden.

TO_JSON(variant_expression)

BigQuery hat keine Alternative zum Datentyp VARIANT von Snowflake.

TO_OBJECT(variant_expression)

BigQuery hat keine Alternative zum Datentyp VARIANT von Snowflake.

TO_TIME(expression[, format])


TIME(expression[, format])


Hinweis: Die Formatmodelle von Snowflake für die STRING -Datentypen finden Sie hier. BigQuery hat keine Alternative zum Datentyp VARIANT.

CAST(expression AS TIME)


Hinweis: BigQuery hat keine Alternative zum Datentyp VARIANT von Snowflake. Der BigQuery-Eingabeausdruck kann mit FORMAT, FORMAT_DATETIME, FORMAT_TIMESTAMP oder FORMAT_TIME formatiert werden.

TO_TIMESTAMP(expression[, scale])


TO_TIMESTAMP_LTZ(expression[, scale])


TO_TIMESTAMP_NTZ(expression[, scale])


TO_TIMESTAMP_TZ(expression[, scale])


Hinweis: BigQuery bietet keine Alternative zum Datentyp VARIANT.

CAST(expression AS TIMESTAMP)


Hinweis: Der Eingabeausdruck in BigQuery kann mit FORMAT, FORMAT_DATE, FORMAT_DATETIME und FORMAT_TIME formatiert werden. Die Zeitzone kann über FORMAT_TIMESTAMP-Parameter einbezogen oder nicht einbezogen werden.

TO_VARIANT(expression)

BigQuery hat keine Alternative zum Datentyp VARIANT von Snowflake.

TO_XML(variant_expression)

BigQuery hat keine Alternative zum Datentyp VARIANT von Snowflake.

TRY_CAST(expression AS type)

SAFE_CAST(expression AS type)

TRY_TO_BINARY(expression[, format])

TO_HEX(SAFE_CAST(expression AS BYTES)) TO_BASE64(SAFE_CAST(expression AS BYTES))

SAFE_CAST(expression AS BYTES)

TRY_TO_BOOLEAN(expression)

SAFE_CAST(expression AS BOOL)

TRY_TO_DATE(expression)

SAFE_CAST(expression AS DATE)

TRY_TO_DECIMAL(expression[, format]

[,precision[, scale]]


TRY_TO_NUMBER(expression[, format]

[,precision[, scale]]


TRY_TO_NUMERIC(expression[, format]

[,precision[, scale]]

ROUND(

SAFE_CAST(expression AS NUMERIC)

, x)

TRY_TO_DOUBLE(expression)

SAFE_CAST(expression AS FLOAT64)

TRY_TO_TIME(expression)

SAFE_CAST(expression AS TIME)

TRY_TO_TIMESTAMP(expression)


TRY_TO_TIMESTAMP_LTZ(expression)


TRY_TO_TIMESTAMP_NTZ(expression)


TRY_TO_TIMESTAMP_TZ(expression)

SAFE_CAST(expression AS TIMESTAMP)

BigQuery bietet außerdem die folgenden Conversion-Funktionen, die in Snowflake keine direkte Entsprechung haben:

Funktionen zur Datengenerierung

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Snowflake-Funktionen zur Datengenerierung und ihren BigQuery-Entsprechungen.

Snowflake BigQuery

NORMAL(mean, stddev, gen)

BigQuery unterstützt keinen direkten Vergleich mit NORMAL. von Snowflake.

RANDOM([seed])

IF(RAND()>0.5, CAST(RAND()*POW(10, 18) AS INT64),

(-1)*CAST(RAND()*POW(10, 18) AS

INT64))


Hinweis: BigQuery unterstützt keine Auslöser.

RANDSTR(length, gen)

BigQuery unterstützt keinen direkten Vergleich mit RANDSTR. von Snowflake.
SEQ1 / SEQ2 / SEQ4 / SEQ8 BigQuery unterstützt keinen direkten Vergleich mit SEQ_. von Snowflake.

UNIFORM(min, max, gen)

CAST(min + RAND()*(max-min) AS INT64)


Hinweis:Mithilfe von persistenten UDFs können Sie ein Äquivalent zu UNIFORM in Snowflake erstellen. Beispiel hier.
UUID_STRING([uuid, name])

Hinweis: Snowflake gibt 128 zufällige Bits zurück. Snowflake unterstützt UUIDs Version 4 (zufällig) und Version 5 (benannt)

GENERATE_UUID()


Hinweis: BigQuery gibt 122 zufällige Bits zurück. BigQuery unterstützt nur UUIDs der Version 4.

ZIPF(s, N, gen)

BigQuery unterstützt keinen direkten Vergleich mit ZIPF. von Snowflake.

Funktionen für Datum und Uhrzeit

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Snowflake-Datums- und -Uhrzeitfunktionen mit ihren BigQuery-Entsprechungen. BigQuery-Datums- und -Uhrzeitfunktionen umfassen Datumsfunktionen, Datums-/Uhrzeitfunktionen, Uhrzeitfunktionen und Zeitstempelfunktionen.

Snowflake BigQuery

ADD_MONTHS(date, months)

CAST(

DATE_ADD(

date,

INTERVAL integer MONTH

) AS TIMESTAMP

)

CONVERT_TIMEZONE(source_tz, target_tz, source_timestamp)


CONVERT_TIMEZONE(target_tz, source_timestamp)

PARSE_TIMESTAMP(

"%c%z",

FORMAT_TIMESTAMP(

"%c%z",

timestamp,

target_timezone

)

)


Hinweis: „source_timezone“ ist in BigQuery immer UTC.

DATE_FROM_PARTS(year, month, day)


Hinweis: Snowflake unterstützt Überlauf und negative Datumsangaben. Zum Beispiel gibt DATE_FROM_PARTS(2000, 1 + 24, 1) den 1. Januar 2002 zurück. Dies wird in BigQuery nicht unterstützt.

DATE(year, month, day)


DATE(timestamp_expression[, timezone])


DATE(datetime_expression)

DATE_PART(part, dateOrTime)


Hinweis: Snowflake unterstützt die Teiletypen ISO-Wochentag, Nanosekunde und Epochensekunde/Millisekunde/Mikrosekunde/Nanosekunde. BigQuery tut dies nicht. Eine vollständige Liste der Snowflake-Teiletypen finden Sie hier..

EXTRACT(part FROM dateOrTime)


Hinweis: BigQuery unterstützt die Teiletypen "Woche(<Wochentag>)", "Mikrosekunde" und "Millisekunden". Snowflake tut dies nicht. Die vollständige Liste der BigQuery-Teiletypen finden Sie hier und hier.

DATE_TRUNC(part, dateOrTime)


Hinweis: Snowflake unterstützt den Typ „Nanosekunden“. BigQuery tut dies nicht. Eine vollständige Liste der Snowflake-Teiletypen finden Sie hier..

DATE_TRUNC(date, part)


DATETIME_TRUNC(datetime, part)


TIME_TRUNC(time, part)


TIMESTAMP_TRUNC(timestamp, part[, timezone])


Hinweis: BigQuery unterstützt die Teiletypen "Woche(<Wochentag>)", ISO-Woche und ISO-Jahre. Snowflake tut dies nicht.

DATEADD(part, value, dateOrTime)

DATE_ADD(date, INTERVAL value part)

DATEDIFF(

part,

expression1,

expression2

)


Hinweis: In Snowflake wird mit dieser Funktion die Differenz zwischen zwei Datums-, Uhrzeit- und Zeitstempeltypen berechnet.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


Hinweis: BigQuery unterstützt die Teiletypen "week(<weekday>)" und "ISO-Jahre".

DAYNAME(dateOrTimestamp)

FORMAT_DATE('%a', date)


FORMAT_DATETIME('%a', datetime)


FORMAT_TIMESTAMP('%a', timestamp)

EXTRACT(part FROM dateOrTime)


Hinweis: Snowflake unterstützt die Teiletypen ISO-Wochentag, Nanosekunde und Epochensekunde/Millisekunde/Mikrosekunde/Nanosekunde. BigQuery tut dies nicht. Eine vollständige Liste der Snowflake-Teiletypen finden Sie hier..

EXTRACT(part FROM dateOrTime)


Hinweis: BigQuery unterstützt die Teiletypen "Woche(<Wochentag>)", "Mikrosekunde" und "Millisekunden". Snowflake tut dies nicht. Die vollständige Liste der BigQuery-Teiletypen finden Sie hier und hier.

[HOUR, MINUTE, SECOND](timeOrTimestamp)

EXTRACT(part FROM timestamp [AT THE ZONE timezone])

LAST_DAY(dateOrTime[, part])

DATE_SUB( DATE_TRUNC(

DATE_ADD(date, INTERVAL

1 part),

part),

INTERVAL 1 DAY)

MONTHNAME(dateOrTimestamp)

FORMAT_DATE('%b', date)


FORMAT_DATETIME('%b', datetime)


FORMAT_TIMESTAMP('%b', timestamp)

NEXT_DAY(dateOrTime, dowString)

DATE_ADD(

DATE_TRUNC(

date,

WEEK(dowString)),

INTERVAL 1 WEEK)


Hinweis: Möglicherweise muss „dowString“ neu formatiert werden. Zum Beispiel ist „su“ von Snowflake der „SUNDAY“ von BigQuery.

PREVIOUS_DAY(dateOrTime, dowString)

DATE_TRUNC(

date,

WEEK(dowString)

)


Hinweis: Möglicherweise muss „dowString“ neu formatiert werden. Zum Beispiel ist „su“ von Snowflake der „SUNDAY“ von BigQuery.

TIME_FROM_PARTS(hour, minute, second[, nanosecond)


Hinweis: Snowflake unterstützt Überlaufzeiten. Beispiel: TIME_FROM_PARTS(0, 100, 0) gibt 01:40:00 zurück... Dies wird in BigQuery nicht unterstützt. Nanosekunden werden in BigQuery nicht unterstützt.

TIME(hour, minute, second)


TIME(timestamp, [timezone])


TIME(datetime)

TIME_SLICE(dateOrTime, sliceLength, part[, START]


TIME_SLICE(dateOrTime, sliceLength, part[, END]

DATE_TRUNC(

DATE_SUB(CURRENT_DATE(),

INTERVAL value MONTH),

MONTH)


DATE_TRUNC(

DATE_ADD(CURRENT_DATE(),

INTERVAL value MONTH),

MONTH)


Hinweis: BigQuery unterstützt keinen direkten, genauen Vergleich mit TIME_SLICE von Snowflake. Verwenden Sie DATETINE_TRUNC, TIME_TRUNC oder TIMESTAMP_TRUNC für den entsprechenden Datentyp.

TIMEADD(part, value, dateOrTime)

TIME_ADD(time, INTERVAL value part)

TIMEDIFF(

part,

expression1,

expression2,

)


Hinweis: In Snowflake wird mit dieser Funktion die Differenz zwischen zwei Datums-, Uhrzeit- und Zeitstempeltypen berechnet.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


Hinweis: BigQuery unterstützt die Teiletypen "week(<weekday>)" und "ISO-Jahre".

TIMESTAMP_[LTZ, NTZ, TZ _]FROM_PARTS (year, month, day, hour, second [, nanosecond][, timezone])

TIMESTAMP(

string_expression[, timezone] | date_expression[, timezone] |

datetime_expression[, timezone]

)


Hinweis: In BigQuery müssen Zeitstempel als STRING-Typen eingegeben werden. Beispiel: "2008-12-25 15:30:00"

TIMESTAMPADD(part, value, dateOrTime)

TIMESTAMPADD(timestamp, INTERVAL value part)

TIMESTAMPDIFF(

part,

expression1,

expression2,

)


Hinweis: In Snowflake wird mit dieser Funktion die Differenz zwischen zwei Datums-, Uhrzeit- und Zeitstempeltypen berechnet.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


Hinweis: BigQuery unterstützt die Teiletypen "week(<weekday>)" und "ISO-Jahre".

TRUNC(dateOrTime, part)


Hinweis: Snowflake unterstützt den Typ „Nanosekunden“. BigQuery tut dies nicht. Eine vollständige Liste der Snowflake-Teiletypen finden Sie hier..

DATE_TRUNC(date, part)


DATETIME_TRUNC(datetime, part)


TIME_TRUNC(time, part)


TIMESTAMP_TRUNC(timestamp, part[, timezone])


Hinweis: BigQuery unterstützt die Teiletypen "Woche(<Wochentag>)", ISO-Woche und ISO-Jahre. Snowflake tut dies nicht.

[YEAR*, DAY*, WEEK*, MONTH, QUARTER](dateOrTimestamp)

EXTRACT(part FROM timestamp [AT THE ZONE timezone])

BigQuery bietet außerdem die folgenden Datums- und Uhrzeitfunktionen, die in Snowflake keine direkte Entsprechung haben:

Informationsschema- und Tabellenfunktionen

Viele der Informationsschema- und Tabellenfunktionen von Snowflake werden in BigQuery nicht unterstützt. Snowflake bietet die folgenden Schema- und Tabellenfunktionen, die in BigQuery keine direkte Entsprechung haben:

Unten finden Sie eine Liste der zugehörigen BigQuery- und Snowflake-Informationsschema- und Tabellenfunktionen.

Snowflake BigQuery
QUERY_HISTORY

QUERY_HISTORY_BY_*
INFORMATION_SCHEMA.JOBS_BY_*

Hinweis: Keine direkte Alternative.
TASK_HISTORY INFORMATION_SCHEMA.JOBS_BY_*

Hinweis: Keine direkte Alternative.

BigQuery bietet die folgenden Schema- und Tabellenfunktionen, die in Snowflake keine direkte Entsprechung haben:

Numerische Funktionen

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Snowflake-Zahlenfunktionen und ihren BigQuery-Entsprechungen.

Snowflake BigQuery

ABS(expression)

ABS(expression)

ACOS(expression)

ACOS(expression)

ACOSH(expression)

ACOSH(expression)

ASIN(expression)

ASIN(expression)

ASINH(expression)

ASINH(expression)

ATAN(expression)

ATAN(expression)

ATAN2(y, x)

ATAN2(y, x)

ATANH(expression)

ATANH(expression)

CBRT(expression)

POW(expression, ⅓)

CEIL(expression [, scale])

CEIL(expression)


Hinweis: CEIL von BigQuery unterstützt keine Möglichkeit, die Genauigkeit oder Skalierung anzugeben. In ROUND können Sie keine Rundung festlegen.

COS(expression)

COS(expression)

COSH(expression)

COSH(expression)

COT(expression)

1/TAN(expression)

DEGREES(expression)

(expression)*(180/ACOS(-1))

EXP(expression)

EXP(expression)

FACTORIAL(expression)

BigQuery hat keine direkte Alternative zum FACTORIAL von Snowflake. Verwenden Sie eine benutzerdefinierte Funktion.

FLOOR(expression [, scale])

FLOOR(expression)


Hinweis: FLOOR von BigQuery unterstützt keine Möglichkeit, die Genauigkeit oder Skalierung anzugeben. In ROUND können Sie keine Rundung festlegen. TRUNC funktioniert für positive Zahlen, aber nicht für negative Zahlen, da der Absolutwert berechnet wird.

HAVERSINE(lat1, lon1, lat2, lon2)

ST_DISTANCE( ST_GEOGPOINT(lon1, lat1),

ST_GEOGPOINT(lon2, lat2)

)/1000


Hinweis: Keine genaue Übereinstimmung, aber nah dran.

LN(expression)

LN(expression)

LOG(base, expression)

LOG(expression [,base])


LOG10(expression)


Hinweis: Die Standardbasis für LOG ist 10.

MOD(expression1, expression2)

MOD(expression1, expression2)

PI()

ACOS(-1)

POW(x, y)


POWER(x, y)

POW(x, y)


POWER(x, y)

RADIANS(expression)

(expression)*(ACOS(-1)/180)

ROUND(expression [, scale])

ROUND(expression, [, scale])

SIGN(expression)

SIGN(expression)

SIN(expression)

SIN(expression)

SINH(expression)

SINH(expression)

SQRT(expression)

SQRT(expression)

SQUARE(expression)

POW(expression, 2)

TAN(expression)

TAN(expression)

TANH(expression)

TANH(expression)

TRUNC(expression [, scale])


TRUNCATE(expression [, scale])

TRUNC(expression [, scale])


Hinweis: Der zurückgegebene Wert von BigQuery muss kleiner sein als der Ausdruck. Er unterstützt nicht „ist gleich mit“.

BigQuery bietet außerdem die folgenden mathematischen Funktionen, die in Snowflake kein direktes Äquivalent haben:

Funktionen für semistrukturierte Daten

Snowflake BigQuery
ARRAY_APPEND Benutzerdefinierte Funktion
ARRAY_CAT ARRAY_CONCAT
ARRAY_COMPACT Benutzerdefinierte Funktion
ARRAY_CONSTRUCT [ ]
ARRAY_CONSTRUCT_COMPACT Benutzerdefinierte Funktion
ARRAY_CONTAINS Benutzerdefinierte Funktion
ARRAY_INSERT Benutzerdefinierte Funktion
ARRAY_INTERSECTION Benutzerdefinierte Funktion
ARRAY_POSITION Benutzerdefinierte Funktion
ARRAY_PREPEND Benutzerdefinierte Funktion
ARRAY_SIZE ARRAY_LENGTH
ARRAY_SLICE Benutzerdefinierte Funktion
ARRAY_TO_STRING ARRAY_TO_STRING
ARRAYS_OVERLAP Benutzerdefinierte Funktion
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 Benutzerdefinierte Funktion
CHECK_XML Benutzerdefinierte Funktion
FLATTEN UNNEST
GET Benutzerdefinierte Funktion
GET_IGNORE_CASE Benutzerdefinierte Funktion

GET_PATH , :

Benutzerdefinierte Funktion
IS_<object_type> Benutzerdefinierte Funktion
IS_ARRAY Benutzerdefinierte Funktion
IS_BINARY Benutzerdefinierte Funktion
IS_BOOLEAN Benutzerdefinierte Funktion
IS_CHAR , IS_VARCHAR Benutzerdefinierte Funktion
IS_DATE , IS_DATE_VALUE Benutzerdefinierte Funktion
IS_DECIMAL Benutzerdefinierte Funktion
IS_DOUBLE , IS_REAL Benutzerdefinierte Funktion
IS_INTEGER Benutzerdefinierte Funktion
IS_OBJECT Benutzerdefinierte Funktion
IS_TIME Benutzerdefinierte Funktion
IS_TIMESTAMP_* Benutzerdefinierte Funktion
OBJECT_CONSTRUCT Benutzerdefinierte Funktion
OBJECT_DELETE Benutzerdefinierte Funktion
OBJECT_INSERT Benutzerdefinierte Funktion
PARSE_JSON JSON_EXTRACT
PARSE_XML Benutzerdefinierte Funktion
STRIP_NULL_VALUE Benutzerdefinierte Funktion
STRTOK_TO_ARRAY SPLIT
TRY_PARSE_JSON Benutzerdefinierte Funktion
TYPEOF Benutzerdefinierte Funktion
XMLGET Benutzerdefinierte Funktion

String- und Binärfunktionen

Snowflake BigQuery

string1 || string2

CONCAT(string1, string2)

ASCII

TO_CODE_POINTS(string1)[OFFSET(0)]

BASE64_DECODE_BINARY

SAFE_CONVERT_BYTES_TO_STRING(

FROM_BASE64(<bytes_input>)

)

BASE64_DECODE_STRING

SAFE_CONVERT_BYTES_TO_STRING(

FROM_BASE64(<string1>)

)

BASE64_ENCODE

TO_BASE64(

SAFE_CAST(<string1> AS BYTES)

)

BIT_LENGTH

BYTE_LENGTH * 8

CHARACTER_LENGTH

CHARINDEX(substring, string)

STRPOS(string, substring)

CHR,CHAR

CODE_POINTS_TO_STRING([number])

COLLATE Benutzerdefinierte Funktion
COLLATION Benutzerdefinierte Funktion
COMPRESS Benutzerdefinierte Funktion

CONCAT(string1, string2)

CONCAT(string1, string2)

Hinweis: CONCAT(...) in BigQuery unterstützt die Verkettung einer beliebigen Anzahl von Strings.
CONTAINS Benutzerdefinierte Funktion
DECOMPRESS_BINARY Benutzerdefinierte Funktion
DECOMPRESS_STRING Benutzerdefinierte Funktion
EDITDISTANCE EDIT_DISTANCE
ENDSWITH Benutzerdefinierte Funktion
HEX_DECODE_BINARY

SAFE_CONVERT_BYTES_TO_STRING(

FROM_HEX(<string1>)

HEX_DECODE_STRING

SAFE_CONVERT_BYTES_TO_STRING(

FROM_HEX(<string1>)

HEX_ENCODE

TO_HEX(

SAFE_CAST(<string1> AS BYTES))

ILIKE Benutzerdefinierte Funktion
ILIKE ANY Benutzerdefinierte Funktion
INITCAP INITCAP
INSERT Benutzerdefinierte Funktion
LEFT Benutzerdefinierte Funktion
LENGTH

LENGTH(expression)

LIKE LIKE
LIKE ALL Benutzerdefinierte Funktion
LIKE ANY Benutzerdefinierte Funktion
LOWER

LOWER(string)

LPAD

LPAD(string1, length[, string2])

LTRIM

LTRIM(string1, trim_chars)

MD5,MD5_HEX

MD5(string)

MD5_BINARY Benutzerdefinierte Funktion
OCTET_LENGTH Benutzerdefinierte Funktion
PARSE_IP Benutzerdefinierte Funktion
PARSE_URL Benutzerdefinierte Funktion
POSITION

STRPOS(string, substring)

REPEAT

REPEAT(string, integer)

REPLACE

REPLACE(string1, old_chars, new_chars)

REVERSE

number_characters

)

REVERSE(expression)

RIGHT Benutzerdefinierte Funktion
RPAD RPAD
RTRIM

RTRIM(string, trim_chars)

RTRIMMED_LENGTH Benutzerdefinierte Funktion
SHA1,SHA1_HEX

SHA1(string)

SHA1_BINARY Benutzerdefinierte Funktion
SHA2,SHA2_HEX Benutzerdefinierte Funktion
SHA2_BINARY Benutzerdefinierte Funktion
SOUNDEX Benutzerdefinierte Funktion
SPACE Benutzerdefinierte Funktion
SPLIT SPLIT
SPLIT_PART Benutzerdefinierte Funktion
SPLIT_TO_TABLE Benutzerdefinierte Funktion
STARTSWITH Benutzerdefinierte Funktion
STRTOK

SPLIT(instring, delimiter)[ORDINAL(tokennum)]


Hinweis: Das gesamte delimiter-Stringargument wird als einzelnes Trennzeichen verwendet. Das Standardtrennzeichen ist ein Komma.
STRTOK_SPLIT_TO_TABLE Benutzerdefinierte Funktion
SUBSTR,SUBSTRING SUBSTR
TRANSLATE Benutzerdefinierte Funktion
TRIM TRIM
TRY_BASE64_DECODE_BINARY Benutzerdefinierte Funktion
TRY_BASE64_DECODE_STRING

SUBSTR(string, 0, integer)

TRY_HEX_DECODE_BINARY

SUBSTR(string, -integer)

TRY_HEX_DECODE_STRING

LENGTH(expression)

UNICODE Benutzerdefinierte Funktion

UPPER

UPPER

Stringfunktionen (reguläre Ausdrücke)

Snowflake BigQuery
REGEXP

IF(REGEXP_CONTAINS,1,0)=1

REGEXP_COUNT

ARRAY_LENGTH(

REGEXP_EXTRACT_ALL(

source_string,

pattern

)

)


Wenn position angegeben ist

ARRAY_LENGTH(

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)

)


Hinweis: BigQuery unterstützt reguläre Ausdrücke mithilfe der re2-Bibliothek; in der jeweiligen Dokumentation finden Sie weitere Informationen zur Syntax der regulären Ausdrücke.
REGEXP_INSTR

IFNULL(

STRPOS(

source_string,

REGEXP_EXTRACT(

source_string,

pattern)

), 0)


Wenn position angegeben ist:

IFNULL(

STRPOS(

SUBSTR(source_string, IF(position <= 0, 1, position)),

REGEXP_EXTRACT(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern)

) + IF(position <= 0, 1, position) - 1, 0)


Wenn occurrence angegeben ist

IFNULL(

STRPOS(

SUBSTR(source_string, IF(position <= 0, 1, position)),

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)[SAFE_ORDINAL(occurrence)]

) + IF(position <= 0, 1, position) - 1, 0)


Hinweis: BigQuery unterstützt reguläre Ausdrücke mithilfe der re2-Bibliothek; in der jeweiligen Dokumentation finden Sie weitere Informationen zur Syntax der regulären Ausdrücke.

REGEXP_LIKE

IF(REGEXP_CONTAINS,1,0)=1

REGEXP_REPLACE

REGEXP_REPLACE(

source_string,

pattern,

""

)


Wenn replace_string angegeben ist

REGEXP_REPLACE(

source_string,

pattern,

replace_string

)


Wenn position angegeben ist

CASE

WHEN position > LENGTH(source_string) THEN source_string

WHEN position <= 0 THEN

REGEXP_REPLACE(

source_string,

pattern,

""

)

ELSE

CONCAT(

SUBSTR(

source_string, 1, position - 1),

REGEXP_REPLACE(

SUBSTR(source_string, position),

pattern,

replace_string

)

)

END


Hinweis: BigQuery unterstützt reguläre Ausdrücke mithilfe der re2-Bibliothek; in der jeweiligen Dokumentation finden Sie weitere Informationen zur Syntax der regulären Ausdrücke.
REGEXP_SUBSTR

REGEXP_EXTRACT(

source_string,

pattern

)


Wenn position angegeben ist

REGEXP_EXTRACT(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)


Wenn occurrence angegeben ist

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)[SAFE_ORDINAL(occurrence)]


Hinweis: BigQuery unterstützt reguläre Ausdrücke mithilfe der re2-Bibliothek; in der jeweiligen Dokumentation finden Sie weitere Informationen zur Syntax der regulären Ausdrücke.
RLIKE

IF(REGEXP_CONTAINS,1,0)=1

Systemfunktionen

Snowflake BigQuery
SYSTEM$ABORT_SESSION Benutzerdefinierte Funktion
SYSTEM$ABORT_TRANSACTION Benutzerdefinierte Funktion
SYSTEM$CANCEL_ALL_QUERIES Benutzerdefinierte Funktion
SYSTEM$CANCEL_QUERY Benutzerdefinierte Funktion
SYSTEM$CLUSTERING_DEPTH Benutzerdefinierte Funktion
SYSTEM$CLUSTERING_INFORMATION Benutzerdefinierte Funktion
SYSTEM$CLUSTERING_RATIO — Deprecated Benutzerdefinierte Funktion
SYSTEM$CURRENT_USER_TASK_NAME Benutzerdefinierte Funktion
SYSTEM$DATABASE_REFRESH_HISTORY Benutzerdefinierte Funktion
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB Benutzerdefinierte Funktion
SYSTEM$GET_AWS_SNS_IAM_POLICY Benutzerdefinierte Funktion
SYSTEM$GET_PREDECESSOR_RETURN_VALUE Benutzerdefinierte Funktion
SYSTEM$LAST_CHANGE_COMMIT_TIME Benutzerdefinierte Funktion
SYSTEM$PIPE_FORCE_RESUME Benutzerdefinierte Funktion
SYSTEM$PIPE_STATUS Benutzerdefinierte Funktion
SYSTEM$SET_RETURN_VALUE Benutzerdefinierte Funktion
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS Benutzerdefinierte Funktion
SYSTEM$STREAM_GET_TABLE_TIMESTAMP Benutzerdefinierte Funktion
SYSTEM$STREAM_HAS_DATA Benutzerdefinierte Funktion
SYSTEM$TASK_DEPENDENTS_ENABLE Benutzerdefinierte Funktion
SYSTEM$TYPEOF Benutzerdefinierte Funktion
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS Benutzerdefinierte Funktion
SYSTEM$WAIT Benutzerdefinierte Funktion
SYSTEM$WHITELIST Benutzerdefinierte Funktion
SYSTEM$WHITELIST_PRIVATELINK Benutzerdefinierte Funktion

Tabellenfunktionen

Snowflake BigQuery
GENERATOR Benutzerdefinierte Funktion
GET_OBJECT_REFERENCES Benutzerdefinierte Funktion
RESULT_SCAN Benutzerdefinierte Funktion
VALIDATE Benutzerdefinierte Funktion

Hilfs- und Hash-Funktionen

Snowflake BigQuery
GET_DDL Funktionsanfrage
HASH HASH ist eine proprietäre Snowflake-Funktion. Kann nicht übersetzt werden, ohne die zugrunde liegende Logik von Snowflake zu kennen.

Fensterfunktionen

Snowflake BigQuery
CONDITIONAL_CHANGE_EVENT Benutzerdefinierte Funktion
CONDITIONAL_TRUE_EVENT Benutzerdefinierte Funktion
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 Benutzerdefinierte Funktion
ROW_NUMBER ROW_NUMBER
WIDTH_BUCKET Benutzerdefinierte Funktion

BigQuery unterstützt auch SAFE_CAST(ASN-Typname). Dieser gibt NULL zurück, wenn BigQuery keine Umwandlung durchführen kann (z. B. SAFE_CAST(„apple“ AS INT64) gibt NULL zurück).

Operatoren

In den folgenden Abschnitten werden die Snowflake-Operatoren und ihre BigQuery-Entsprechungen aufgeführt.

Arithmetischer Operator

Die folgende Tabelle zeigt Zuordnungen zwischen den arithmetischen Operatoren von Snowflake und ihren BigQuery-Entsprechungen.

Snowflake BigQuery

(Unary) (+'5')

CAST("5" AS NUMERIC)

a + b

a + b

(Unary) (-'5')

(-1) * CAST("5" AS NUMERIC)


Hinweis: BigQuery unterstützt das standardmäßige unäre Minuszeichen, konvertiert aber keine Ganzzahlen im Stringformat in den Typ INT64, NUMERIC oder FLOAT64.

a - b

a - b

date1 - date2


date1 - 365

DATE_DIFF(date1, date2, date_part) DATE_SUB(date1, date2, date_part)

a * b

a * b

a / b

a / b

a % b

MOD(a, b)

Details zu Skalierung und Genauigkeit bei arithmetischen Vorgängen in Snowflake finden Sie in der Snowflake-Dokumentation.

Vergleichsoperator

Vergleichsoperatoren von Snowflake und Vergleichsoperatoren von BigQuery sind identisch.

Logische/boolesche Operatoren

Logische/boolesche Operatoren von Snowflake und logische/boolesche Operatoren von BigQuery sind identisch.

Set-Operatoren

Die folgende Tabelle zeigt Zuordnungen zwischen den Set-Operatoren von Snowflake und ihren BigQuery-Entsprechungen.

Snowflake BigQuery

SELECT ... INTERSECT SELECT ...

SELECT ...

INTERSECT DISTINCT

SELECT...

SELECT ... MINUS SELECT ...

SELECT ... EXCEPT SELECT …


Hinweis: MINUS und EXCEPT sind Synonyme.

SELECT ... EXCEPT DISTINCT SELECT ...

SELECT ... UNION SELECT ...

SELECT ... UNION ALL SELECT ...

SELECT ... UNION DISTINCT SELECT ...


SELECT ... UNION ALL SELECT ...

Operatoren für untergeordnete Abfragen

Die folgende Tabelle zeigt Zuordnungen zwischen den Subquery-Operatoren von Snowflake und ihren BigQuery-Entsprechungen.

Snowflake BigQuery

SELECT ... FROM ... WHERE col <operator> ALL … SELECT ... FROM ... WHERE col <operator> ANY ...

BigQuery unterstützt keine direkte Alternative zu ALL/ANY von Snowflake.

SELECT ... FROM ...

WHERE [NOT] EXISTS...

SELECT ... FROM ...

WHERE [NOT] EXISTS...

SELECT ... FROM ...

WHERE [NOT] IN...

SELECT ... FROM ...

WHERE [NOT] IN...

SELECT * FROM table1

UNION

SELECT * FROM table2

EXCEPT

SELECT * FROM table3

SELECT * FROM table1

UNION ALL

(

SELECT * FROM table2

EXCEPT

SELECT * FROM table3

)


Hinweis: BigQuery benötigt Klammern, um verschiedene Set-Vorgänge zu trennen. Wenn derselbe Set-Operator wiederholt wird, sind keine Klammern erforderlich.

DML-Syntax

In diesem Abschnitt werden Unterschiede in der Syntax der Datenverwaltungssprache zwischen Snowflake und BigQuery behandelt.

INSERT-Anweisung

Snowflake bietet ein konfigurierbares DEFAULT-Schlüsselwort für Spalten. In BigQuery lautet der DEFAULT-Wert für Spalten mit zulässigen Nullwerten NULL und DEFAULT wird für die erforderlichen Spalten nicht unterstützt. Die meisten Snowflake-INSERT-Anweisungen sind mit BigQuery kompatibel. Die folgende Tabelle enthält Ausnahmen.

Snowflake BigQuery

INSERT [OVERWRITE] INTO table

VALUES [... | DEFAULT | NULL] ...


Hinweis: BigQuery unterstützt nicht das Einfügen von JSON-Objekten mit einer INSERT -Anweisung.

INSERT [INTO] table (column1 [, ...])

VALUES (DEFAULT [, ...])

Hinweis: BigQuery unterstützt keine direkte Alternative zum OVERWRITE von Snowflake. Verwenden Sie stattdessen DELETE.

INSERT INTO table (column1 [, ...]) SELECT... FROM ...

INSERT [INTO] table (column1, [,...])

SELECT ...

FROM ...

INSERT [OVERWRITE] ALL <intoClause> ... INSERT [OVERWRITE] {FIRST | ALL} {WHEN condition THEN <intoClause>}

[...]

[ELSE <intoClause>]

...

Hinweis: <intoClause> steht für die oben aufgeführte Standard-INSERT statement.
In BigQuery werden keine bedingten und unbedingten INSERTs für mehrere Tabellen unterstützt.

BigQuery unterstützt auch das Einfügen von Werten mithilfe einer Unterabfrage (wobei einer der Werte mithilfe einer Unterabfrage berechnet wird), was in Snowflake nicht unterstützt wird. Beispiel:

INSERT INTO table (column1, column2)
VALUES ('value_1', (
  SELECT column2
  FROM table2
))

COPY-Anweisung

Snowflake unterstützt das Kopieren von Daten aus Staging-Dateien in eine vorhandene Tabelle und aus einer Tabelle in eine benannte interne Phase, eine benannte externe Phase und einen externen Speicherort (Amazon S3, Google Cloud Storage oder Microsoft Azure).

BigQuery verwendet nicht den Befehl COPY, um Daten zu laden. Sie können jedoch eines bzw. eine der verschiedenen Nicht-SQL-Tools und -Optionen verwenden, um Daten in BigQuery-Tabellen zu laden. Sie können auch Datenpipeline-Senken verwenden, die in Apache Spark oder Apache Beam bereitgestellt werden, um Daten in BigQuery zu schreiben.

UPDATE-Anweisung

Die meisten Snowflake-UPDATE-Anweisungen sind mit BigQuery kompatibel. Die folgende Tabelle enthält Ausnahmen.

Snowflake BigQuery

UPDATE table SET col = value [,...] [FROM ...] [WHERE ...]

UPDATE table

SET column = expression [,...]

[FROM ...]

WHERE TRUE


Hinweis: Alle UPDATE-Anweisungen in BigQuery erfordern das Schlüsselwort WHERE, gefolgt von einer Bedingung.

DELETE- und TRUNCATE TABLE-Anweisungen

Die Anweisungen DELETE und TRUNCATE TABLE sind beide Möglichkeiten zum Entfernen von Zeilen aus einer Tabelle, ohne dass sich dies auf das Tabellenschema oder die Indexe auswirkt.

In Snowflake werden gelöschte Daten sowohl in DELETE als auch in TRUNCATE TABLE mithilfe der Zeitreisefunktion von Snowflake für die Dauer der Datenaufbewahrung aufbewahrt. Mit DELETE werden jedoch nicht der Verlauf des Ladens externer Dateien und die Lademetadaten gelöscht.

In BigQuery muss die DELETE-Anweisung eine WHERE-Klausel enthalten. Weitere Informationen zu DELETE in BigQuery finden Sie in den BigQuery-DELETE-Beispielen in der DML-Dokumentation.

Snowflake BigQuery

DELETE FROM table_name [USING ...]

[WHERE ...]



TRUNCATE [TABLE] [IF EXISTS] table_name

DELETE [FROM] table_name [alias]

WHERE ...


Hinweis: BigQuery- DELETE -Anweisungen erfordern eine WHERE -Klausel.

MERGE-Anweisung

Die MERGE-Anweisung kann die Vorgänge INSERT, UPDATE und DELETE in einer einzigen „upsert“ -Anweisung kombinieren und die Vorgänge automatisch ausführen. Der MERGE-Vorgang muss mit maximal einer Quellzeile für jede Zielzeile übereinstimmen.

BigQuery-Tabellen sind auf 1.000 DML-Anweisungen pro Tag beschränkt. Daher sollten Sie INSERT-, UPDATE- und DELETE-Anweisungen optimal in einer einzigen MERGE-Anweisung zusammenfassen, wie in der folgenden Tabelle dargestellt:

Snowflake BigQuery

MERGE INTO target USING source ON target.key = source.key WHEN MATCHED AND source.filter = 'Filter_exp' THEN

UPDATE SET target.col1 = source.col1, target.col1 = source.col2,

...


Hinweis: Snowflake unterstützt den Sitzungsparameter ERROR_ON_NONDETERMINISTIC_MERGE für die Verarbeitung nicht deterministischer Ergebnisse.

MERGE target

USING source

ON target.key = source.key

WHEN MATCHED AND source.filter = 'filter_exp' THEN

UPDATE SET

target.col1 = source.col1,

target.col2 = source.col2,

...



Hinweis: Alle Spalten müssen aufgelistet werden, wenn alle Spalten aktualisiert werden.

GET- und LIST-Anweisungen

Mit der Anweisung GET werden Datendateien aus einer der folgenden Snowflake-Phasen in ein lokales Verzeichnis bzw. einen lokalen Ordner auf einem Clientrechner heruntergeladen:

  • Benannte interne Phase
  • Interne Phase für eine bestimmte Tabelle
  • Interne Phase für den aktuellen Nutzer

Die LIST-(LS-)Anweisung gibt eine Liste von Dateien zurück, die in einer der folgenden Snowflake-Phasen bereitgestellt wurden (d. h. von einem lokalen Dateisystem hochgeladen oder aus einer Tabelle entladen):

  • Benannte interne Phase
  • Benannte externe Phase
  • Stufe für eine bestimmte Tabelle
  • Phase für den aktuellen Nutzer

BigQuery unterstützt das Konzept des Staging nicht und hat keine Entsprechungen für GET und LIST.

PUT- und REMOVE-Anweisungen

Mit der PUT-Anweisung werden Datendateien (d. h. Phasen) aus einem lokalen Verzeichnis bzw. Ordner auf einem Clientcomputer in eine der folgenden Snowflake-Phasen hochgeladen:

  • Benannte interne Phase
  • Interne Phase für eine bestimmte Tabelle
  • Interne Phase für den aktuellen Nutzer

Mit der Anweisung REMOVE (RM) werden Dateien entfernt, die in einer der folgenden internen Snowflake-Phasen bereitgestellt wurden:

  • Benannte interne Phase
  • Stufe für eine bestimmte Tabelle
  • Phase für den aktuellen Nutzer

BigQuery unterstützt das Konzept des Staging nicht und hat keine Entsprechungen für PUT und REMOVE.

DDL-Syntax

In diesem Abschnitt werden Unterschiede in der Syntax der Datendefinitionssprache zwischen Snowflake und BigQuery behandelt.

Datenbank-, Schema- und Freigabe-DDL

Die meisten Begriffe in Snowflake stimmen mit denen in BigQuery überein, mit der Ausnahme, dass eine Snowflake-Datenbank dem BigQuery-Dataset ähnelt. Detaillierte Zuordnung der Terminologie von Snowflake zu BigQuery

CREATE DATABASE-Anweisung

Snowflake unterstützt das Erstellen und Verwalten einer Datenbank über Befehle zur Datenbankverwaltung, während BigQuery mehrere Optionen wie die Verwendung der Console, der Befehlszeile, Clientbibliotheken usw. zum Erstellen von Datasets{ bietet. In diesem Abschnitt werden BigQuery-Befehlszeilenbefehle verwendet, die den Snowflake-Befehlen entsprechen, um die Unterschiede hervorzuheben.

Snowflake BigQuery

CREATE DATABASE <name>


Hinweis: Snowflake stellt diese Anforderungen für die Benennung von Datenbanken bereit. Der Name darf nur 255 Zeichen lang sein.

bq mk <name>


Hinweis: BigQuery hat ähnliche Dataset-Benennungsanforderungen wie Snowflake, mit dem Unterschied, dass im Namen 1.024 Zeichen zulässig sind.

CREATE OR REPLACE DATABASE <name>

Das Ersetzen des Datensatzes wird in BigQuery nicht unterstützt.

CREATE TRANSIENT DATABASE <name>

Das Erstellen temporärer Datasets wird in BigQuery nicht unterstützt.

CREATE DATABASE IF NOT EXISTS <name>

Konzept wird in BigQuery nicht unterstützt

CREATE DATABASE <name>

CLONE <source_db>

[ { AT | BEFORE }

( { TIMESTAMP => <timestamp> |

OFFSET => <time_difference> |

STATEMENT => <id> } ) ]

Das Klonen von Datasets wird in BigQuery noch nicht unterstützt.

CREATE DATABASE <name>

DATA_RETENTION_TIME_IN_DAYS = <num>

Zeitreisen auf Datasetebene werden in BigQuery nicht unterstützt. Die Zeitreise für Tabellen- und Abfrageergebnisse wird jedoch unterstützt.

CREATE DATABASE <name>

DEFAULT_DDL_COLLATION = '<collation_specification>'

Die Sortierung in DDL wird in BigQuery nicht unterstützt.

CREATE DATABASE <name>

COMMENT = '<string_literal>'

bq mk \

--description "<string_literal>" \

<name>

CREATE DATABASE <name>

FROM SHARE <provider_account>.<share_name>

Das Erstellen freigegebener Datensätze wird in BigQuery nicht unterstützt. Nutzer können das Dataset jedoch über die Console oder die Benutzeroberfläche freigeben, sobald es erstellt wurde.

CREATE DATABASE <name>

AS REPLICA OF

<region>.<account>.<primary_db_name>

AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }


Hinweis: Snowflake bietet die Option für die automatische Hintergrundwartung von materialisierten Ansichten in der sekundären Datenbank, was in BigQuery nicht unterstützt wird.

bq mk --transfer_config \

--target_dataset = <name> \

--data_source = cross_region_copy \ --params='

{"source_dataset_id":"<primary_db_name>"

,"source_project_id":"<project_id>"

,"overwrite_destination_table":"true"}'

Hinweis: BigQuery unterstützt das Kopieren von Datasets mit dem BigQuery Data Transfer Service. Voraussetzungen für das Kopieren von Datasets

BigQuery bietet auch die folgenden bq mk-Befehlsoptionen, die in Snowflake kein direktes Äquivalent haben:

  • --location <dataset_location>
  • --default_table_expiration <time_in_seconds>
  • --default_partition_expiration <time_in_seconds>

ALTER DATABASE-Anweisung

In diesem Abschnitt werden BigQuery-Befehlszeilenbefehle verwendet, die den Snowflake-Befehlen entsprechen, um die Unterschiede bei ALTER-Anweisungen zu beheben.

Snowflake BigQuery

ALTER DATABASE [ IF EXISTS ] <name> RENAME TO <new_db_name>

Das Umbenennen von Datasets wird in BigQuery nicht unterstützt. Das Kopieren von Datasets ist jedoch möglich.

ALTER DATABASE <name>

SWAP WITH <target_db_name>

Das Austauschen von Datasets wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

SET

[DATA_RETENTION_TIME_IN_DAYS = <num>]

[ DEFAULT_DDL_COLLATION = '<value>']

Die Verwaltung der Datenaufbewahrung und -zusammenstellung auf Dataset-Ebene wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

SET COMMENT = '<string_literal>'

bq update \

--description "<string_literal>" <name>

ALTER DATABASE <name>

ENABLE REPLICATION TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]

Dieses Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

DISABLE REPLICATION [ TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]]

Dieses Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

SET AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }

Dieses Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name> REFRESH

Dieses Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

ENABLE FAILOVER TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]

Dieses Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

DISABLE FAILOVER [ TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]]

Dieses Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

PRIMARY

Dieses Konzept wird in BigQuery nicht unterstützt.

DROP DATABASE-Anweisung

In diesem Abschnitt wird der BigQuery-Befehlszeilenbefehl verwendet, der dem Befehl „Snowflake“ entspricht, um den Unterschied in der DROP-Anweisung zu beheben.

Snowflake BigQuery

DROP DATABASE [ IF EXISTS ] <name>

[ CASCADE | RESTRICT ]


Hinweis: In Snowflake wird eine Datenbank durch das Löschen nicht dauerhaft aus dem System entfernt. Eine Version der gelöschten Datenbank wird für die Anzahl der Tage aufbewahrt, die mit dem Parameter DATA_RETENTION_TIME_IN_DAYS für die Datenbank angegeben ist.

bq rm -r -f -d <name>


Where

Mit -r werden alle Objekte im Dataset entfernt

-f is to skip confirmation for execution

-d steht für Dataset

Hinweis: In BigQuery ist das Löschen eines Datasets endgültig. Außerdem wird die Kaskadenerstellung auf Dataset-Ebene nicht unterstützt, da alle Daten und Objekte im Dataset gelöscht werden.

Snowflake unterstützt auch den Befehl UNDROP DATASET, mit dem die neueste Version eines gelöschten Datensatzes wiederhergestellt wird. Das wird in BigQuery derzeit nicht auf Dataset-Ebene unterstützt.

USE DATABASE-Anweisung

In Snowflake können Sie die Datenbank für eine Nutzersitzung mit dem Befehl USE DATABASE festlegen. So müssen in SQL-Befehlen keine voll qualifizierten Objektnamen mehr angegeben werden. BigQuery bietet keine Alternative zum Befehl „USE DATABASE“ von Snowflake.

SHOW DATABASE-Anweisung

In diesem Abschnitt wird der BigQuery-CLI-Befehl verwendet, der dem Befehl „Snowflake“ entspricht, um den Unterschied in der SHOW-Anweisung zu beheben.

Snowflake BigQuery

SHOW DATABASES


Hinweis: In Snowflake gibt es eine einzige Option, mit der alle Datenbanken aufgelistet und Details zu allen Datenbanken angezeigt werden, einschließlich gelöschter Datenbanken, die sich noch im Aufbewahrungszeitraum befinden.
bq ls --format=prettyjson
und / oder

bq show <dataset_name>


Hinweis: In BigQuery enthält der Befehl „ls“ nur Dataset-Namen und grundlegende Informationen. Der Befehl „einblenden“ enthält Details wie den Zeitstempel der letzten Änderung, ACLs und Labels eines Datasets. In BigQuery finden Sie über das Information Schema weitere Details zu den Datasets.

SHOW TERSE DATABASES


Hinweis: Mit der TERSE-Option ermöglicht Snowflake die Anzeige nur bestimmter Informationen/Felder zu Datasets.
Dieses Konzept wird in BigQuery nicht unterstützt.

SHOW DATABASES HISTORY

Das Konzept der Zeitreise wird in BigQuery nicht auf Datasetebene unterstützt.
SHOW DATABASES

[LIKE '<pattern>']

[STARTS WITH '<name_string>']

Das Filtern von Ergebnissen nach Dataset-Namen wird in BigQuery nicht unterstützt. Das Filtern nach Labels wird jedoch unterstützt.
SHOW DATABASES

LIMIT <rows> [FROM '<name_string>']


Hinweis: In Snowflake wird die Anzahl der Ergebnisse standardmäßig nicht begrenzt. Der Wert für LIMIT darf jedoch 10.000 nicht überschreiten.

bq ls \

--max_results <rows>


Hinweis: Standardmäßig zeigt BigQuery nur 50 Ergebnisse an.

BigQuery bietet auch die folgenden bq-Befehlsoptionen, die in Snowflake kein direktes Äquivalent haben:

  • bq ls --format=pretty: Gibt einfach formatierte Ergebnisse zurück
  • *bq ls -a: *Gibt nur anonyme Datasets zurück (die mit einem Unterstrich beginnen)
  • bq ls --all: Gibt alle Datasets zurück, einschließlich anonymer Datasets
  • bq ls --filter labels.key:value: Gibt Ergebnisse zurück, die nach Dataset-Label gefiltert sind
  • bq ls --d: Ausschlüsse anonymer Datasets aus den Ergebnissen
  • bq show --format=pretty: Gibt detaillierte grundlegend formatierte Ergebnisse für alle Datasets zurück

SCHEMA-Verwaltung

Snowflake bietet mehrere Schemaverwaltungsbefehle ähnlich wie die Befehle zur Datenbankverwaltung. Dieses Konzept zum Erstellen und Verwalten von Schemas wird in BigQuery nicht unterstützt.

Mit BigQuery können Sie jedoch das Schema einer Tabelle angeben, wenn Sie Daten in eine Tabelle laden oder eine leere Tabelle erstellen. Für unterstützte Datenformate können Sie alternativ auch die automatische Schemaerkennung nutzen.

SHARE-Verwaltung

Snowflake bietet mehrere Freigabeverwaltungsbefehle wie die Datenbank- und Schemaverwaltungsbefehle. Das Erstellen und Verwalten von Freigaben wird in BigQuery nicht unterstützt.

DDL für Tabellen, Ansichten und Sequenzen

CREATE TABLE-Anweisung

Die meisten Snowflake-CREATE TABLE-Anweisungen sind mit BigQuery kompatibel, mit Ausnahme der folgenden Syntaxelemente, die in BigQuery nicht verwendet werden:

Snowflake BigQuery

CREATE TABLE table_name

(

col1 data_type1 NOT NULL,

col2 data_type2 NULL,

col3 data_type3 UNIQUE,

col4 data_type4 PRIMARY KEY,

col5 data_type5

)


Hinweis: UNIQUE - und PRIMARY KEY-Einschränkungen sind informativ und werden vom Snowflake-System nicht erzwungen.

CREATE TABLE table_name

(

col1 data_type1 NOT NULL,

col2 data_type2,

col3 data_type3,

col4 data_type4,

col5 data_type5,

)

CREATE TABLE table_name

(

col1 data_type1[,...]

table_constraints

)


Dabei gilt: table_constraints sind:

[UNIQUE(column_name [, ... ])]

[PRIMARY KEY(column_name [, ...])]

[FOREIGN KEY(column_name [, ...])

REFERENCES reftable [(refcolumn)]


Hinweis: UNIQUE - und PRIMARY KEY-Einschränkungen sind informativ und werden vom Snowflake-System nicht erzwungen.

CREATE TABLE table_name

(

col1 data_type1[,...]

)

PARTITION BY column_name

CLUSTER BY column_name [, ...]


Hinweis: BigQuery verwendet keine UNIQUE-, PRIMARY KEY-, FOREIGN- oder KEY-Tabelleneinschränkungen. Um eine ähnliche Optimierung zu erreichen, die diese Einschränkungen während der Abfrageausführung gewährleisten, partitionieren und clustern Sie Ihre BigQuery-Tabellen. CLUSTER BY unterstützt bis zu vier Spalten.

CREATE TABLE table_name

LIKE original_table_name

In diesem Beispiel erfahren Sie, wie Sie mit den INFORMATION_SCHEMA-Tabellen Spaltennamen, Datentypen und NOT NULL-Einschränkungen in eine neue Tabelle kopieren.

CREATE TABLE table_name

(

col1 data_type1

)

BACKUP NO


Hinweis: In Snowflake ist die Einstellung BACKUP NO angegeben, um „Verarbeitungszeit beim Erstellen von Snapshots und Wiederherstellen aus Snapshots zu sparen und Speicherplatz zu reduzieren“.
Die Tabellenoption BACKUP NO wird nicht verwendet oder benötigt, da BigQuery automatisch bis zu 7 Tage an früheren Versionen aller Tabellen speichert, ohne dass sich dies auf die Verarbeitungszeit oder den abgerechneten Speicher auswirkt.

CREATE TABLE table_name

(

col1 data_type1

)

table_attributes


Dabei gilt: table_attributes sind:

[DISTSTYLE {AUTO|EVEN|KEY|ALL}]

[DISTKEY (column_name)]

[[COMPOUND|INTERLEAVED] SORTKEY

(column_name [, ...])]

BigQuery unterstützt das Clustering, sodass Schlüssel in sortierter Reihenfolge gespeichert werden können.

CREATE TABLE table_name

AS SELECT ...

CREATE TABLE table_name

AS SELECT ...

CREATE TABLE IF NOT EXISTS table_name

...

CREATE TABLE IF NOT EXISTS table_name

...

BigQuery unterstützt auch die DDL-Anweisung CREATE OR REPLACE TABLE-Anweisung, mit der eine Tabelle überschrieben wird, wenn sie bereits vorhanden ist.

Die CREATE TABLE-Anweisung von BigQuery unterstützt auch die folgenden Klauseln, für die es kein Snowflake-Äquivalent gibt:

Weitere Informationen zu CREATE TABLE in BigQuery finden Sie in der DDL-Dokumentation unter Beispiele für CREATE TABLE-Anweisungen.

ALTER TABLE-Anweisung

In diesem Abschnitt werden BigQuery-Befehlszeilenbefehle verwendet, die den Snowflake-Befehlen entsprechen, um die Unterschiede in ALTER-Anweisungen für Tabellen hervorzuheben.

Snowflake BigQuery

ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (friendly_name="<new_name>")

ALTER TABLE <name>

SWAP WITH <target_db_name>

Das Austauschen von Tabellen wird in BigQuery nicht unterstützt.

ALTER TABLE <name>

SET

[DEFAULT_DDL_COLLATION = '<value>']

Die Datensortierung für Tabellen wird in BigQuery nicht unterstützt.

ALTER TABLE <name>

SET

[DATA_RETENTION_TIME_IN_DAYS = <num>]

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (expiration_timestamp=<timestamp>)

ALTER TABLE <name>

SET

COMMENT = '<string_literal>'

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (description='<string_literal>')

Darüber hinaus bietet Snowflake Clustering-, Spalten- und Einschränkungsoptionen zum Ändern von Tabellen, die von BigQuery nicht unterstützt werden.

DROP TABLE- und UNDROP TABLE-Anweisungen

In diesem Abschnitt wird der BigQuery-CLI-Befehl verwendet, der dem Befehl „Snowflake“ entspricht, um den Unterschied in den Anweisungen DROP und UNDROP zu beheben.

Snowflake BigQuery

DROP TABLE [IF EXISTS] <table_name>

[CASCADE | RESTRICT]


Hinweis: In Snowflake wird eine Tabelle durch das Löschen nicht dauerhaft aus dem System entfernt. Eine Version der gelöschten Tabelle wird für die Anzahl der Tage aufbewahrt, die mit dem Parameter DATA_RETENTION_TIME_IN_DAYS für die Datenbank angegeben wurde.

bq rm -r -f -d <dataset_name>.<table_name>


Where

-r entfernt alle Objekte im Dataset
-f überspringt die Bestätigung für die Ausführung
-d gibt das Dataset an

Hinweis: In BigQuery ist das Löschen einer Tabelle nicht endgültig, aber ein Snapshot bleibt derzeit nur sieben Tage lang erhalten.

UNDROP TABLE <table_name>

bq cp \ <dataset_name>.<table_name>@<unix_timestamp> <dataset_name>.<new_table_name>


Hinweis: In BigQuery müssen Sie zuerst einen UNIX-Zeitstempel in Millisekunden für die Zeit ermitteln, in der die Tabelle existiert hat. Kopieren Sie die Tabelle dann mit diesem Zeitstempel in eine neue Tabelle. Die neue Tabelle muss einen anderen Namen als die gelöschte Tabelle haben.

CREATE EXTERNAL TABLE-Anweisung

In BigQuery können Sie sowohl permanente als auch temporäre externe Tabellen erstellen und Daten direkt aus den folgenden Quellen abfragen:

In Snowflake können Sie eine permanente externe Tabelle erstellen, bei der bei einer Abfrage Daten aus einer oder mehreren Dateien in einer bestimmten externen Phase gelesen werden.

In diesem Abschnitt wird der BigQuery-CLI-Befehl verwendet, der dem Befehl „Snowflake“ entspricht, um die Unterschiede in der Anweisung CREATE EXTERNAL TABLE zu beheben.

Snowflake BigQuery
CREATE [OR REPLACE] EXTERNAL TABLE

table

((<col_name> <col_type> AS <expr> )

| (<part_col_name> <col_type> AS <part_expr>)[ inlineConstraint ]

[ , ... ] )

LOCATION = externalStage

FILE_FORMAT =

({FORMAT_NAME='<file_format_name>'

|TYPE=source_format [formatTypeOptions]})


Where:

externalStage = @[namespace.]ext_stage_name[/path]


Hinweis: Snowflake ermöglicht das Staging der Dateien mit Daten, die gelesen werden sollen, und legt Optionen für das Format von externen Tabellen fest. Die Snowflake-Formattypen CSV, JSON, AVRO, PARQUET und ORC werden von BigQuery unterstützt, mit Ausnahme des XML-Typs.

[1] bq mk \

--external_table_definition=definition_file \

dataset.table


OR


[2] bq mk \

--external_table_definition=schema_file@source_format={Cloud Storage URI | drive_URI} \

dataset.table


OR


[3] bq mk \

--external_table_definition=schema@source_format = {Cloud Storage URI | drive_URI} \

dataset.table


Hinweis: In BigQuery können Sie eine permanente Tabelle erstellen, die mit Ihrer Datenquelle verknüpft ist, indem Sie eine Tabellendefinitionsdatei [1], eine JSON-Schemadatei [2] oder eine Inline-Schemadefinition [3] verwenden. Das Staging von Dateien zum Lesen und das Angeben von Optionen für den Formattyp werden in BigQuery nicht unterstützt.

CREATE [OR REPLACE] EXTERNAL TABLE [IF EXISTS]

<table_name>

((<col_name> <col_type> AS <expr> )

[ , ... ] )

[PARTITION BY (<identifier>, ...)]

LOCATION = externalStage

[REFRESH_ON_CREATE = {TRUE|FALSE}]

[AUTO_REFRESH = {TRUE|FALSE}]

[PATTERN = '<regex_pattern>']

FILE_FORMAT = ({FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET} [ formatTypeOptions]})

[COPY GRANTS]

[COMMENT = '<string_literal>']

bq mk \

--external_table_definition=definition_file \

dataset.table


Hinweis: BigQuery unterstützt derzeit keine der optionalen Parameteroptionen von Snowflake zum Erstellen externer Tabellen. Für die Partitionierung wird in BigQuery die Pseudospalte _FILE_NAME unterstützt, um partitionierte Tabellen/Ansichten über den externen Tabellen zu erstellen. Weitere Informationen finden Sie unter _FILE_NAME-Pseudospalte abfragen.

Darüber hinaus unterstützt BigQuery auch das Abfragen extern partitionierter Daten in den Formaten AVRO, PARQUET, ORC, JSON und CSV, die die auf Google Cloud Storage gespeichert sind und ein Standardlayout für Hive-Partitionierung. verwenden.

CREATE VIEW-Anweisung

Die folgende Tabelle zeigt Entsprechungen zwischen Snowflake und BigQuery für die Anweisung CREATE VIEW.

Snowflake BigQuery

CREATE VIEW view_name AS SELECT ...

CREATE VIEW view_name AS SELECT ...

CREATE OR REPLACE VIEW view_name AS SELECT ...

CREATE OR REPLACE VIEW

view_name AS SELECT ...

CREATE VIEW view_name

(column_name, ...)

AS SELECT ...

CREATE VIEW view_name

AS SELECT ...

Nicht unterstützt CREATE VIEW IF NOT EXISTS

view_name

OPTIONS(view_option_list)

AS SELECT ...

CREATE VIEW view_name

AS SELECT ...

WITH NO SCHEMA BINDING

In BigQuery müssen alle referenzierten Objekte bereits vorhanden sein, um eine Ansicht zu erstellen.

Mit BigQuery können Sie externe Datenquellen abfragen.

CREATE SEQUENCE-Anweisung

Sequenzen werden in BigQuery nicht verwendet und können mit der folgenden Batchmethode erreicht werden. Weitere Informationen zu Ersatzschlüsseln und zu einer langsam ändernden Dimension (SCD) finden Sie in den folgenden Anleitungen:

INSERT INTO dataset.table SELECT *, ROW_NUMBER() OVER () AS id FROM dataset.table

Laden und Entladen von Daten DDL

Snowflake unterstützt das Laden und Entladen von Daten über Befehle zur Verwaltung von Phasen, Dateiformaten und Pipelines. BigQuery bietet auch mehrere Optionen, z. B. zum bq load, BigQuery Data Transfer Service, bq extract usw. In diesem Abschnitt werden die Unterschiede in der Verwendung dieser Methoden zum Laden und Entladen von Daten erläutert.

Konto- und Sitzungs-DDL

Die Konto- und Sitzungskonzepte von Snowflake werden in BigQuery nicht unterstützt. In BigQuery können Konten auf allen Ebenen über Cloud IAM verwaltet werden. Außerdem werden Transaktionen mit mehreren Anweisungen in BigQuery noch nicht unterstützt.

Benutzerdefinierte Funktionen (UDF)

Mit einer UDF können Sie Funktionen für benutzerdefinierte Vorgänge erstellen. Diese Funktionen akzeptieren Spalten als Eingabe, führen Aktionen aus und geben das Ergebnis dieser Aktionen als Wert zurück.

Sowohl Snowflake als auch BigQuery unterstützen UDFs mit SQL-Ausdrücken und JavaScript-Code.

Im GitHub-Repository GoogleCloudPlatform/bigquery-utils/ finden Sie eine Bibliothek gängiger BigQuery-UDFs.

CREATE FUNCTION-Syntax

In der folgenden Tabelle werden die Unterschiede in der SQL-UDF-Erstellungssyntax zwischen Snowflake und BigQuery behandelt.

Snowflake BigQuery

CREATE [ OR REPLACE ] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition

s

CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

AS sql_function_definition


Hinweis: In einer BigQuery-SQL-UDF ist der Rückgabedatentyp optional. BigQuery leitet den Ergebnistyp der Funktion aus dem SQL-Funktionsrumpf ab, wenn eine Abfrage die Funktion aufruft.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS TABLE (col_name, col_data_type[,..])

AS sql_function_definition


CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Hinweis: In BigQuery SQL-UDF wird der zurückgegebene Tabellentyp derzeit nicht unterstützt. Er ist aber in Planung und wird bald verfügbar sein. BigQuery unterstützt jedoch die Rückgabe von ARRAY vom Typ STRUCT.

CREATE [SECURE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Hinweis: Snowflake bietet eine sichere Option zum Einschränken der UDF-Definition und der Details auf autorisierte Nutzer (d. h., auf die Nutzer, denen die Rolle gehört, die die Ansicht besitzt).

CREATE FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Hinweis: Die Sicherheit der Funktion ist in BigQuery kein konfigurierbarer Parameter. In BigQuery können Sie IAM-Rollen und -Berechtigungen erstellen, um den Zugriff auf die zugrunde liegenden Daten und die Funktionsdefinition einzuschränken.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Hinweis: Das Verhalten von Funktionen bei Nulleingabe wird in BigQuery implizit verarbeitet und muss nicht als separate Option angegeben werden.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[VOLATILE | IMMUTABLE]

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Hinweis: Die Volatilität der Funktion ist in BigQuery kein konfigurierbarer Parameter. Die gesamte BigQuery-UDF-Volatilität entspricht der IMMUTABLE-Volatilität von Snowflake (d.0h., sie führt keine Datenbanksuche durch und verwendet keine Informationen, die nicht direkt in der Argumentliste vorhanden sind).

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS [' | $$]

sql_function_definition

[' | $$]

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Hinweis: Die Verwendung von einfachen Anführungszeichen oder einer Zeichensequenz wie Dollarzeichen ($$) is not required or supported in BigQuery. BigQuery implicitly interprets the SQL expression.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[COMMENT = '<string_literal>']

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


Note:Adding comments or descriptions in UDFs is currently not supported in BigQuery.

CREATE [OR REPLACE] FUNCTION function_name

(x integer, y integer)

RETURNS integer

AS $$

SELECT x + y

$$


Note: Snowflake does not support ANY TYPE for SQL UDFs. However, it supports using VARIANT data types.

CREATE [OR REPLACE] FUNCTION function_name

(x ANY TYPE, y ANY TYPE)

AS

SELECT x + y



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 EXISTSstatement which treats the query as successful and takes no action if a function with the same name already exists.

BigQuery's CREATE FUNCTIONstatement 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

DROP FUNCTION [IF EXISTS]

function_name

([arg_data_type, ... ])

DROP FUNCTION [IF EXISTS] dataset_name.function_name


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

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

AS procedure_definition;


Note: Snowflake requires that stored procedures return a single value. Hence, return data type is a required option.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_mode arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


arg_mode: IN | OUT | INOUT


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

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

AS

$$

javascript_code

$$;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

statement_list

END;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[{CALLED ON NULL INPUT | {RETURNS NULL ON NULL INPUT | STRICT}}]

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


Hinweis: Das Verhalten von Prozeduren bei Nulleingabe wird in BigQuery implizit verarbeitet und muss nicht als separate Option angegeben werden.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[VOLATILE | IMMUTABLE]

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


Hinweis: Die Volatilität der Prozedur ist in BigQuery kein konfigurierbarer Parameter. Sie entspricht der IMMUTABLE-Volatilität von Snowflake.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[COMMENT = '<string_literal>']

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


Hinweis: Das Hinzufügen von Kommentaren oder Beschreibungen in Prozedurdefinitionen wird derzeit in BigQuery nicht unterstützt.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[EXECUTE AS { CALLER | OWNER }]

AS procedure_definition;


Hinweis: In Snowflake kann der Aufrufer oder Eigentümer des Verfahrens für die Ausführung angegeben werden.

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


Hinweis: Gespeicherte BigQuery-Prozeduren werden immer als Aufrufer ausgeführt.

BigQuery unterstützt auch die Anweisung CREATE PROCEDURE IF NOT EXISTS, die die Abfrage als erfolgreich behandelt und keine Aktion ausführt, wenn bereits eine Funktion mit demselben Namen vorhanden ist.

DROP PROCEDURE-Syntax

In der folgenden Tabelle werden die Unterschiede in der DROP FUNCTION-Syntax zwischen Snowflake und BigQuery behandelt.

Snowflake BigQuery

DROP PROCEDURE [IF EXISTS]

procedure_name

([arg_data_type, ... ])

DROP PROCEDURE [IF EXISTS] dataset_name.procedure_name


Hinweis: BigQuery erfordert zum Löschen der Prozedur nicht die Signatur der Prozedur (Argumentdatentyp).

BigQuery erfordert, dass Sie project_name angeben, wenn sich die Prozedur nicht im aktuellen Projekt befindet.

Zusätzliche Befehle für Abläufe

Snowflake bietet zusätzliche Befehle wie ALTER PROCEDURE, DESC[RIBE] PROCEDURE und SHOW PROCEDURES zum Verwalten der gespeicherten Prozeduren. Sie werden derzeit in BigQuery nicht unterstützt.

Metadaten- und Transaktions-SQL-Anweisungen

Snowflake BigQuery

BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]; START_TRANSACTION [ name <name> ];

BigQuery verwendet immer die Snapshot-Isolation. Weitere Informationen finden Sie an anderer Stelle in diesem Dokument unter Konsistenzgarantien.

COMMIT;

Wird in BigQuery nicht verwendet.

ROLLBACK;

Wird in BigQuery nicht verwendet.

SHOW LOCKS [ IN ACCOUNT ]; SHOW TRANSACTIONS [ IN ACCOUNT ]; Note: If the user has the ACCOUNTADMIN role, the user can see locks/transactions for all users in the account.

Wird in BigQuery nicht verwendet.

Mehrfachanweisungen und mehrzeilige SQL-Anweisungen

Sowohl Snowflake als auch BigQuery unterstützen Transaktionen (Sitzungen) und unterstützen daher durch Semikolons getrennte Anweisungen, die konsistent zusammen ausgeführt werden. Weitere Informationen finden Sie unter Transaktionen mit mehreren Anweisungen.

Metadatenspalten für bereitgestellte Dateien

Snowflake generiert automatisch Metadaten für Dateien in internen und externen Phasen. Diese Metadaten können zusammen mit regulären Datenspalten abgefragt und in eine Tabelle geladen werden. Die folgenden Metadatenspalten können verwendet werden:

Konsistenzgarantien und Transaktionsisolation

Sowohl Snowflake als auch BigQuery sind unteilbar, d. h. ACID-konform auf Mutationsebene über viele Zeilen hinweg.

Transaktionen

Jedem Snowflake-Transaktion wird eine eindeutige Startzeit (einschließlich Millisekunden) zugewiesen, die als Transaktions-ID festgelegt wird. Snowflake unterstützt nur die Isolationsebene READ COMMITTED. Eine Anweisung kann jedoch Änderungen sehen, die von einer anderen Anweisung vorgenommen wurden, wenn sich beide in derselben Transaktion befinden, auch wenn diese Änderungen noch nicht bestätigt wurden. Snowflake-Transaktionen erwerben Sperren für Ressourcen (Tabellen), wenn diese geändert werden. Nutzer können die maximale Wartezeit für eine blockierte Anweisung anpassen, bis die Anweisung abläuft. DML-Anweisungen werden automatisch verbindlich, wenn der Parameter AUTOCOMMIT aktiviert ist.

BigQuery unterstützt auch Transaktionen. BigQuery sorgt mit der Snapshot-Isolation für eine optimistische Gleichzeitigkeitserkennung (der erste Commit erhält Vorrang), bei der eine Abfrage die letzten übergebenen Daten liest, bevor die Abfrage beginnt. Dieser Ansatz sorgt für die gleiche Konsistenz auf Zeilen- und Mutationsbasis sowie zeilenübergreifend innerhalb derselben DML-Anweisung, vermeidet dabei jedoch Deadlocks. Bei mehreren DML-Aktualisierungen für dieselbe Tabelle wechselt BigQuery zur pessimistischen Nebenläufigkeitserkennung. Ladejobs können vollständig unabhängig ausgeführt und an Tabellen angefügt werden. BigQuery bietet jedoch noch keine explizite Transaktionsgrenze oder Sitzung.

Rollback

Wenn die Sitzung einer Snowflake-Transaktion unerwartet beendet wird, bevor die Transaktion festgeschrieben oder zurückgesetzt wurde, bleibt sie im getrennten Zustand. Der Nutzer sollte SYSTEM$ABORT_TRANSACTION ausführen, um die getrennte Transaktion abzubrechen. Andernfalls wird sie von Snowflake nach vier Stunden Inaktivität zurückgerollt. Wenn ein Deadlock auftritt, erkennt Snowflake dies und wählt die aktuellere Anweisung zum Zurückrollen aus. Wenn die DML-Anweisung in einer explizit geöffneten Transaktion fehlschlägt, werden die Änderungen rückgängig gemacht, die Transaktion bleibt jedoch geöffnet, bis sie committet oder rückgängig gemacht wird. Für DDL-Anweisungen in Snowflake kann kein Rollback durchgeführt werden, da für sie automatisch ein Commit durchgeführt wird.

BigQuery unterstützt die Anweisung ROLLBACK TRANSACTION. In BigQuery gibt es keine ABORT-Anweisung.

Datenbanklimits

Die aktuellen Kontingente und Limits finden Sie immer in der öffentlichen BigQuery-Dokumentation . Viele Kontingente für Nutzer mit hohem Datenvolumen können durch Kontaktaufnahme mit dem Cloud-Supportteam erhöht werden.

Für alle Snowflake-Konten sind standardmäßig Softlimits festgelegt. Die Softlimits werden beim Erstellen des Kontos festgelegt und können variieren. Viele Snowflake-Softlimits können über das Snowflake-Kontoteam oder ein Supportticket erhöht werden.

Die folgende Tabelle zeigt einen Vergleich der Snowflake- und BigQuery-Datenbanklimits.

Limit Snowflake BigQuery
Größe des Abfragetexts 1 MB 1 MB
Maximale Anzahl gleichzeitiger Abfragen XS Warehouse - 8
S Warehouse - 16
M Warehouse - 32
L Warehouse - 64
XL Warehouse - 128
100