Leitfaden zur SQL-Übersetzung von Snowflake

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 Vorschau 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, stellen einen Alias für den Datentyp NUMBER dar, wobei Genauigkeit und Skalierung nicht angegeben werden können und immer NUMBER(38, 0) sind
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 synonym mit dem Datentyp FLOAT in Snowflake, wird jedoch 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 Standardlä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 ist synonym mit 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 vom Nutzer konfigurierbarer Alias, der standardmäßig TIMESTAMP_NTZ entspricht, der 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 Typ ARRAY 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 -Kennungen wird standardmäßig die Groß-/Kleinschreibung nicht berücksichtigt. Um die Groß- und Kleinschreibung beizubehalten, setzen Sie Aliasse und Kennungen in doppelte Anführungszeichen (").

BigQuery unterstützt die folgenden Ausdrücke in SELECT-Anweisungen, die kein Snowflake-Äquivalent haben:

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 7 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 folgenden Befehl 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-WHERE-Klausel und die BigQuery-WHERE-Klausel 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 ist ein CROSS JOIN 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 verhalten sich wie BigQuery, mit der Ausnahme, dass BigQuery WITH RECURSIVE nicht unterstützt.

GROUP BY-Klausel

Snowflake-GROUP BY-Klauseln unterstützen GROUP BY, GROUP BY ROLLUP, GROUP BY GROUPING SETS und GROUP BY CUBE, während BigQuery-GROUP BY-Klauseln GROUP BY und GROUP BY ROLLUP unterstützen.

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

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.
BigQuery unterstützt keine direkte Alternative zu den GROUP BY GROUPING SETS von Snowflake.

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)
BigQuery unterstützt keine direkte Alternative zu den GROUP BY CUBE von Snowflake.

ORDER BY-Klausel

Es gibt einige geringfügige 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 oder NULLS LAST angeben, ob NULL-Werte zuerst oder zuletzt sortiert werden sollen. Es gibt kein Äquivalent, um festzulegen, ob NULL-Werte an erster oder letzter Stelle in BigQuery stehen sollen.

LIMIT/FETCH-Klausel

Die LIMIT/FETCH-Klausel in Snowflake beschränkt die maximale Anzahl von Zeilen, die von einer Anweisung oder 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 die Menge 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. 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, den INT64-Wert count auf die mindestens erforderlichen geordneten Zeilen festzulegen, um eine optimale 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(), wodurch größere Partitionen unterstützt werden:

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: BigQuery unterstützt APPROX_COUNT_DISTINCT mit Fensterfunktionen nicht.

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


Hinweis: Snowflake hat nicht die Möglichkeit, RESPECT NULLS zu verwenden.

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


Hinweis: BigQuery unterstützt APPROX_QUANTILES mit Fensterfunktionen nicht.

APPROX_PERCENTILE_ACCUMULATE (expression)

BigQuery unterstützt nicht die Möglichkeit, einen Zwischenzustand zu speichern, wenn ungefähre Werte vorhergesagt werden.

APPROX_PERCENTILE_COMBINE(state)

BigQuery unterstützt nicht die Möglichkeit, einen Zwischenzustand zu speichern, wenn ungefähre Werte vorhergesagt werden.

APPROX_PERCENTILE_ESTIMATE(state, percentile)

BigQuery unterstützt nicht die Möglichkeit, einen Zwischenzustand zu speichern, wenn ungefähre Werte vorhergesagt werden.

APPROX_TOP_K(expression, [number [counters]]


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

APPROX_TOP_COUNT(expression, number)


Hinweis: BigQuery unterstützt APPROX_TOP_COUNT mit Fensterfunktionen nicht.

APPROX_TOP_K_ACCUMULATE(expression, counters)

BigQuery unterstützt nicht die Möglichkeit, einen Zwischenzustand zu speichern, wenn ungefähre Werte vorhergesagt werden.

APPROX_TOP_K_COMBINE(state, [counters])

BigQuery unterstützt nicht die Möglichkeit, einen Zwischenzustand zu speichern, wenn ungefähre Werte vorhergesagt werden.

APPROX_TOP_K_ESTIMATE(state, [k])

BigQuery unterstützt nicht die Möglichkeit, einen Zwischenzustand zu speichern, wenn ungefähre Werte vorhergesagt werden.

APPROXIMATE_JACCARD_INDEX([DISTINCT] expression)


Sie können eine benutzerdefinierte UDF verwenden, um MINHASH mit k verschiedenen Hash-Funktionen zu implementieren. Ein weiterer Ansatz zur Reduzierung der Varianz in MINHASH besteht darin,
k bei den Mindestwerten 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)


Dies ist ein Synonym für APPROXIMATE_JACCARD_INDEX und kann auf die gleiche 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 von BigQuery führt kein automatisches Umwandeln für STRINGs durch.

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: Snowflake ermöglicht die Behandlung numerischer, Dezimal- und Gleitkommawerte als TRUE, wenn nicht null.

LOGICAL_AND(expression)

[OVER ...]

BOOLOR_AGG(expression)

[OVER ...]


Hinweis: Snowflake ermöglicht die Behandlung numerischer, Dezimal- und Gleitkommawerte als TRUE, wenn nicht null.

LOGICAL_OR(expression)

[OVER ...]

BOOLXOR_AGG(expression)

[OVER ([PARTITION BY <partition_expr> ])


Hinweis: Snowflake ermöglicht die Behandlung numerischer, Dezimal- und Gleitkommawerte als TRUE, wenn nicht null.
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 das folgende boolesche Beispiel ausführen:

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 die Genauigkeit nicht angeben.

SELECT HLL_COUNT.EXTRACT(sketch) FROM (

SELECT HLL_COUNT.INIT(expression)

AS sketch FROM table )


Hinweis: BigQuery unterstützt HLL_COUNT… nicht mit Fensterfunktionen. Ein Nutzer kann nicht mehrere Ausdrücke in einer einzelnen HLL_COUNT...-Funktion zusammenfassen.

HLL_ACCUMULATE([DISTINCT] expression)


Hinweis: In Snowflake können Sie die Genauigkeit nicht angeben.
HLL_COUNT.INIT(Ausdruck [, Genauigkeit])

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)

Sie können eine benutzerdefinierte UDF verwenden, um MINHASH mit k verschiedenen Hash-Funktionen zu implementieren. Ein weiterer Ansatz zur Reduzierung der Varianz in MINHASH besteht darin, die Mindestwerte einer Hash-Funktion für k beizubehalten: SELECT DISTINCT
FARM_FINGERPRINT(
TO_JSON_STRING(t)) AS MINHASH

FROM t

ORDER BY MINHASH

LIMIT k

MINHASH_COMBINE([DISTINCT] state)

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 zu konvertieren.

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: Snowflake unterstützt die Möglichkeit, VARCHARs in Gleitkommawerte umzuwandeln.

VAR_POP([DISTINCT] expression)

[OVER ...]

VARIANCE_POP([DISTINCT] expression)

[OVER ...]


Hinweis: Snowflake unterstützt die Möglichkeit, VARCHARs in Gleitkommawerte umzuwandeln.

VAR_POP([DISTINCT] expression)

[OVER ...]

VAR_SAMP([DISTINCT] expression)

[OVER ...]


Hinweis: Snowflake unterstützt die Möglichkeit, VARCHARs in Gleitkommawerte umzuwandeln.

VAR_SAMP([DISTINCT] expression)

[OVER ...]

VARIANCE([DISTINCT] expression)

[OVER ...]


Hinweis: Snowflake unterstützt die Möglichkeit, VARCHARs in Gleitkommawerte umzuwandeln.

VARIANCE([DISTINCT] expression)

[OVER ...]

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

Bitweise Ausdrucksfunktionen

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, in INTEGER umzuwandeln. BigQuery versucht jedoch nicht, in INTEGER umzuwandeln.

Snowflake BigQuery

BITAND(expression1, expression2)

BIT_ADD(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: Snowflake unterstützt DISTINCT. nicht.

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: Snowflake ermöglicht die Behandlung numerischer, Dezimal- und Gleitkommawerte als TRUE, wenn nicht null.

LOGICAL_AND(x)

FROM UNNEST([expression1, expression2]) AS x


expression1 AND expression2

BOOLNOT(expression1)


Hinweis: Snowflake ermöglicht die Behandlung numerischer, Dezimal- und Gleitkommawerte als TRUE, wenn nicht null.

NOT expression

BOOLOR

Hinweis: Snowflake ermöglicht die Behandlung numerischer, Dezimal- und Gleitkommawerte als TRUE, wenn nicht null.

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


expression1 OR expression2

BOOLXOR

Hinweis: Snowflake ermöglicht die Behandlung numerischer, Dezimal- und Gleitkommawerte als TRUE, wenn nicht null.
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: Snowflake benötigt mindestens zwei Ausdrücke. 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. Damit kann DECODE von Snowflake reproduziert werden. 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)

BigQuery unterstützt keine VARIANT-Datentypen.

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 gibt die E-Mail-Adresse des Nutzers zurück.

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: CURRENT_DATE von BigQuery unterstützt die optionale Zeitzonenspezifikation.

CURRENT_REGION()

SELECT location

FROM INFORMATION_SCHEMA.SCHEMATA


Hinweis: INFORMATION_SCHEMA.SCHEMATA von BigQuery gibt allgemeinere Standortreferenzen zurück als CURRENT_REGION() von 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 aller Datasets zurückgegeben, die auch im Projekt oder in der Region verfügbar sind. Kein direkter Vergleich.

CURRENT_SCHEMAS()

In BigQuery nicht verwendetes Konzept

CURRENT_SESSION()

In BigQuery nicht verwendetes Konzept

CURRENT_STATEMENT()

SELECT query

FROM INFORMATION_SCHEMA.JOBS_BY_*


Hinweis: INFORMATION_SCHEMA.JOBS_BY_* in BigQuery ermöglicht die Suche nach Abfragen nach Jobtyp, Start-/Endtyp usw.

CURRENT_TIME[([frac_sec_prec])]


Hinweis: Snowflake ermöglicht eine optionale Genauigkeit im Bruchteil 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 im Bruchteil 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 (in Snowflake nicht unterstützt). CURRENT_TIMESTAMP gibt den Datentyp TIMESTAMP zurück.

CURRENT_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*

Hinweis: Mit INFORMATION_SCHEMA.JOBS_BY_* von BigQuery können Sie 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 Nutzernamen zurück. BigQuery gibt die E-Mail-Adresse des Nutzers zurück.

CURRENT_VERSION()

In BigQuery nicht verwendetes Konzept

CURRENT_WAREHOUSE()

SELECT catalg_name

FROM INFORMATION_SCHEMA.SCHEMATA

LAST_QUERY_ID([num])

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


Hinweis: INFORMATION_SCHEMA.JOBS_BY_* von BigQuery ermöglicht die Suche nach Job-IDs nach Jobtyp, Start-/Endtyp usw.

LAST_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


Hinweis: INFORMATION_SCHEMA.JOBS_BY_* von BigQuery ermöglicht die Suche nach Job-IDs nach Jobtyp, Start-/Endtyp usw.

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 (in Snowflake nicht unterstützt). 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 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: Die standardmäßige STRING-Umwandlung von BigQuery verwendet die UTF-8-Codierung. Snowflake bietet keine Option zur Unterstützung der 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 hier. 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: Snowflake unterstützt die Möglichkeit, INTEGER-Typen direkt in DATE-Typen zu konvertieren. Die Formatmodelle von Snowflake finden Sie hier. BigQuery hat keine Alternative zum Datentyp VARIANT.

CAST(expression AS DATE)


Hinweis: Der Eingabeausdruck von 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 Eingabeausdruck von BigQuery 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 hat keine Alternative zum Datentyp VARIANT.

CAST(expression AS TIMESTAMP)


Hinweis: Der Eingabeausdruck von BigQuery kann mit FORMAT, FORMAT_DATE, FORMAT_DATETIME, 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 auch die folgenden Konvertierungsfunktionen, die in Snowflake keine direkte Entsprechung haben:

Datengenerierungsfunktionen

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Snowflake-Datengenerierungsfunktionen 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 kein Seeding.

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:Verwenden Sie persistente UDFs, um ein Äquivalent zum UNIFORM von Snowflake zu 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 Datums- und Uhrzeitfunktionen von Snowflake 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 den Ü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. Die 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. Die 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: Snowflake unterstützt in dieser Funktion die Berechnung der Differenz zwischen zwei Datums-, Uhrzeit- und Zeitstempeltypen.

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. Die 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: dowString muss möglicherweise neu formatiert werden. Zum Beispiel ist „su“ von Snowflake der „SUNDAY“ von BigQuery.

PREVIOUS_DAY(dateOrTime, dowString)

DATE_TRUNC(

date,

WEEK(dowString)

)


Hinweis: dowString muss möglicherweise 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. BigQuery unterstützt keine Nanosekunden.

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, TIMESTAMP_TRUNC für den entsprechenden Datentyp.

TIMEADD(part, value, dateOrTime)

TIME_ADD(time, INTERVAL value part)

TIMEDIFF(

part,

expression1,

expression2,

)


Hinweis: Snowflake unterstützt in dieser Funktion die Berechnung der Differenz zwischen zwei Datums-, Uhrzeit- und Zeitstempeltypen.

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: Für 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: Snowflake unterstützt in dieser Funktion die Berechnung der Differenz zwischen zwei Datums-, Uhrzeit- und Zeitstempeltypen.

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. Die 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

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

Nachfolgend 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 Informationsschema- und Tabellenfunktionen, die in Snowflake keine direkte Entsprechung haben:

Numerische Funktionen

Die folgende Tabelle zeigt Zuordnungen zwischen gängigen numerischen Funktionen von Snowflake 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 synonym für positive Zahlen, aber nicht für negative Zahlen, da der absolute Wert ausgewertet wird.

HAVERSINE(lat1, lon1, lat2, lon2)

ST_DISTANCE( ST_GEOGPOINT(lon1, lat1),

ST_GEOGPOINT(lon2, lat2)

)/1000


Hinweis: Keine genaue Übereinstimmung, aber nah genug.

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 auch die folgenden mathematischen Funktionen, die in Snowflake keine direkte Entsprechung haben:

semistrukturierte Datenfunktionen

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 Benutzerdefinierte Funktion
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

Dienstprogramm- und Hash-Funktionen

Snowflake BigQuery
GET_DDL Funktionsanfrage
HASH HASH ist eine proprietäre Funktion von Snowflake. Kann nur übersetzt werden, wenn die zugrunde liegende Logik von Snowflake bekannt ist.

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äres Minus, 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)

Informationen zur Anzeige der Skalierungs- und Genauigkeitsdetails von Snowflake bei der Durchführung arithmetischer Operationen finden Sie in der Dokumentation zu Snowflake.

Vergleichsoperator

Vergleichsoperatoren von Snowflake und Vergleichsoperatoren für BigQuery sind identisch.

Logische/boolesche Operatoren

logical/boolean operators von Snowflake und logical/boolean operators 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 ...

Unterabfrageoperatoren

Die folgende Tabelle zeigt Zuordnungen zwischen den Unterabfrageoperatoren 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 den 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 das Einfügen von JSON-Objekten mit einer INSERT -Anweisung. nicht.

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 den oben aufgeführten Standard-INSERT statement.
BigQuery unterstützt kein bedingtes und bedingungsfreies INSERTs mit mehreren Tabellen.

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 verwalten sowohl DELETE als auch TRUNCATE TABLE gelöschte Daten mithilfe der Zeitreise von Snowflake zur Wiederherstellung für die Aufbewahrungsdauer. DELETE löscht jedoch nicht den externen Dateiladeverlauf und die Lademetadaten.

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, um nicht deterministische Ergebnisse zu verarbeiten.

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 angegebene 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
  • Staging für eine bestimmte Tabelle
  • Phase für den aktuellen Nutzer

BigQuery unterstützt das Konzept des Stagings 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 angegebene Tabelle
  • Interne Phase für den aktuellen Nutzer

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

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

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

DDL-Syntax

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

Datenbank, Schema und DDL freigeben

Der Großteil der Snowflake-Terminologie entspricht der von BigQuery, mit der Ausnahme, dass die Snowflake-Datenbank dem BigQuery-Dataset ähnelt. Weitere Informationen finden Sie in der detaillierten Zuordnung der Snowflake zu BigQuery-Terminologie.

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 Datasets wird in BigQuery nicht unterstützt.

CREATE TRANSIENT DATABASE <name>

Das Erstellen eines temporären 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 Dataset-Ebene werden in BigQuery nicht unterstützt. Zeitreisen für Tabellen- und Abfrageergebnisse werden 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 Datasets wird in BigQuery nicht unterstützt. Nutzer können das Dataset jedoch über die Console/Benutzeroberfläche freigeben, sobald das Dataset 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, die 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. Hier finden Sie weitere Informationen zu einem Dataset, das Voraussetzungen kopiert.

BigQuery bietet auch die folgenden bq mk-Befehlsoptionen, die keine direkte Entsprechung in Snowflake haben:

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

ALTER DATABASE-Anweisung

In diesem Abschnitt werden BigQuery-CLI-Befehle verwendet, die den Snowflake-Befehlen entsprechen, um die Unterschiede in 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 wird jedoch unterstützt.

ALTER DATABASE <name>

SWAP WITH <target_db_name>

Der Austausch 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 -sortierung 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> ... ]

Das Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

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

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

Das Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

SET AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }

Das Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name> REFRESH

Das Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

ENABLE FAILOVER TO ACCOUNTS <snowflake_region>.<account_name>

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

Das Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

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

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

Das Konzept wird in BigQuery nicht unterstützt.

ALTER DATABASE <name>

PRIMARY

Das 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: Durch das Löschen einer Datenbank in Snowflake wird sie nicht dauerhaft aus dem System entfernt. Eine Version der verworfenen Datenbank wird für die Anzahl der Tage aufbewahrt, die durch den Parameter DATA_RETENTION_TIME_IN_DAYS für die Datenbank angegeben sind.

bq rm -r -f -d <name>


Where

-r werden alle Objekte im Dataset entfernt

-f is to skip confirmation for execution

-d gibt ein Dataset an

Hinweis: In BigQuery ist das Löschen eines Datasets endgültig. Außerdem wird die Kaskadierung 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 verworfenen Datasets wiederhergestellt wird. Dies wird derzeit in BigQuery auf Dataset-Ebene nicht unterstützt.

USE DATABASE-Anweisung

Snowflake bietet die Möglichkeit, die Datenbank für eine Nutzersitzung mit dem Befehl USE DATABASE festzulegen. Dadurch müssen Sie in SQL-Befehlen keine voll qualifizierten Objektnamen angeben. BigQuery bietet keine Alternative zum USE-DATABASE-Befehl 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: Snowflake bietet eine einzige Option zum Auflisten und Anzeigen von Details zu allen Datenbanken, einschließlich verworfener Datenbanken, die sich innerhalb der Aufbewahrungsdauer 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. BigQuery stellt außerdem über das Informationsschema weitere Details zu den Datasets bereit.

SHOW TERSE DATABASES


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

SHOW DATABASES HISTORY

Das Zeitreisekonzept wird in BigQuery auf Dataset-Ebene nicht 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: Standardmäßig begrenzt Snowflake die Anzahl der Ergebnisse nicht. 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 keine direkte Entsprechung 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: Schließt anonyme Datasets aus Formularergebnissen aus
  • 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. Das 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. Dieses Konzept zum Erstellen und Verwalten einer Freigabe wird in BigQuery nicht unterstützt.

Tabellen-, Ansichts- und Sequenz-DDL

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 informationell 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 informationell 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 den BigQuery CREATE-Beispielen in der DML-Dokumentation.

ALTER TABLE-Anweisung

In diesem Abschnitt werden BigQuery-CLI-Befehle verwendet, die den Snowflake-Befehlen entsprechen, um die Unterschiede in ALTER-Anweisungen für Tabellen zu beheben.

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>

Der Austausch von Tabellen wird in BigQuery nicht unterstützt.

ALTER TABLE <name>

SET

[DEFAULT_DDL_COLLATION = '<value>']

Die Verwaltung der 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: Durch das Löschen einer Tabelle in Snowflake wird sie nicht dauerhaft aus dem System entfernt. Eine Version der verworfenen Tabelle wird für die Anzahl der Tage aufbewahrt, die durch den Parameter DATA_RETENTION_TIME_IN_DAYS für die Datenbank angegeben sind.

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, zu 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

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

Snowflake ermöglicht das Erstellen einer permanenten externen Tabelle, die bei der Abfrage Daten aus einer Reihe von einer oder mehreren Dateien in einer angegebenen externen Phase liest.

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 mit Ausnahme des XML-Typs von BigQuery unterstützt.

[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 zu lesenden Dateien und die Angabe von Optionen für das Format 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 unterstützt BigQuery die Verwendung der Pseudospalte _FILE_NAME, um partitionierte Tabellen/Ansichten über den externen Tabellen zu erstellen. Weitere Informationen finden Sie unter Pseudospalte _FILE_NAME 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 Phasen-, Dateiformat- und Pipe-Verwaltungsbefehle. BigQuery bietet auch mehrere Optionen, z. B. zum Laden von bq, BigQuery Data Transfer Service, bq-Extraktion 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. BigQuery ermöglicht die Verwaltung von Konten über Cloud IAM auf allen Ebenen. Außerdem werden Transaktionen mit mehreren Anweisungen in BigQuery noch nicht unterstützt.

Benutzerdefinierte Funktionen (UDF)

Mithilfe 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 UDF mit SQL-Ausdrücken und JavaScript-Code.

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

CREATE FUNCTION-Syntax

Die folgende Tabelle befasst sich mit den Unterschieden in der SQL-UDF-Erstellungssyntax zwischen Snowflake und BigQuery.

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 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 ARRAYs 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. BigQuery unterstützt das Erstellen von IAM-Rollen und -Berechtigungen, um den Zugriff auf die zugrunde liegenden Daten und Funktionsdefinitionen 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 der Funktion bei Nulleingaben wird implizit in BigQuery 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 ($$) ist in BigQuery nicht erforderlich oder wird nicht unterstützt. BigQuery interpretiert den SQL-Ausdruck implizit.

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


Hinweis: Das Hinzufügen von Kommentaren oder Beschreibungen in UDFs wird derzeit in BigQuery nicht unterstützt.

CREATE [OR REPLACE] FUNCTION function_name

(x integer, y integer)

RETURNS integer

AS $$

SELECT x + y

$$


Hinweis: Snowflake unterstützt nicht ANY TYPE für SQL-UDFs. Die Verwendung von VARIANT-Datentypen wird jedoch unterstützt.

CREATE [OR REPLACE] FUNCTION function_name

(x ANY TYPE, y ANY TYPE)

AS

SELECT x + y



Hinweis: BigQuery unterstützt die Verwendung von ANY TYPE als Argumenttyp. Die Funktion akzeptiert für dieses Argument die Eingabe eines beliebigen Typs. Weitere Informationen finden Sie unter Vorlagenparameter in BigQuery.

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

Die CREATE FUNCTION-Anweisung von BigQuery unterstützt auch das Erstellen von TEMPORARY or TEMP functions, für das es kein Snowflake-Äquivalent gibt. Weitere Informationen zum Ausführen einer BigQuery-persistenten UDF finden Sie unter UDFs aufrufen.

DROP FUNCTION-Syntax

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

Snowflake BigQuery

DROP FUNCTION [IF EXISTS]

function_name

([arg_data_type, ... ])

DROP FUNCTION [IF EXISTS] dataset_name.function_name


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

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

Weitere Funktionsbefehle

In diesem Abschnitt werden zusätzliche UDF-Befehle beschrieben, die von Snowflake unterstützt werden und nicht direkt in BigQuery verfügbar sind.

ALTER FUNCTION-Syntax

Snowflake unterstützt die folgenden Vorgänge mit der ALTER FUNCTION-Syntax.

  • Eine UDF umbenennen
  • Konvertieren in eine sichere UDF (oder Wiederherstellen)
  • Kommentar für eine UDF hinzufügen, überschreiben, entfernen

Da die Konfiguration der Funktionssicherheit und das Hinzufügen von Funktionskommentaren in BigQuery nicht verfügbar ist, wird die ALTER FUNCTION-Syntax derzeit nicht unterstützt. Mit der Anweisung CREATE FUNCTION kann jedoch eine UDF mit derselben Funktionsdefinition, aber einem anderen Namen erstellt werden.

DESCRIBE FUNCTION-Syntax

Snowflake unterstützt die Beschreibung einer UDF mit der Syntax DESC[RIBE] FUNCTION. Dies wird derzeit in BigQuery nicht unterstützt. Das Abfragen von UDF-Metadaten über INFORMATION SCHEMA wird jedoch bald im Rahmen der Produkt-Roadmap verfügbar sein.

SHOW USER FUNCTIONS-Syntax

In Snowflake kann die Syntax SHOW USER FUNCTIONS verwendet werden, um alle UDFs aufzulisten, für die Nutzer Zugriffsberechtigungen haben. Dies wird derzeit in BigQuery nicht unterstützt. Das Abfragen von UDF-Metadaten über INFORMATION SCHEMA wird jedoch bald im Rahmen der Produkt-Roadmap verfügbar sein.

Gespeicherte Prozeduren

Gespeicherte Prozeduren von Snowflake sind in JavaScript geschrieben, das SQL-Anweisungen durch Aufrufen einer JavaScript API ausführen kann. In BigQuery werden gespeicherte Prozeduren mithilfe eines Blocks von SQL-Anweisungen definiert.

CREATE PROCEDURE-Syntax

In Snowflake wird eine gespeicherte Prozedur mit einem CALL-Befehl ausgeführt, während in BigQuery gespeicherte Prozeduren wie jede andere BigQuery-Funktion ausgeführt werden.

In der folgenden Tabelle werden die Unterschiede in der Syntax zur Erstellung gespeicherter Prozeduren zwischen Snowflake und BigQuery behandelt.

Snowflake BigQuery

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

AS procedure_definition;


Hinweis: Snowflake erfordert, dass gespeicherte Prozeduren einen einzelnen Wert zurückgeben. Daher ist der Rückgabedatentyp eine erforderliche Option.
CREATE [OR REPLACE] PROCEDURE

procedure_name

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

BEGIN

procedure_definition

END;


arg_mode: IN | OUT | INOUT


Hinweis: BigQuery unterstützt keinen Rückgabetyp für gespeicherte Prozeduren. Außerdem muss für jedes übergebene Argument der Argumentmodus angegeben werden.

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 Prozedurverhalten bei Nulleingaben wird implizit in BigQuery 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. Dies 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: Snowflake unterstützt die Angabe des Aufrufers oder des Inhabers der Prozedur für die Ausführung.

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 keine Signatur der Prozedur (Argumentdatentyp).

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

Weitere Prozedurbefehle

Snowflake bietet zusätzliche Befehle wie ALTER PROCEDURE, DESC[RIBE] PROCEDURE und SHOW PROCEDURES zum Verwalten der gespeicherten Prozeduren. Diese 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 in eine Tabelle abfragen 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

Jeder 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 per Commit bestätigt wurden. Snowflake-Transaktionen erhalten Sperren für Ressourcen (Tabellen), wenn diese Ressource geändert wird. Nutzer können die maximale Zeit anpassen, die eine blockierte Anweisung wartet, bis das Zeitlimit der Anweisung überschritten wird. DML-Anweisungen werden automatisch per Commit ausgeführt, 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 in einem Commit-Vorgang ausgeführt oder ein Rollback durchgeführt wird, bleibt die Transaktion in einem getrennten Zustand. Der Nutzer sollte SYSTEM$ABORT_TRANSACTION ausführen, um die getrennte Transaktion abzubrechen. Andernfalls führt Snowflake ein Rollback der getrennten Transaktion nach vier Stunden der Inaktivität aus. Wenn ein Deadlock auftritt, erkennt Snowflake den Deadlock und wählt die aktuellere Anweisung für das Rollback aus. Wenn die DML-Anweisung in einer explizit geöffneten Transaktion fehlschlägt, wird ein Rollback der Änderungen durchgeführt. Die Transaktion bleibt jedoch so lange geöffnet, bis sie in einem Commit-Vorgang bestätigt oder ein Rollback dafür durchgeführt wird. Für DDL-Anweisungen in Snowflake kann kein Rollback durchgeführt werden, da für sie automatisch ein Rollback 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 weiche Limits festgelegt. Weiche Limits werden während der Kontoerstellung festgelegt und können variieren. Viele weiche Limits von Snowflake können über das Snowflake-Account-Management-Team oder ein Support-Ticket 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