Datentypsystem von BigQuery DataFrames verwenden
Das Datentypsystem von BigQuery DataFrames basiert auf BigQuery-Datentypen. Dieses Design sorgt für eine nahtlose Integration und Abstimmung mit dem Google Cloud Data Warehouse und spiegelt die integrierten Typen wider, die für die Daten speicherung in BigQuery verwendet werden.
Typzuordnungen
In der folgenden Tabelle sind die Datentypentsprechungen 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) |
| List<T> | 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-Entsprechungen, sofern eine Typzuordnung definiert ist, wie im folgenden Beispiel gezeigt:
PyArrow bestimmt das Verhalten, wenn es Abweichungen zwischen den Datentypentsprechungen gibt. In seltenen Fällen, in denen die integrierte Python-Typfunktion anders als ihr PyArrow-Gegenstück funktioniert, bevorzugt BigQuery DataFrames im Allgemeinen das PyArrow-Verhalten, 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-Bibliothek für Datum und Uhrzeit, 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 im BigQuery
JSON-Format
(einem einfachen Standard) 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. Dies ist ein Arrow-Erweiterungstyp, der als einfache Wrapper-Funktion für pa.string() dient. Im Gegensatz dazu wird in neueren Setups (pandas 3.0 und höher und PyArrow 19.0 und höher) die neuere Darstellung pa.json_(pa.string()) verwendet.
timedelta
Für den Typ timedelta gibt es keine direkte Entsprechung im integrierten Typsystem von BigQuery. Zur Verwaltung von Zeitdifferenzdaten verwendet BigQuery DataFrames den Typ INT64 als zugrunde liegendes Speicherformat in BigQuery-Tabellen. Die Ergebnisse Ihrer Berechnungen sind mit dem Verhalten identisch, das Sie von entsprechenden Vorgängen 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 Mikrosekundengenauigkeit. Wenn Ihre Daten Nanosekunden enthalten, müssen Sie sie runden, um potenzielle Ausnahmen zu vermeiden, wie im folgenden Beispiel gezeigt:
Mit der bigframes.pandas.to_timedelta Funktion können Sie ein
BigQuery DataFrames Series Objekt 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 konvertiert und in INT64-Spalten gespeichert. Um die Typinformationen beizubehalten, fügt BigQuery DataFrames den String #microseconds an die Beschreibungen dieser Spalten an. Bei einigen Vorgängen wie SQL-Abfrageausführungen und UDF-Aufrufen bleiben Spaltenbeschreibungen nicht erhalten und die timedelta-Typinformationen 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 Objekt ListAccessor können Sie Vorgänge für jedes Listenelement ausführen, indem Sie die Listeneigenschaft des Objekts Series verwenden, wie im folgenden Beispiel gezeigt:
Struct-Zugriffsfunktion
Mit dem Objekt StructAccessor können Sie auf Felder in einer Reihe von Structs zugreifen und sie verarbeiten. Das API-Zugriffsobjekt ist series.struct, wie im folgenden Beispiel gezeigt:
Wenn das struct-Feld, auf das Sie zugreifen möchten, eindeutig von anderen Series-Eigenschaften zu unterscheiden 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-Zugriffsfunktion
Sie können mit der Eigenschaft str für ein Series-Objekt auf das Objekt StringAccessor zugreifen, wie im folgenden Beispiel gezeigt:
Geografie-Zugriffsfunktion
BigQuery DataFrames bietet ein Objekt GeographyAccessor, das ähnliche APIs wie die GeoSeries-Struktur der GeoPandas-Bibliothek verwendet. Sie können das Objekt GeographyAccessor mit der Eigenschaft geo für ein Series-Objekt aufrufen, wie im folgenden Beispiel gezeigt:
Nächste Schritte
- Informationen zu BigQuery DataFrames.
- Informationen zu BigQuery DataFrames-Sitzungen und ‑E/A
- Diagramme mit BigQuery DataFrames visualisieren .
- Referenz zur BigQuery DataFrames API