Übersetzungsleitfaden für Oracle SQL
In diesem Dokument werden die Gemeinsamkeiten und Unterschiede in der SQL-Syntax zwischen Oracle und BigQuery beschrieben, damit Sie die Migration planen können. 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.
Datentypen
In diesem Abschnitt werden die Entsprechungen zwischen den Datentypen in Oracle und BigQuery beschrieben.
Oracle | BigQuery | Hinweise |
---|---|---|
VARCHAR2
|
STRING
|
|
NVARCHAR2
|
STRING
|
|
CHAR
|
STRING
|
|
NCHAR
|
STRING
|
|
CLOB
|
STRING
|
|
NCLOB
|
STRING
|
|
INTEGER
|
INT64
|
|
SHORTINTEGER
|
INT64
|
|
LONGINTEGER
|
INT64
|
|
NUMBER
|
NUMERIC
|
In BigQuery sind keine benutzerdefinierten Werte für die Genauigkeit oder Skalierung zulässig. Daher kann eine Spalte in Oracle so definiert werden, dass sie eine größere Größe hat als BigQuery unterstützt.
Vor dem Speichern einer Dezimalzahl wird außerdem aufgerundet, wenn diese Zahl nach dem Dezimalzeichen mehr Ziffern enthält, als für die entsprechende Spalte angegeben ist. In BigQuery kann diese Funktion mit der Funktion |
NUMBER(*, x)
|
NUMERIC
|
In BigQuery sind keine benutzerdefinierten Werte für die Genauigkeit oder Skalierung zulässig. Daher kann eine Spalte in Oracle so definiert werden, dass sie eine größere Größe hat als BigQuery unterstützt.
Vor dem Speichern einer Dezimalzahl wird außerdem aufgerundet, wenn diese Zahl nach dem Dezimalzeichen mehr Ziffern enthält, als für die entsprechende Spalte angegeben ist. In BigQuery kann diese Funktion mit der Funktion |
NUMBER(x, -y)
|
INT64
|
Wenn ein Nutzer versucht, eine Dezimalzahl zu speichern, rundet Oracle diese auf eine ganze Zahl auf. Bei BigQuery führt ein Versuch, eine Dezimalzahl in einer Spalte zu speichern, die als INT64 definiert ist, zu einem Fehler. In diesem Fall sollte die Funktion ROUND() angewendet werden.
|
NUMBER(x)
|
INT64
|
Wenn ein Nutzer versucht, eine Dezimalzahl zu speichern, rundet Oracle diese auf eine ganze Zahl auf. Bei BigQuery führt ein Versuch, eine Dezimalzahl in einer Spalte zu speichern, die als INT64 definiert ist, zu einem Fehler. In diesem Fall sollte die Funktion ROUND() angewendet werden.
|
FLOAT
|
FLOAT64 /NUMERIC
|
FLOAT ist ein exakter Datentyp und ist ein NUMBER -Untertyp in Oracle. In BigQuery ist FLOAT64 ein ungefährer Datentyp. NUMERIC ist in BigQuery möglicherweise besser für den Typ FLOAT geeignet.
|
BINARY_DOUBLE
|
FLOAT64 /NUMERIC
|
FLOAT ist ein exakter Datentyp und ist ein NUMBER -Untertyp in Oracle. In BigQuery ist FLOAT64 ein ungefährer Datentyp. NUMERIC ist in BigQuery möglicherweise besser für den Typ FLOAT geeignet.
|
BINARY_FLOAT
|
FLOAT64 /NUMERIC
|
FLOAT ist ein exakter Datentyp und ist ein NUMBER -Untertyp in Oracle. In BigQuery ist FLOAT64 ein ungefährer Datentyp. NUMERIC ist in BigQuery möglicherweise besser für den Typ FLOAT geeignet.
|
LONG
|
BYTES
|
Der Datentyp LONG wird in früheren Versionen verwendet und wird in neuen Versionen von Oracle Database nicht empfohlen.
Der Datentyp |
BLOB
|
BYTES
|
BYTES -Datentyp kann zum Speichern von Binärdaten mit variabler Länge verwendet werden. Wenn dieses Feld nicht abgefragt und nicht für Analysen verwendet wird, ist es besser, Binärdaten in Cloud Storage zu speichern.
|
BFILE
|
STRING
|
Binärdateien können in Cloud Storage gespeichert werden und der Datentyp STRING kann zum Verweis auf Dateien in einer BigQuery-Tabelle verwendet werden.
|
DATE
|
DATETIME
|
|
TIMESTAMP
|
TIMESTAMP
|
BigQuery unterstützt eine Mikrosekundenpräzision (10-6) im Vergleich zu Oracle, das eine Genauigkeit von 0 bis 9 unterstützt.
BigQuery unterstützt einen Zeitzonenregionsnamen aus einer TZ-Datenbank und einen Zeitzonenversatz zu UTC.
In BigQuery sollte eine Zeitzonenkonvertierung manuell durchgeführt werden, um der |
TIMESTAMP(x)
|
TIMESTAMP
|
BigQuery unterstützt eine Mikrosekundenpräzision (10-6) im Vergleich zu Oracle, das eine Genauigkeit von 0 bis 9 unterstützt.
BigQuery unterstützt einen Zeitzonenregionsnamen aus einer TZ-Datenbank und einen Zeitzonenversatz zu UTC.
In BigQuery sollte eine Zeitzonenkonvertierung manuell durchgeführt werden, um der |
TIMESTAMP WITH TIME ZONE
|
TIMESTAMP
|
BigQuery unterstützt eine Mikrosekundenpräzision (10-6) im Vergleich zu Oracle, das eine Genauigkeit von 0 bis 9 unterstützt.
BigQuery unterstützt einen Zeitzonenregionsnamen aus einer TZ-Datenbank und einen Zeitzonenversatz zu UTC.
In BigQuery sollte eine Zeitzonenkonvertierung manuell durchgeführt werden, um der |
TIMESTAMP WITH LOCAL TIME ZONE
|
TIMESTAMP
|
BigQuery unterstützt eine Mikrosekundenpräzision (10-6) im Vergleich zu Oracle, das eine Genauigkeit von 0 bis 9 unterstützt.
BigQuery unterstützt einen Zeitzonenregionsnamen aus einer TZ-Datenbank und einen Zeitzonenversatz zu UTC.
In BigQuery sollte eine Zeitzonenkonvertierung manuell durchgeführt werden, um der |
INTERVAL YEAR TO MONTH
|
STRING
|
Intervallwerte können als Datentyp STRING in BigQuery gespeichert werden.
|
INTERVAL DAY TO SECOND
|
STRING
|
Intervallwerte können als Datentyp STRING in BigQuery gespeichert werden.
|
RAW
|
BYTES
|
BYTES -Datentyp kann zum Speichern von Binärdaten mit variabler Länge verwendet werden. Wenn dieses Feld nicht abgefragt und in Analysen verwendet wird, ist es besser, Binärdaten in Cloud Storage zu speichern.
|
LONG RAW
|
BYTES
|
BYTES -Datentyp kann zum Speichern von Binärdaten mit variabler Länge verwendet werden. Wenn dieses Feld nicht abgefragt und in Analysen verwendet wird, ist es besser, Binärdaten in Cloud Storage zu speichern.
|
ROWID
|
STRING
|
Diese Datentypen werden intern von Oracle verwendet, um eindeutige Adressen für Zeilen in einer Tabelle anzugeben. Im Allgemeinen sollte das Feld ROWID oder UROWID nicht in Anwendungen verwendet werden. In diesem Fall kann der Datentyp STRING jedoch zur Speicherung dieser Daten verwendet werden.
|
Typformattierung
Oracle SQL verwendet eine Reihe von Standardformaten, die als Parameter zum Anzeigen von Ausdrücken und Spaltendaten sowie für die Konvertierung zwischen Datentypen festgelegt werden. Beispiel: Für NLS_DATE_FORMAT
, die als YYYY/MM/DD
-Formate festgelegt ist, wird standardmäßig das Datum YYYY/MM/DD
festgelegt. Weitere Informationen zu den NLS-Einstellungen finden Sie in der Oracle-Onlinedokumentation.
In BigQuery gibt es keine Initialisierungsparameter.
BigQuery erwartet standardmäßig, dass alle Quelldaten beim Laden UTF-8-codiert sind. Wenn Sie wahlweise CSV-Dateien mit codierten Daten im ISO-8859-1-Format vorliegen haben, müssen Sie die Codierung ausdrücklich beim Importieren der Daten angeben. Dies ist erforderlich, damit BigQuery die Daten während des Importvorgangs ordnungsgemäß in UTF-8 konvertieren kann.
Nur ISO-8859-1- oder UTF-8-codierte Daten können importiert werden. BigQuery speichert und gibt die Daten in UTF-8-Codierung zurück.
Das gewünschte Datumsformat oder die Zeitzone kann in den Funktionen DATE
und TIMESTAMP
festgelegt werden.
Formatierung von Zeitstempel und Datumstyp
Wenn Sie Zeitstempel- und Datumsformatierungselemente von Oracle in BigQuery konvertieren, müssen Sie die Zeitzonenunterschiede zwischen TIMESTAMP
und DATETIME
berücksichtigen, wie in der folgenden Tabelle zusammengefasst.
In den Teradata-Formaten gibt es keine Klammern, da die Formate (CURRENT_*
) Keywords und keine Funktionen sind.
Oracle | BigQuery | Hinweise | |
---|---|---|---|
CURRENT_TIMESTAMP
|
TIMESTAMP -Informationen in Oracle können unterschiedliche Zeitzoneninformationen haben, die mit WITH TIME ZONE in der Spaltendefinition oder TIME_ZONE -Einstellung definiert werden.
|
Verwenden Sie nach Möglichkeit die Funktion CURRENT_TIMESTAMP() , die im ISO-Format formatiert ist. Das Ausgabeformat zeigt jedoch immer die UTC-Zeitzone an. (Intern hat BigQuery keine Zeitzone.)
Beachten Sie die folgenden Details zu den Unterschieden im ISO-Format:
Wenn Sie ein explizites Format nutzen möchten, verwenden Sie die Funktion |
|
CURRENT_DATE
|
Oracle verwendet für das Datum zwei Typen:
SYSDATE or CURRENT_DATE zurückgegeben wird.
|
BigQuery hat ein separates DATE -Format, das immer ein Datum im ISO 8601-Format zurückgibt.
|
|
CURRENT_DATE-3
|
Datumswerte werden als Ganzzahlen dargestellt. Oracle unterstützt arithmetische Operatoren für Datumstypen. | Verwenden Sie für Datumstypen DATE_ADD () oder DATE_SUB ().
BigQuery verwendet arithmetische Operatoren für die Datentypen INT64 , NUMERIC und FLOAT64 .
|
|
NLS_DATE_FORMAT
|
Legen Sie das Sitzungs- oder Systemdatumsformat fest. | BigQuery verwendet immer ISO 8601. Gewährleisten Sie daher, dass Sie Teradata-Datums- und Zeitangaben konvertieren. |
Abfragesyntax
In diesem Abschnitt werden Unterschiede in der Abfragesyntax zwischen Oracle und BigQuery behandelt.
SELECT
-Anweisungen
Die meisten Oracle-SELECT
-Anweisungen sind mit BigQuery kompatibel.
Funktionen, Operatoren und Ausdrücke
In den folgenden Abschnitten werden Zuordnungen zwischen Oracle-Funktionen und BigQuery-Entsprechungen aufgeführt.
Vergleichsoperator
Die Vergleichsoperatoren von Oracle und BigQuery sind ANSI SQL:2011-konform. Die Vergleichsoperatoren in der folgenden Tabelle sind sowohl in BigQuery als auch in Oracle identisch. Sie können in BigQuery REGEXP_CONTAINS
anstelle von REGEXP_LIKE
verwenden.
Operator | Beschreibung |
---|---|
"="
|
Gleich |
<>
|
Ungleich |
!=
|
Ungleich |
>
|
Größer als |
>=
|
Größer als oder gleich |
<
|
Kleiner als |
<=
|
Kleiner als oder gleich |
IN ( )
|
Stimmt mit einem Wert in einer Liste überein |
NOT
|
Bedingung negiert |
BETWEEN
|
Innerhalb eines Bereichs (einschließlich) |
IS NULL
|
NULL Wert
|
IS NOT NULL
|
Nicht NULL Wert
|
LIKE
|
Musterabgleich mit % |
EXISTS
|
Bedingung wird erfüllt, wenn die Unterabfrage mindestens eine Zeile zurückgibt |
Die Operatoren in der Tabelle sind in BigQuery und Oracle identisch.
Logische Ausdrücke und Funktionen
Aggregatfunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Oracle-Aggregatfunktionen, statistischen Aggregatfunktionen und ungefähren Aggregatfunktionen mit ihren BigQuery-Entsprechungen:
Oracle | BigQuery |
---|---|
ANY_VALUE (von Oracle 19c) |
ANY_VALUE |
APPROX_COUNT
|
HLL_COUNT set of functions with specified precision
|
APPROX_COUNT_DISTINCT
|
APPROX_COUNT_DISTINCT
|
APPROX_COUNT_DISTINCT_AGG
|
APPROX_COUNT_DISTINCT
|
APPROX_COUNT_DISTINCT_DETAIL
|
APPROX_COUNT_DISTINCT
|
APPROX_PERCENTILE(percentile) WITHIN GROUP (ORDER BY expression)
|
APPROX_QUANTILES(expression, 100)[ BigQuery unterstützt nicht die übrigen Argumente, die von Oracle definiert werden. |
<codeAPPROX_PERCENTILE_AGG | APPROX_QUANTILES(expression, 100)[
|
APPROX_PERCENTILE_DETAIL
|
APPROX_QUANTILES(expression, 100)[OFFSET(CAST(TRUNC(percentile * 100) as INT64))]
|
APPROX_SUM
|
APPROX_TOP_SUM(expression, weight, number)
|
AVG
|
AVG
|
BIT_COMPLEMENT
|
Bitweiser Not-Operator: ~ |
BIT_OR
|
BIT_OR, X | Y
|
BIT_XOR
|
BIT_XOR, X ^ Y
|
BITAND
|
BIT_AND, X & Y
|
CARDINALITY
|
COUNT
|
COLLECT
|
BigQuery unterstützt TYPE AS TABLE OF nicht.
Verwenden Sie gegebenenfalls STRING_AGG() oder ARRAY_AGG() in BigQuery
|
CORR/CORR_K/
CORR_S
|
CORR
|
COUNT
|
COUNT
|
COVAR_POP
|
COVAR_POP
|
COVAR_SAMP
|
COVAR_SAMP
|
FIRST
|
Gibt es implizit nicht in BigQuery. Verwenden Sie stattdessen benutzerdefinierte Funktionen (User-Defined Functions, UDFs). |
GROUP_ID
|
Wird in BigQuery nicht verwendet. |
GROUPING
|
Wird in BigQuery nicht verwendet. |
GROUPING_ID
|
Wird in BigQuery nicht verwendet. |
LAST
|
Gibt es implizit nicht in BigQuery. Verwenden Sie stattdessen UDFs. |
LISTAGG
|
STRING_AGG, ARRAY_CONCAT_AGG(expression [ORDER BY key [{ASC|DESC}] [, ... ]] [LIMIT n])
|
MAX
|
MAX
|
MIN
|
MIN
|
OLAP_CONDITION
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
OLAP_EXPRESSION
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
OLAP_EXPRESSION_BOOL
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
OLAP_EXPRESSION_DATE
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
OLAP_EXPRESSION_TEXT
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
OLAP_TABLE
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
POWERMULTISET
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
POWERMULTISET_BY_CARDINALITY
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
QUALIFY
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
REGR_AVGX
|
AVG( IF(dep_var_expr is NULL OR ind_var_expr is NULL, NULL, ind_var_expr) )
|
REGR_AVGY
|
AVG( IF(dep_var_expr is NULL OR ind_var_expr is NULL, NULL, dep_var_expr) )
|
REGR_COUNT
|
SUM( IF(dep_var_expr is NULL OR ind_var_expr is NULL, NULL, 1) )
|
REGR_INTERCEPT
|
AVG(dep_var_expr)
|
REGR_R2
|
(COUNT(dep_var_expr) *
|
REGR_SLOPE
|
COVAR_SAMP(ind_var_expr,
|
REGR_SXX
|
SUM(POWER(ind_var_expr, 2)) - COUNT(ind_var_expr) * POWER(AVG(ind_var_expr),2)
|
REGR_SXY
|
SUM(ind_var_expr*dep_var_expr) - COUNT(ind_var_expr) * AVG(ind) * AVG(dep_var_expr)
|
REGR_SYY
|
SUM(POWER(dep_var_expr, 2)) - COUNT(dep_var_expr) * POWER(AVG(dep_var_expr),2)
|
ROLLUP
|
ROLLUP
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP, STDDEV
|
SUM
|
SUM
|
VAR_POP
|
VAR_POP
|
VAR_SAMP
|
VAR_SAMP, VARIANCE
|
WM_CONCAT
|
STRING_AGG
|
BigQuery bietet die folgenden zusätzlichen Aggregatfunktionen:
Analysefunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Oracle-Analysefunktionen und aggregierten Analysefunktionen mit ihren BigQuery-Entsprechungen.
Oracle | BigQuery |
---|---|
AVG
|
AVG
|
BIT_COMPLEMENT
|
Bitweiser Not-Operator: ~ |
BIT_OR
|
BIT_OR, X | Y
|
BIT_XOR
|
BIT_XOR, X ^ Y
|
BITAND
|
BIT_AND, X & Y
|
BOOL_TO_INT
|
CAST(X AS INT64)
|
COUNT
|
COUNT
|
COVAR_POP
|
COVAR_POP
|
COVAR_SAMP
|
COVAR_SAMP
|
CUBE_TABLE
|
Wird in BigQuery nicht unterstützt. Stattdessen ein BI-Tool oder eine benutzerdefinierte UDF verwenden |
CUME_DIST
|
CUME_DIST
|
DENSE_RANK(ANSI)
|
DENSE_RANK
|
FEATURE_COMPARE
|
Gibt es implizit nicht in BigQuery. Stattdessen UDFs und BigQuery ML verwenden |
FEATURE_DETAILS
|
Gibt es implizit nicht in BigQuery. Stattdessen UDFs und BigQuery ML verwenden |
FEATURE_ID
|
Gibt es implizit nicht in BigQuery. Stattdessen UDFs und BigQuery ML verwenden |
FEATURE_SET
|
Gibt es implizit nicht in BigQuery. Stattdessen UDFs und BigQuery ML verwenden |
FEATURE_VALUE
|
Gibt es implizit nicht in BigQuery. Stattdessen UDFs und BigQuery ML verwenden |
FIRST_VALUE
|
FIRST_VALUE
|
HIER_CAPTION
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_CHILD_COUNT
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_COLUMN
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_DEPTH
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_DESCRIPTION
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_HAS_CHILDREN
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_LEVEL
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_MEMBER_NAME
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_ORDER
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
HIER_UNIQUE_MEMBER_NAME
|
Hierarchische Abfragen werden in BigQuery nicht unterstützt. |
LAST_VALUE
|
LAST_VALUE
|
LAG
|
LAG
|
LEAD
|
LEAD
|
LISTAGG
|
ARRAY_AGG
|
MATCH_NUMBER
|
Die Mustererkennung und -berechnung kann mit regulären Ausdrücken und UDFs in BigQuery erfolgen. |
MATCH_RECOGNIZE
|
Die Mustererkennung und -berechnung kann mit regulären Ausdrücken und UDFs in BigQuery erfolgen. |
MAX
|
MAX
|
MEDIAN
|
PERCENTILE_CONT(x, 0.5 RESPECT NULLS) OVER()
|
MIN
|
MIN
|
NTH_VALUE
|
NTH_VALUE (value_expression, constant_integer_expression [{RESPECT | IGNORE} NULLS])
|
NTILE
|
NTILE(constant_integer_expression)
|
PERCENT_RANK
|
PERCENT_RANK
|
PERCENTILE_CONT
|
PERCENTILE_CONT
|
PERCENTILE_CONT
|
PERCENTILE_DISC
|
PRESENTNNV
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
PRESENTV
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
PREVIOUS
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
RANK (ANSI)
|
RANK
|
RATIO_TO_REPORT(expr) OVER (partition clause)
|
expr / SUM(expr) OVER (partition clause)
|
ROW_NUMBER
|
ROW_NUMBER
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP, STDDEV
|
SUM
|
SUM
|
VAR_POP
|
VAR_POP
|
VAR_SAMP
|
VAR_SAMP, VARIANCE
|
VARIANCE
|
VARIANCE()
|
WIDTH_BUCKET
|
UDF kann verwendet werden. |
Datums-/Zeitfunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen gängigen Datums-/Uhrzeitfunktionen von Oracle und ihren BigQuery-Entsprechungen.
Oracle | BigQuery |
---|---|
ADD_MONTHS(date, integer)
|
DATE_ADD(date, INTERVAL integer MONTH), Wenn das Datum ein TIMESTAMP ist, den Sie verwenden können.
|
CURRENT_DATE
|
CURRENT_DATE
|
CURRENT_TIME
|
CURRENT_TIME
|
CURRENT_TIMESTAMP
|
CURRENT_TIMESTAMP
|
DATE - k
|
DATE_SUB(date_expression, INTERVAL k DAY)
|
DATE + k
|
DATE_ADD(date_expression, INTERVAL k DAY)
|
DBTIMEZONE
|
BigQuery unterstützt die Datenbankzeitzone nicht. |
EXTRACT
|
EXTRACT(DATE), EXTRACT(TIMESTAMP)
|
LAST_DAY
|
DATE_SUB(
|
LOCALTIMESTAMP
|
Zeitzoneneinstellungen werden von BigQuery nicht unterstützt. |
MONTHS_BETWEEN
|
DATE_DIFF(date_expression, date_expression, MONTH)
|
NEW_TIME
|
DATE(timestamp_expression, time zone)
|
NEXT_DAY
|
DATE_ADD(
|
SYS_AT_TIME_ZONE
|
CURRENT_DATE([time_zone])
|
SYSDATE
|
CURRENT_DATE()
|
SYSTIMESTAMP
|
CURRENT_TIMESTAMP()
|
TO_DATE
|
PARSE_DATE
|
TO_TIMESTAMP
|
PARSE_TIMESTAMP
|
TO_TIMESTAMP_TZ
|
PARSE_TIMESTAMP
|
TZ_OFFSET
|
Wird in BigQuery nicht unterstützt. Verwenden Sie stattdessen eine benutzerdefinierte UDF. |
WM_CONTAINS WM_EQUALS WM_GREATERTHAN WM_INTERSECTION WM_LDIFF WM_LESSTHAN WM_MEETS WM_OVERLAPS WM_RDIFF |
Punkte werden in BigQuery nicht verwendet. Mit UDFs können zwei Zeiträume verglichen werden. |
BigQuery bietet die folgenden zusätzlichen Datums-/Zeitfunktionen:
CURRENT_DATETIME
DATE_FROM_UNIX_DATE
DATE_TRUNC
DATETIME
DATETIME_ADD
DATETIME_DIFF
DATETIME_SUB
DATETIME_TRUNC
FORMAT_DATE
FORMAT_DATETIME
Stringfunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen Oracle-Stringfunktionen und ihren BigQuery-Entsprechungen:
Oracle | BigQuery |
---|---|
ASCII
|
TO_CODE_POINTS(string_expr)[OFFSET(0)]
|
ASCIISTR
|
BigQuery unterstützt UTF-16 nicht |
RAWTOHEX
|
TO_HEX
|
LENGTH
|
CHAR_LENGTH
|
LENGTH
|
CHARACTER_LENGTH
|
CHR
|
CODE_POINTS_TO_STRING(
|
COLLATION
|
Ist in BigQuery nicht vorhanden. COLLATE in DML wird von BigQuery nicht unterstützt. |
COMPOSE
|
Benutzerdefinierte Funktion |
CONCAT, (|| operator)
|
CONCAT
|
DECOMPOSE
|
Benutzerdefinierte Funktion |
ESCAPE_REFERENCE (UTL_I18N)
|
Wird in BigQuery nicht unterstützt. Verwenden Sie stattdessen eine benutzerdefinierte Funktion. |
INITCAP
|
INITCAP
|
INSTR/INSTR2/INSTR4/INSTRB/INSTRC
|
Benutzerdefinierte Funktion |
LENGTH/LENGTH2/LENGTH4/LENGTHB/LENGTHC
|
LENGTH
|
LOWER
|
LOWER
|
LPAD
|
LPAD
|
LTRIM
|
LTRIM
|
NLS_INITCAP
|
Benutzerdefinierte Funktion |
NLS_LOWER
|
LOWER
|
NLS_UPPER
|
UPPER
|
NLSSORT
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
POSITION
|
STRPOS(string, substring)
|
PRINTBLOBTOCLOB
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. |
REGEXP_COUNT
|
ARRAY_LENGTH(REGEXP_EXTRACT_ALL(value, regex))
|
REGEXP_INSTR
|
STRPOS(source_string, REGEXP_EXTRACT(source_string, regexp_string))
Hinweis: Gibt das erste Vorkommen zurück. |
REGEXP_REPLACE
|
REGEXP_REPLACE
|
REGEXP_LIKE
|
IF(REGEXP_CONTAINS,1,0)
|
REGEXP_SUBSTR
|
REGEXP_EXTRACT, REGEXP_EXTRACT_ALL
|
REPLACE
|
REPLACE
|
REVERSE
|
REVERSE
|
RIGHT
|
SUBSTR(source_string, -1, length)
|
RPAD
|
RPAD
|
RTRIM
|
RTRIM
|
SOUNDEX
|
Wird in BigQuery nicht unterstützt. Stattdessen benutzerdefinierte UDF verwenden |
STRTOK
|
SPLIT(instring, delimiter)[ORDINAL(tokennum)]
|
SUBSTR/SUBSTRB/SUBSTRC/SUBSTR2/SUBSTR4
|
SUBSTR
|
TRANSLATE
|
REPLACE
|
TRANSLATE USING
|
REPLACE
|
TRIM
|
TRIM
|
UNISTR
|
CODE_POINTS_TO_STRING
|
UPPER
|
UPPER
|
|| (VERTICAL BARS)
|
CONCAT
|
BigQuery bietet die folgenden zusätzlichen Stringfunktionen:
BYTE_LENGTH
CODE_POINTS_TO_BYTES
ENDS_WITH
FROM_BASE32
FROM_BASE64
FROM_HEX
NORMALIZE
NORMALIZE_AND_CASEFOLD
REPEAT
SAFE_CONVERT_BYTES_TO_STRING
SPLIT
STARTS_WITH
STRPOS
TO_BASE32
TO_BASE64
TO_CODE_POINTS
Mathematische Funktionen:
Die folgende Tabelle zeigt Zuordnungen zwischen den mathematischen Oracle-Funktionen und ihren BigQuery-Entsprechungen.
Oracle | BigQuery |
---|---|
ABS
|
ABS
|
ACOS
|
ACOS
|
ACOSH
|
ACOSH
|
ASIN
|
ASIN
|
ASINH
|
ASINH
|
ATAN
|
ATAN
|
ATAN2
|
ATAN2
|
ATANH
|
ATANH
|
CEIL
|
CEIL
|
CEILING
|
CEILING
|
COS
|
COS
|
COSH
|
COSH
|
EXP
|
EXP
|
FLOOR
|
FLOOR
|
GREATEST
|
GREATEST
|
LEAST
|
LEAST
|
LN
|
LN
|
LNNVL
|
mit ISNULL verwenden
|
LOG
|
LOG
|
MOD (% operator)
|
MOD
|
POWER (** operator)
|
POWER, POW
|
DBMS_RANDOM.VALUE
|
RAND
|
RANDOMBYTES
|
Wird in BigQuery nicht unterstützt. Stattdessen benutzerdefinierte UDF und RAND-Funktion verwenden |
RANDOMINTEGER
|
CAST(FLOOR(10*RAND()) AS INT64)
|
RANDOMNUMBER
|
Wird in BigQuery nicht unterstützt. Stattdessen benutzerdefinierte UDF und RAND-Funktion verwenden |
REMAINDER
|
MOD
|
ROUND
|
ROUND
|
ROUND_TIES_TO_EVEN
|
ROUND()
|
SIGN
|
SIGN
|
SIN
|
SIN
|
SINH
|
SINH
|
SQRT
|
SQRT
|
STANDARD_HASH
|
FARM_FINGERPRINT, MD5, SHA1, SHA256, SHA512
|
STDDEV
|
STDDEV |
TAN
|
TAN
|
TANH
|
TANH
|
TRUNC
|
TRUNC
|
NVL
|
IFNULL(expr, 0), COALESCE(exp, 0)
|
BigQuery bietet die folgenden zusätzlichen mathematischen Funktionen:
Typkonvertierungsfunktionen
Die folgende Tabelle zeigt Zuordnungen zwischen den Konvertierungsfunktionen des Oracle-Typs und ihren BigQuery-Entsprechungen.
Oracle | BigQuery | |
---|---|---|
BIN_TO_NUM
|
SAFE_CONVERT_BYTES_TO_STRING(value)
|
|
BINARY2VARCHAR
|
SAFE_CONVERT_BYTES_TO_STRING(value)
|
|
CAST
|
CAST(expr AS typename)
|
|
CHARTOROWID
|
Oracle-spezifisch nicht erforderlich. | |
CONVERT
|
BigQuery unterstützt keine Zeichensätze. Verwenden Sie stattdessen eine benutzerdefinierte Funktion. | |
EMPTY_BLOB
|
BLOB wird in BigQuery nicht verwendet.
|
|
EMPTY_CLOB
|
CLOB wird in BigQuery nicht verwendet.
|
|
FROM_TZ
|
Typen mit Zeitzonen werden in BigQuery nicht unterstützt. Stattdessen benutzerdefinierte Funktion und FORMAT_TIMESTAMP verwenden | |
INT_TO_BOOL
|
CAST
|
|
IS_BIT_SET
|
Gibt es implizit nicht in BigQuery. Stattdessen UDFs verwenden | |
NCHR
|
UDF kann verwendet werden, um ein Äquivalent des Binärprogramms abzurufen. | |
NUMTODSINTERVAL
|
Der Datentyp INTERVAL wird in BigQuery nicht unterstützt.
|
|
NUMTOHEX
|
Wird in BigQuery nicht unterstützt. Stattdessen benutzerdefinierte UDF und eine TO_HEX -Funktion verwenden
|
|
NUMTOHEX2
|
||
NUMTOYMINTERVAL
|
Der Datentyp INTERVAL wird in BigQuery nicht unterstützt.
|
|
RAW_TO_CHAR
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
RAW_TO_NCHAR
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
RAW_TO_VARCHAR2
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
RAWTOHEX
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
RAWTONHEX
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
RAWTONUM
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
RAWTONUM2
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
RAWTOREF
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
REFTOHEX
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
REFTORAW
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
ROWIDTOCHAR
|
ROWID ist ein Oracle-spezifischer Typ und ist in BigQuery nicht vorhanden. Dieser Wert sollte als String dargestellt werden.
|
|
ROWIDTONCHAR
|
ROWID ist ein Oracle-spezifischer Typ und ist in BigQuery nicht vorhanden. Dieser Wert sollte als String dargestellt werden.
|
|
SCN_TO_TIMESTAMP
|
SCN ist ein Oracle-spezifischer Typ und ist in BigQuery nicht vorhanden. Dieser Wert sollte als Zeitstempel dargestellt werden.
|
|
TO_ACLID TO_TIMESTAMP TO_TIMESTAMP_TZ TO_TIME_TZ TO_UTC_TIMEZONE_TZ TO_YMINTERVAL |
CAST(expr AS typename) PARSE_DATE PARSE_TIMESTAMP Die Umwandlungssyntax wird in einer Abfrage verwendet, um anzuzeigen, dass der Ergebnistyp eines Ausdrucks in einen anderen Typ umgewandelt werden soll. |
|
TREAT
|
Oracle-spezifisch, ist in BigQuery nicht vorhanden. | |
VALIDATE_CONVERSION
|
Wird in BigQuery nicht unterstützt. Stattdessen benutzerdefinierte UDF verwenden | |
VSIZE
|
Wird in BigQuery nicht unterstützt. Stattdessen benutzerdefinierte UDF verwenden |
JSON-Funktionen
Die folgende Tabelle zeigt Zuordnungen zwischen Oracle-JSON-Funktionen und ihren BigQuery-Entsprechungen.
Oracle | BigQuery |
---|---|
AS_JSON
|
TO_JSON_STRING(value[, pretty_print])
|
JSON_ARRAY
|
Stattdessen UDFs und die Funktion TO_JSON_STRING verwenden
|
JSON_ARRAYAGG
|
Stattdessen UDFs und die Funktion TO_JSON_STRING verwenden
|
JSON_DATAGUIDE
|
Benutzerdefinierte Funktion |
JSON_EQUAL
|
Benutzerdefinierte Funktion |
JSON_EXIST
|
Stattdessen UDFs und JSON_EXTRACT oder JSON_EXTRACT_SCALAR verwenden
|
JSON_MERGEPATCH
|
Benutzerdefinierte Funktion |
JSON_OBJECT
|
Wird von BigQuery nicht unterstützt. |
JSON_OBJECTAGG
|
Wird von BigQuery nicht unterstützt. |
JSON_QUERY
|
Verwenden Sie stattdessen UDFs und JSON_EXTRACT oder JSON_EXTRACT_SCALAR .
|
JSON_TABLE
|
Benutzerdefinierte Funktion |
JSON_TEXTCONTAINS
|
Verwenden Sie stattdessen UDFs und JSON_EXTRACT oder JSON_EXTRACT_SCALAR .
|
JSON_VALUE
|
JSON_EXTRACT_SCALAR
|
XML-Funktionen
BigQuery stellt keine impliziten XML-Funktionen bereit. XML kann in BigQuery als String geladen werden und UDFs können zum Parsen von XML verwendet werden. Alternativ kann die XML-Verarbeitung von einem ETL-/ELT-Tool wie Dataflow durchgeführt werden. In der folgenden Liste sind die Oracle-XML-Funktionen aufgeführt:
Oracle | BigQuery |
---|---|
DELETEXML
|
Zur Verarbeitung von XML können BigQuery-User-Tags oder ETL-Tools wie Dataflow verwendet werden. |
ENCODE_SQL_XML | |
EXISTSNODE | |
EXTRACTCLOBXML | |
EXTRACTVALUE | |
INSERTCHILDXML | |
INSERTCHILDXMLAFTER | |
INSERTCHILDXMLBEFORE | |
INSERTXMLAFTER | |
INSERTXMLBEFORE | |
SYS_XMLAGG | |
SYS_XMLANALYZE | |
SYS_XMLCONTAINS | |
SYS_XMLCONV | |
SYS_XMLEXNSURI | |
SYS_XMLGEN | |
SYS_XMLI_LOC_ISNODE | |
SYS_XMLI_LOC_ISTEXT | |
SYS_XMLINSTR | |
SYS_XMLLOCATOR_GETSVAL | |
SYS_XMLNODEID | |
SYS_XMLNODEID_GETLOCATOR | |
SYS_XMLNODEID_GETOKEY | |
SYS_XMLNODEID_GETPATHID | |
SYS_XMLNODEID_GETPTRID | |
SYS_XMLNODEID_GETRID | |
SYS_XMLNODEID_GETSVAL | |
SYS_XMLT_2_SC | |
SYS_XMLTRANSLATE | |
SYS_XMLTYPE2SQL | |
UPDATEXML | |
XML2OBJECT | |
XMLCAST | |
XMLCDATA | |
XMLCOLLATVAL | |
XMLCOMMENT | |
XMLCONCAT | |
XMLDIFF | |
XMLELEMENT | |
XMLEXISTS | |
XMLEXISTS2 | |
XMLFOREST | |
XMLISNODE | |
XMLISVALID | |
XMLPARSE | |
XMLPATCH | |
XMLPI | |
XMLQUERY | |
XMLQUERYVAL | |
XMLSERIALIZE | |
XMLTABLE | |
XMLTOJSON | |
XMLTRANSFORM | |
XMLTRANSFORMBLOB | |
XMLTYPE |
Funktionen für maschinelles Lernen
Die Funktionen für maschinelles Lernen (ML) in Oracle und BigQuery sind unterschiedlich.
Oracle benötigt ein erweitertes Analysepaket und Lizenzen für ML in der Datenbank.
Oracle verwendet denDBMS_DATA_MINING
ML-Paket. Für die Konvertierung von Oracle-Data-Miner-Jobs muss der Code umgeschrieben werden. Sie können aus umfassenden Google-KI-Produkten wie BigQuery ML und AI APIs wählen, einschließlich Speech-to-Text, Text-to-Speech, Dialogflow, Cloud Translation, NLP, Cloud Vision und Timeseries Insights API,
AutoML,
AutoML Tables oder AI Platform. Nutzerverwaltete Notebooks von Google können als Entwicklungsumgebung für Data Scientists und Google AI Platform Training zum Ausführen von Trainings und Arbeitslasten im großen Maßstab bewerten. Die folgende Tabelle enthält Oracle ML-Funktionen:
Oracle | BigQuery |
---|---|
CLASSIFIER
|
Unter BigQuery ML finden Sie Informationen zu den Optionen für den Klassifikator und die Regression für maschinelles Lernen. |
CLUSTER_DETAILS
|
|
CLUSTER_DISTANCE
|
|
CLUSTER_ID
|
|
CLUSTER_PROBABILITY
|
|
CLUSTER_SET
|
|
PREDICTION
|
|
PREDICTION_BOUNDS
|
|
PREDICTION_COST
|
|
PREDICTION_DETAILS
|
|
PREDICTION_PROBABILITY
|
|
PREDICTION_SET
|
Sicherheitsfunktionen
In der folgenden Tabelle sind die Funktionen zur Identifizierung des Nutzers in Oracle und BigQuery aufgeführt:
Oracle | BigQuery |
---|---|
UID
|
SESSION_USER
|
USER/SESSION_USER/CURRENT_USER
|
SESSION_USER()
|
Set- oder Arrayfunktionen
Die folgende Tabelle zeigt die Set- oder Array-Funktionen in Oracle und ihre Entsprechungen in BigQuery:
Oracle | BigQuery |
---|---|
MULTISET
|
ARRAY_AGG
|
MULTISET EXCEPT
|
ARRAY_AGG([DISTINCT] expression)
|
MULTISET INTERSECT
|
ARRAY_AGG([DISTINCT])
|
MULTISET UNION
|
ARRAY_AGG
|
Fensterfunktionen
Die folgende Tabelle zeigt Fensterfunktionen in Oracle und ihre Entsprechungen in BigQuery.
Oracle | BigQuery |
---|---|
LAG
|
LAG (value_expression[, offset [, default_expression]])
|
LEAD
|
LEAD (value_expression[, offset [, default_expression]])
|
Hierarchische oder wiederkehrende Abfragen
Hierarchische oder rekursive Abfragen werden in BigQuery nicht verwendet. Wenn die Tiefe der Hierarchie bekannt ist, können ähnliche Funktionen mit Joins erreicht werden, wie im folgenden Beispiel dargestellt. Eine weitere Lösung wäre die Verwendung der BigQueryStorage API und von Spark.
select
array(
select e.update.element
union all
select c1 from e.update.element.child as c1
union all
select c2 from e.update.element.child as c1, c1.child as c2
union all
select c3 from e.update.element.child as c1, c1.child as c2, c2.child as c3
union all
select c4 from e.update.element.child as c1, c1.child as c2, c2.child as c3, c3.child as c4
union all
select c5 from e.update.element.child as c1, c1.child as c2, c2.child as c3, c3.child as c4, c4.child as c5
) as flattened,
e as event
from t, t.events as e
Die folgende Tabelle enthält hierarchische Funktionen in Oracle.
Oracle | BigQuery |
---|---|
DEPTH
|
Hierarchische Abfragen werden in BigQuery nicht verwendet. |
PATH
|
|
SYS_CONNECT_BY_PATH (hierarchical)
|
UTL-Funktionen
Das Paket UTL_File
wird hauptsächlich zum Lesen und Schreiben der Betriebssystemdateien aus PL/SQL verwendet. Cloud Storage kann für jede Art von Staging von Rohdateien verwendet werden.
Externe Tabellen sowie BigQuery-Load-Balancing und Export sollten zum Lesen und Schreiben von Dateien in und aus Cloud Storage verwendet werden. Weitere Informationen finden Sie unter Einführung in externe Datenquellen.
Räumliche Funktionen
Durch räumliche Analysen können Sie räumliche Funktionen ersetzen. Es gibt SDO_*
-Funktionen und -Typen in Oracle, z. B. SDO_GEOM_KEY
, SDO_GEOM_MBR
, SDO_GEOM_MMB
. Diese Funktionen werden für räumliche Analysen verwendet. Sie können raumbezogene Analysen für räumliche Analysen verwenden.
DML-Syntax
In diesem Abschnitt werden Unterschiede in der Syntax der Datenverwaltungssprache zwischen Oracle und BigQuery behandelt.
INSERT
-Anweisung
Die meisten Oracle-INSERT
-Anweisungen sind mit BigQuery kompatibel. Die folgende Tabelle enthält Ausnahmen.
DML-Skripts in BigQuery haben eine etwas andere Konsistenzsemantik als die entsprechenden Anweisungen in Oracle. Eine Übersicht über die Snapshot-Isolation sowie die Sitzungs- und Transaktionsbehandlung finden Sie im Abschnitt CREATE [UNIQUE] INDEX
section
an anderer Stelle in diesem Dokument.
Oracle | BigQuery |
---|---|
INSERT INTO table VALUES (...);
|
INSERT INTO table (...) VALUES (...);
Oracle bietet das Keyword
Hinweis: In BigQuery funktioniert das Weglassen von Spaltennamen in der Anweisung |
INSERT INTO table VALUES (1,2,3);
|
INSERT INTO table VALUES (1,2,3),
(4,5,6),
BigQuery legt DML-Kontingente fest, die die Anzahl der DML-Anweisungen begrenzen, die Sie täglich ausführen können. Ziehen Sie die folgenden Ansätze in Betracht, um Ihr Kontingent optimal zu nutzen:
|
UPDATE
-Anweisung
Oracle-UPDATE
-Anweisungen sind hauptsächlich mit BigQuery kompatibel. In BigQuery muss die UPDATE
-Anweisung jedoch eine WHERE
-Klausel enthalten.
Als Best Practice empfehlen wir, Batch-DML-Anweisungen gegenüber mehreren einzelnen UPDATE
- und INSERT
-Anweisungen zu bevorzugen. DML-Skripts in BigQuery haben eine etwas andere Konsistenzsemantik als entsprechende Anweisungen in Oracle.
Eine Übersicht über die Snapshot-Isolation sowie die Sitzungs- und Transaktionsbehandlung finden Sie im Abschnitt CREATE INDEX
an anderer Stelle in diesem Dokument.
Die folgende Tabelle zeigt Teradata-UPDATE
-Anweisungen und BigQuery-Anweisungen, die dieselben Aufgaben ausführen.
In BigQuery muss die UPDATE
-Anweisung eine WHERE
-Klausel enthalten.
Weitere Informationen zu UPDATE
in BigQuery finden Sie in den BigQuery UPDATE-Beispielen in der DML-Dokumentation.
DELETE
- und TRUNCATE
-Anweisungen
Die Anweisungen DELETE
und TRUNCATE
sind beide Möglichkeiten zum Entfernen von Zeilen aus einer Tabelle, ohne dass sich dies auf das Tabellenschema auswirkt. TRUNCATE
wird in BigQuery nicht verwendet.
Sie können jedoch DELETE
-Anweisungen verwenden, um den gleichen Effekt zu erzielen.
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.
Oracle | BigQuery |
---|---|
DELETE database.table;
|
DELETE FROM table WHERE TRUE;
|
MERGE
-Anweisung
Die MERGE
-Anweisung kann die Vorgänge INSERT
, UPDATE
und DELETE
in einer einzigen UPSERT
-Anweisung kombinieren und die Vorgänge atomar ausführen. Der MERGE
-Vorgang muss mit maximal einer Quellzeile für jede Zielzeile übereinstimmen.
BigQuery und Oracle folgen beide der ANSI-Syntax.
DML-Skripts in BigQuery haben jedoch eine etwas andere Konsistenzsemantik als die entsprechenden Anweisungen in Oracle.
DDL-Syntax
In diesem Abschnitt werden Unterschiede in der Syntax der Datendefinitionssprache zwischen Oracle und BigQuery behandelt.
CREATE TABLE
-Anweisung
Die meisten Oracle-CREATE TABLE
-Anweisungen sind mit BigQuery kompatibel, mit Ausnahme der folgenden Einschränkungen und Syntaxelemente, die in BigQuery nicht verwendet werden:
STORAGE
TABLESPACE
DEFAULT
GENERATED ALWAYS AS
ENCRYPT
PRIMARY KEY (col, ...)
. Weitere Informationen erhalten Sie hier:CREATE INDEX
.UNIQUE INDEX
. Weitere Informationen erhalten Sie hier:CREATE INDEX
.CONSTRAINT..REFERENCES
DEFAULT
PARALLEL
COMPRESS
Weitere Informationen zu CREATE TABLE
in BigQuery finden Sie unter BigQuery CREATE TABLE
-Beispiele.
Optionen und Attribute für Spalten
Identitätsspalten werden mit der Oracle 12c-Version eingeführt, die die automatische Erhöhung einer Spalte ermöglicht. Dies wird in BigQuery nicht verwendet. Dies kann mit der folgenden Batchmethode erreicht werden. Weitere Informationen zu Ersatzschlüsseln und zu einer langsam ändernden Dimension (SCD) finden Sie in den folgenden Anleitungen:
Oracle | BigQuery |
---|---|
CREATE TABLE table (
|
INSERT INTO dataset.table SELECT
|
Spaltenkommentare
Oracle verwendet die Comment
-Syntax, um Kommentare zu Spalten hinzuzufügen. Diese Funktion kann in BigQuery auf ähnliche Weise mithilfe der Spaltenbeschreibung implementiert werden, wie in der folgenden Tabelle dargestellt:
Oracle | BigQuery |
---|---|
Comment on column table is 'column desc';
|
CREATE TABLE dataset.table (
|
Temporäre Tabellen
Oracle unterstützt temporäre Tabellen, die häufig zum Speichern von Zwischenergebnissen in Skripts verwendet werden. Temporäre Tabellen werden in BigQuery unterstützt.
Oracle | BigQuery |
---|---|
CREATE GLOBAL TEMPORARY TABLE
|
CREATE TEMP TABLE temp_tab
|
Die folgenden Oracle-Elemente werden in BigQuery nicht verwendet:
ON COMMIT DELETE ROWS;
ON COMMIT PRESERVE ROWS;
Es gibt auch andere Möglichkeiten, temporäre Tabellen in BigQuery zu emulieren:
- Dataset-TTL: Erstellen Sie ein Dataset mit einer kurzen Lebensdauer (z. B. eine Stunde), damit alle im Dataset erstellten Tabellen praktisch temporär sind, da sie nicht länger als für die Lebensdauer des Datasets beibehalten werden. Sie können allen Tabellennamen in diesem Dataset
temp
voranstellen, um deutlich zu machen, dass die Tabellen temporär sind. Tabellen-TTL: Erstellen Sie eine Tabelle mit einer tabellenspezifischen kurzen Lebensdauer mithilfe von DDL-Anweisungen wie der folgenden:
CREATE TABLE temp.name (col1, col2, ...)
OPTIONS(expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR));WITH
-Klausel: Wenn eine temporäre Tabelle nur im selben Block benötigt wird, verwenden Sie ein temporäres Ergebnis mithilfe einerWITH
-Anweisung oder -Unterabfrage.
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
CREATE VIEW
-Anweisung
Die folgende Tabelle zeigt Entsprechungen zwischen Teradata und BigQuery für die Anweisung CREATE VIEW
.
Oracle | BigQuery | Hinweise |
---|---|---|
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 ...
|
|
Nicht unterstützt | CREATE VIEW IF NOT EXISTS
view_name
OPTIONS(view_option_list)
AS SELECT ...
|
Erstellt nur dann eine neue Ansicht, wenn die Ansicht derzeit im angegebenen Dataset nicht vorhanden ist. |
CREATE MATERIALIZED VIEW
-Anweisung
In BigQuery werden Aktualisierungsvorgänge in der materialisierten Ansicht automatisch ausgeführt. Sie müssen in BigQuery keine Aktualisierungsoptionen angeben (z. B. für Commit oder Zeitplan). Weitere Informationen finden Sie unter Einführung in materialisierte Ansichten.
Wenn sich die Basistabelle immer wieder nur durch Anfügungen ändert, scannt die Abfrage, die eine materialisierte Ansicht verwendet (unabhängig davon, ob die Ansicht explizit referenziert oder vom Abfrageoptimierungstool ausgewählt wird), alle materialisierten Ansichten seit der letzten Aktualisierung der Ansicht sowie ein Delta in der Basistabelle. Das bedeutet, dass Abfragen schneller und günstiger sind.
Sind dagegen Aktualisierungen (DML UPDATE / MERGE) oder Löschungen (DML DELETE, Kürzung, Partitionsablauf) in der Basistabelle seit der letzten Aktualisierung der Ansicht aufgetreten, werden die materialisierte Ansicht nicht gescannt. Daher erhält die Abfrage bis zur nächsten Aktualisierung der Ansicht keine Einsparungen. Grundsätzlich wird bei jeder Aktualisierung oder Löschung in der Basistabelle der Status der materialisierten Ansicht ungültig.
Außerdem werden die Daten aus dem Streamingpuffer der Basistabelle nicht in der materialisierten Ansicht gespeichert. Der Streamingzwischenspeicher wird immer noch vollständig gescannt, unabhängig davon, ob die materialisierte Ansicht verwendet wird.
Die folgende Tabelle zeigt Entsprechungen zwischen Teradata und BigQuery für die Anweisung CREATE MATERIALIZED VIEW
.
Oracle | BigQuery | Hinweise |
---|---|---|
CREATE MATERIALIZED VIEW view_name
|
CREATE MATERIALIZED VIEW
|
CREATE [UNIQUE] INDEX
-Anweisung
In diesem Abschnitt werden Ansätze in BigQuery zum Erstellen von Funktionen beschrieben, die Indexen in Oracle ähneln.
Indexierung aus Gründen der Leistung
BigQuery benötigt keine expliziten Indexe, da es sich um eine spaltenorientierte Datenbank mit Abfrage- und Speicheroptimierung handelt. BigQuery bietet Funktionen wie Partitionierung und Clustering sowie verschachtelte Felder, die durch Optimierung der Datenspeicherung die Effizienz und Leistung von Abfragen erhöhen können.
Indexierung aus Konsistenzgründen (UNIQUE, PRIMARY INDEX)
In Oracle, kann ein eindeutiger Index verwendet werden, um Zeilen mit nicht eindeutigen Schlüsseln in einer Tabelle zu verhindern. Wenn ein Prozess versucht, Daten mit einem Wert einzufügen oder zu aktualisieren, der bereits im Index enthalten ist, schlägt der Vorgang mit einem Indexverstoß fehl.
Da BigQuery keine expliziten Indexe bereitstellt, kann stattdessen eine MERGE
-Anweisung verwendet werden, um nur eindeutige Einträge aus einer Staging-Tabelle in eine Zieltabelle einzufügen, während doppelte Einträge verworfen werden. Es gibt jedoch keine Möglichkeit, zu verhindern, dass ein Nutzer mit Bearbeitungsberechtigungen einen doppelten Eintrag einfügt.
Zum Generieren eines Fehlers für doppelte Einträge in BigQuery können Sie eine MERGE
-Anweisung aus einer Staging-Tabelle verwenden, wie im folgenden Beispiel gezeigt:
Oracle | BigQuery | |
---|---|---|
CREATE [UNIQUE] INDEX name;
|
MERGE `prototype.FIN_MERGE` t \
|
Häufiger ziehen es Nutzer vor, Duplikate unabhängig zu entfernen, um Fehler in nachgelagerten Systemen zu finden.
BigQuery unterstützt die Spalten DEFAULT
und IDENTITY
(Sequenzen) nicht.
Sperren
BigQuery hat keinen Sperrmechanismus wie Oracle und kann gleichzeitige Abfragen (bis zu Ihrem Kontingent) ausführen. Nur DML-Anweisungen haben bestimmte Gleichzeitigkeitslimits und erfordern in einigen Szenarien eine Tabellensperre während der Ausführung.
Prozedurale SQL-Anweisungen
In diesem Abschnitt wird beschrieben, wie Sie prozedurale SQL-Anweisungen, die in gespeicherten Verfahren, Funktionen und Triggern verwendet werden, von Oracle in BigQuery konvertieren.
CREATE PROCEDURE
-Anweisung
Gespeicherte Prozeduren werden im Rahmen der BigQuery-Skripterstellung (Beta) unterstützt.
Oracle | BigQuery | Hinweise |
---|---|---|
CREATE PROCEDURE
|
CREATE PROCEDURE
|
Ähnlich wie Oracle unterstützt BigQuery die Argumentmodi IN, OUT, INOUT . Andere Syntaxspezifikationen werden in BigQuery nicht unterstützt.
|
CREATE OR REPLACE PROCEDURE
|
CREATE OR REPLACE PROCEDURE
|
|
CALL
|
CALL
|
In den folgenden Abschnitten wird beschrieben, wie vorhandene prozedurale Oracle-Anweisungen in BigQuery-Skript-Anweisungen mit ähnlicher Funktionalität konvertiert werden.
CREATE TRIGGER
-Anweisung
Trigger werden in BigQuery nicht verwendet. Die zeilenbasierte Anwendungslogik sollte auf der Anwendungsebene verarbeitet werden. Die Triggerfunktion kann über die Nutzung des Aufnahmetools, Pub/Sub und/oder Cloud Run Functions während der Aufnahmezeit oder durch Nutzung regulärer Scans erreicht werden.
Variablendeklaration und -zuweisung
Die folgende Tabelle zeigt DECLARE
-Anweisungen von Oracle und ihre Entsprechungen in BigQuery.
Oracle | BigQuery |
---|---|
DECLARE
|
DECLARE L_VAR int64;
|
SET var = value;
|
SET var = value;
|
Cursor-Deklarationen und -Vorgänge
Da BigQuery keine Cursor unterstützt, werden die folgenden Anweisungen in BigQuery nicht verwendet:
DECLARE cursor_name CURSOR [FOR | WITH] ...
OPEN CUR_VAR FOR sql_str;
OPEN cursor_name [USING var, ...];
FETCH cursor_name INTO var, ...;
CLOSE cursor_name;
Dynamische SQL-Anweisungen
Die folgende Oracle Dynamic SQL-Anweisung und ihre BigQuery-Entsprechungen:
Oracle | BigQuery |
---|---|
EXECUTE IMMEDIATE
sql_str
|
EXECUTE IMMEDIATE
|
Anweisungen zum Kontrollfluss
Die folgende Tabelle zeigt Oracle-Flow-of-Control-Anweisungen und ihre BigQuery-Entsprechungen.
Oracle | BigQuery |
---|---|
IF condition THEN
|
IF condition THEN
|
SET SERVEROUTPUT ON;
|
DECLARE x INT64 DEFAULT 0;
|
LOOP
|
LOOP
|
WHILE boolean_expression DO
|
WHILE boolean_expression DO
|
FOR LOOP
|
FOR LOOP wird in BigQuery nicht verwendet. Verwenden Sie andere LOOP -Anweisungen.
|
BREAK
|
BREAK
|
CONTINUE
|
CONTINUE
|
CONTINUE/EXIT WHEN
|
CONTINUE mit IF -Bedingung verwenden.
|
GOTO
|
GOTO -Anweisung ist in BigQuery nicht vorhanden. Verwenden Sie die Bedingung IF .
|
Metadaten- und Transaktions-SQL-Anweisungen
Oracle | BigQuery |
---|---|
GATHER_STATS_JOB
|
Wird in BigQuery noch nicht verwendet. |
LOCK TABLE table_name IN [SHARE/EXCLUSIVE] MODE NOWAIT;
|
Wird in BigQuery noch nicht verwendet. |
Alter session set isolation_level=serializable; /
|
BigQuery verwendet immer die Snapshot-Isolation. Weitere Informationen finden Sie in diesem Dokument unter Konsistenzgarantien und Transaktionsisolation. |
EXPLAIN PLAN ...
|
Wird in BigQuery nicht verwendet.
Ähnliche Funktionen sind die Erläuterung des Abfrageplans in der BigQuery-Web-UI, die Slotzuweisung und im Audit-Logging in Stackdriver. |
SELECT * FROM DBA_[*];
(Oracle DBA_/ALL_/V$-Ansichten) |
SELECT * FROM mydataset.INFORMATION_SCHEMA.TABLES;
Weitere Informationen finden Sie unter Einführung in BigQuery INFORMATION_SCHEMA. |
SELECT * FROM GV$SESSION;
|
BigQuery hat nicht das herkömmliche Sitzungskonzept. Sie können Abfragejobs in der UI aufrufen oder Stackdriver-Audit-Logs nach BigQuery exportieren und BigQuery-Logs zur Analyse von Jobs analysieren. Weitere Informationen finden Sie unter Jobdetails ansehen. |
START TRANSACTION;
|
Das Ersetzen des Inhalts einer Tabelle durch die Abfrageausgabe entspricht einer Transaktion. Sie können dazu entweder einen Abfragevorgang oder einen Kopiervorgang verwenden.
Abfrage verwenden:
Kopie verwenden:
|
Mehrfachanweisungen und mehrzeilige SQL-Anweisungen
Sowohl Oracle 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.
Fehlercodes und -meldungen
Oracle-Fehlercodes und BigQuery-Fehlercodes sind unterschiedlich. Wenn Ihre Anwendungslogik derzeit die Fehler erkennt, versuchen Sie, die Fehlerquelle zu beheben, da BigQuery nicht die gleichen Fehlercodes zurückgibt.
Konsistenzgarantien und Transaktionsisolation
Sowohl Oracle als auch BigQuery sind unteilbar, d. h. ACID-konform auf Mutationsebene über viele Zeilen hinweg. Zum Beispiel ist ein MERGE
-Vorgang vollständig unteilbar, auch wenn mehrere eingefügte und aktualisierte Werte vorhanden sind.
Transaktionen
Oracle bietet schreibgeschützte oder serialisierbare Transaktionsisolationsebenen. Deadlocks sind möglich. Oracle-Insert-Jobs werden unabhängig ausgeführt.
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 garantiert die gleiche Konsistenz auf Zeilen- und Mutationsbasis sowie zeilenübergreifend innerhalb derselben DML-Anweisung, vermeidet dabei jedoch Deadlocks. Bei mehreren UPDATE
-Anweisungen für dieselbe Tabelle wechselt BigQuery zu pessimistischer Gleichzeitigkeitserkennung und stellt mehrfache UPDATE
-Anweisungen in die Warteschlange. Bei Konflikten werden die Anweisungen automatisch wiederholt. INSERT
-DML-Anweisungen und Ladejobs können gleichzeitig und unabhängig ausgeführt werden, um Daten an Tabellen anzuhängen.
Rollback
Oracle unterstützt Rollbacks. Da es in BigQuery keine explizite Transaktionsgrenze gibt, gibt es kein Konzept eines expliziten Rollbacks in BigQuery. Diese Problemumgehungen sind Tabellen-Decorators oder FOR SYSTEM_TIME AS OF
.
Datenbanklimits
Sehen Sie sich die aktuellen BigQuery-Kontingente und -Limits an. Viele Kontingente für Nutzer mit hohem Datenvolumen können über die Cloud-Kundenbetreuung erhöht werden. Die folgende Tabelle zeigt einen Vergleich der Oracle- und BigQuery-Datenbanklimits.
Limit | Oracle | BigQuery |
---|---|---|
Tabellen pro Datenbank | Uneingeschränkt | Uneingeschränkt |
Spalten pro Tabelle | 1000 | 10.000 |
Maximale Zeilengröße | Unbegrenzt (hängt vom Spaltentyp ab) | 100 MB |
Länge des Spalten- und Tabellennamens | Wenn v12.2>= 128 Byte
Andernfalls 30 Byte |
16.384 Unicode-Zeichen |
Zeilen pro Tabelle | Unbegrenzt | Unbegrenzt |
Maximale Länge von SQL-Anfragen | Unbegrenzt | 1 MB (maximale Länge ungelöster Google SQL-Abfragen)
12 MB (maximale Länge gelöster Legacy- und Google SQL-Abfragen) Streaming:
|
Maximale Anfrage- und Antwortgröße | Unbegrenzt | 10 MB (Anfrage) und 10 GB (Antwort) oder praktisch unbegrenzt, wenn Sie den Seitenumbruch oder die Cloud Storage API verwenden. |
Maximale Anzahl gleichzeitiger Sitzungen | Eingeschränkt durch die Parameter für Sitzungen oder Prozesse | 100 gleichzeitige Abfragen (kann mit einer Slot-Reservierung erhöht werden), 300 gleichzeitige API-Anfragen pro Nutzer |
Maximale Anzahl gleichzeitiger (schneller) Ladevorgänge | Eingeschränkt durch die Parameter für Sitzungen oder Prozesse | Keine Beschränkung der Gleichzeitigkeit; Jobs werden in die Warteschlange gestellt. 100.000 Ladejobs pro Projekt und Tag. |
Weitere Oracle-Datenbanklimits umfassen Datentyplimits, physische Datenbanklimits, logische Datenbanklimits sowie Prozess- und Laufzeitlimits.