Datentypsystem von BigQuery DataFrames verwenden
Das Datentypsystem von BigQuery DataFrames basiert auf BigQuery-Datentypen. Dieses Design sorgt für eine nahtlose Integration und Ausrichtung auf dasGoogle Cloud Data Warehouse und spiegelt die integrierten Typen wider, die für die Datenspeicherung in BigQuery verwendet werden.
Typzuordnungen
In der folgenden Tabelle sind die entsprechenden Datentypen in BigQuery, BigQuery DataFrames und anderen Python-Bibliotheken sowie die jeweiligen Unterstützungsstufen aufgeführt:
Datentyp | BigQuery | BigQuery DataFrames | Integrierte Python-Funktion | PyArrow |
---|---|---|---|---|
Boolesch | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
Ganzzahl | INT64 |
pandas.Int64Dtype() |
int |
int64() |
Float | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
String | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
Byte | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
Datum | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
Zeit | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
Datum/Uhrzeit | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
Zeitstempel | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime mit Zeitzone |
timestamp("us", tz="UTC") |
Numerisch | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
Große numerische Werte | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
Liste |
ARRAY <T> |
pandas.ArrowDtype(pyarrow.list_(T)) |
list[T] |
list_(T) |
Struct | STRUCT |
pandas.ArrowDtype(pyarrow.struct()) |
dict |
struct() |
JSON | JSON |
pandas.ArrowDtype(pyarrow.json_(pa.string()) in pandas-Version 3.0 oder höher und PyArrow-Version 19.0 oder höher. Andernfalls werden JSON-Spalten als pandas.ArrowDtype(db_dtypes.JSONArrowType()) dargestellt. Diese Feature befindet sich im Vorschaumodus. |
Nicht unterstützt | json_() (Vorschau) |
Geografie | GEOGRAPHY |
Geopandas.array.GeometryDtype() Wird nur von to_pandas() unterstützt. |
Nicht unterstützt | Nicht unterstützt |
Zeitdifferenz | Nicht unterstützt | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Typkonvertierungen
Bei Verwendung mit lokalen Daten konvertiert BigQuery DataFrames Datentypen in die entsprechenden BigQuery DataFrames-Äquivalente, sofern eine Typzuordnung definiert ist, wie im folgenden Beispiel gezeigt:
PyArrow bestimmt das Verhalten, wenn es Abweichungen zwischen den entsprechenden Datentypen gibt. In seltenen Fällen, in denen sich der integrierte Python-Typ anders verhält als das PyArrow-Pendant, wird in BigQuery DataFrames in der Regel das PyArrow-Verhalten bevorzugt, um die Konsistenz zu gewährleisten.
Im folgenden Codebeispiel wird der Vorgang datetime.date + timedelta
verwendet, um zu zeigen, dass BigQuery DataFrames im Gegensatz zur Python-Datetime-Bibliothek, die weiterhin eine Datumsinstanz zurückgibt, dem PyArrow-Verhalten folgt und eine Zeitstempelinstanz zurückgibt:
Spezielle Typen
In den folgenden Abschnitten werden die speziellen Datentypen beschrieben, die von BigQuery DataFrames verwendet werden.
JSON
In BigQuery DataFrames werden Spalten, die das JSON-Format von BigQuery (ein einfacher Standard) verwenden, durch pandas.ArrowDtype
dargestellt. Der genaue zugrunde liegende Arrow-Typ hängt von Ihren Bibliotheksversionen ab. In älteren Umgebungen wird in der Regel db_dtypes.JSONArrowType()
für die Kompatibilität verwendet. Das ist ein Arrow-Erweiterungstyp, der als einfacher Wrapper für pa.string()
fungiert. Neuere Setups (pandas 3.0 und höher sowie PyArrow 19.0 und höher) verwenden dagegen die neuere pa.json_(pa.string())
-Darstellung.
timedelta
Der Typ timedelta
hat im nativen Typsystem von BigQuery kein direktes Äquivalent. Zur Verwaltung von Zeitrahmendaten verwendet BigQuery DataFrames den Typ INT64
als zugrunde liegendes Speicherformat in BigQuery-Tabellen. Die Ergebnisse Ihrer Berechnungen sollten dem Verhalten entsprechen, das Sie von gleichwertigen Operationen mit der Pandas-Bibliothek erwarten würden.
Sie können timedelta
-Werte direkt in BigQuery DataFrames und Series
-Objekte laden, wie im folgenden Beispiel gezeigt:
Im Gegensatz zu Pandas unterstützt BigQuery DataFrames nur timedelta
-Werte mit Mikrosekundenpräzision. Wenn Ihre Daten Nanosekunden enthalten, müssen Sie sie runden, um potenzielle Ausnahmen zu vermeiden, wie im folgenden Beispiel gezeigt:
Mit der Funktion bigframes.pandas.to_timedelta
können Sie ein BigQuery DataFrames-Objekt vom Typ Series
in den Typ timedelta
umwandeln, wie im folgenden Beispiel gezeigt:
Wenn Sie Daten mit timedelta
-Werten in eine BigQuery-Tabelle laden, werden die Werte in Mikrosekunden umgerechnet und in INT64
-Spalten gespeichert. Um die Typinformationen beizubehalten, fügt BigQuery DataFrames den Beschreibungen dieser Spalten den String #microseconds
hinzu. Bei einigen Vorgängen, z. B. der Ausführung von SQL-Abfrage und dem Aufrufen von UDFs, bleiben Spaltenbeschreibungen nicht erhalten. Die Typinformationen für timedelta
gehen nach Abschluss dieser Vorgänge verloren.
Tools für zusammengesetzte Typen
Für bestimmte zusammengesetzte Typen bietet BigQuery DataFrames Tools, mit denen Sie auf die Elementwerte in diesen Typen zugreifen und sie verarbeiten können.
Listenzugriffsfunktion
Mit dem ListAccessor
-Objekt können Sie Vorgänge für jedes Listenelement ausführen. Verwenden Sie dazu die Listeneigenschaft des Series
-Objekts, wie im folgenden Beispiel gezeigt:
Struct-Accessor
Das StructAccessor
-Objekt kann auf Felder in einer Reihe von Strukturen zugreifen und diese verarbeiten. Das API-Accessor-Objekt ist series.struct
, wie im folgenden Beispiel gezeigt:
Wenn das struct
-Feld, auf das Sie zugreifen möchten, eindeutig von anderen Series
-Properties ist, können Sie den Aufruf von struct
überspringen, wie im folgenden Beispiel gezeigt:
Es empfiehlt sich jedoch, struct
für den Zugriff auf Felder zu verwenden, da dies den Code verständlicher und weniger fehleranfällig macht.
String-Accessor
Sie können mit dem Attribut str
eines Series
-Objekts auf das StringAccessor
-Objekt zugreifen, wie im folgenden Beispiel gezeigt:
Zugriffsberechtigter für geografische Daten
BigQuery DataFrames bietet ein GeographyAccessor
-Objekt, das ähnliche APIs wie die GeoSeries-Struktur der GeoPandas-Bibliothek hat. Sie können das GeographyAccessor
-Objekt mit dem Attribut geo
für ein Series
-Objekt aufrufen, wie im folgenden Beispiel gezeigt:
Nächste Schritte
- BigQuery DataFrames verwenden
- Diagramme mit BigQuery DataFrames visualisieren
- Referenz zur BigQuery DataFrames API