Daten mit BigQuery DataFrames bearbeiten

Mit BigQuery DataFrames können Sie Daten mithilfe vertrauter pandas-Syntaxmuster bearbeiten, ohne Datasets aus Ihrem Data Warehouse zu übertragen. Da diese Vorgänge serverseitig ausgeführt werden, können Sie Daten, die in BigQuery gespeichert sind, direkt prüfen, bearbeiten und komplexe Berechnungen darauf anwenden.

Weitere Informationen zu unterstützten Funktionen finden Sie in der Bibliothek bigframes.bigquery.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, damit Sie die nötigen Berechtigungen für die Aufgaben in diesem Dokument haben:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Wenn Sie die Endnutzerauthentifizierung in einer interaktiven Umgebung wie einem Notebook, der Python-REPL oder der Befehlszeile ausführen, fordert BigQuery DataFrames bei Bedarf zur Authentifizierung auf. Andernfalls lesen Sie in diesem Artikel zum Einrichten von Standardanmeldedaten für Anwendungen für verschiedene Umgebungen.

pandas API

Ein bemerkenswertes Feature von BigQuery DataFrames ist, dass die bigframes.pandas API den APIs in der pandas-Bibliothek ähnelt. Dank dieses Designs können Sie vertraute Syntaxmuster für Datenbearbeitungsaufgaben verwenden. Über die BigQuery DataFrames API definierte Vorgänge werden serverseitig ausgeführt und direkt auf in BigQuery gespeicherten Daten angewendet. Datasets müssen also nicht aus BigQuery übertragen werden.

Informationen dazu, welche pandas APIs von BigQuery DataFrames unterstützt werden, finden Sie unter Unterstützte pandas APIs.

Daten prüfen und bearbeiten

Sie können die bigframes.pandas API für Datenprüfungs- und Berechnungsvorgänge verwenden. Im folgenden Codebeispiel wird die Bibliothek bigframes.pandas verwendet, um die Spalte body_mass_g zu prüfen, den Mittelwert body_mass zu berechnen und den Mittelwert body_mass nach species zu berechnen:

import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Inspect one of the columns (or series) of the DataFrame:
bq_df["body_mass_g"]

# Compute the mean of this series:
average_body_mass = bq_df["body_mass_g"].mean()
print(f"average_body_mass: {average_body_mass}")

# Find the heaviest species using the groupby operation to calculate the
# mean body_mass_g:
(
    bq_df["body_mass_g"]
    .groupby(by=bq_df["species"])
    .mean()
    .sort_values(ascending=False)
    .head(10)
)

BigQuery-Bibliothek

Die BigQuery-Bibliothek bietet BigQuery-SQL-Funktionen, für die es möglicherweise kein Pandas-Äquivalent gibt. In den folgenden Abschnitten werden einige Beispiele erläutert.

Array-Werte verarbeiten

Mit der Funktion bigframes.bigquery.array_agg() in der Bibliothek bigframes.bigquery können Sie Werte nach einem groupby-Vorgang aggregieren:

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

s = bpd.Series([0, 1, 2, 3, 4, 5])

# Group values by whether they are divisble by 2 and aggregate them into arrays
bbq.array_agg(s.groupby(s % 2 == 0))
# False    [1 3 5]
# True     [0 2 4]
# dtype: list<item: int64>[pyarrow]

Sie können auch die Arrayfunktionen array_length() und array_to_string() verwenden.

Struct-Series-Objekt erstellen

Mit der Funktion bigframes.bigquery.struct() in der Bibliothek bigframes.bigquery können Sie ein neues Struktur-Series-Objekt mit Unterfeldern für jede Spalte in einem DataFrame erstellen:

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Create a new STRUCT Series with subfields for each column in a DataFrames.
lengths = bbq.struct(
    bq_df[["culmen_length_mm", "culmen_depth_mm", "flipper_length_mm"]]
)

lengths.peek()
# 146	{'culmen_length_mm': 51.1, 'culmen_depth_mm': ...
# 278	{'culmen_length_mm': 48.2, 'culmen_depth_mm': ...
# 337	{'culmen_length_mm': 36.4, 'culmen_depth_mm': ...
# 154	{'culmen_length_mm': 46.5, 'culmen_depth_mm': ...
# 185	{'culmen_length_mm': 50.1, 'culmen_depth_mm': ...
# dtype: struct[pyarrow]

Zeitstempel in Unix-Epochen umwandeln

Mit der Funktion bigframes.bigquery.unix_micros() in der Bibliothek bigframes.bigquery können Sie Zeitstempel in Unix-Mikrosekunden konvertieren:

import pandas as pd

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

# Create a series that consists of three timestamps: [1970-01-01, 1970-01-02, 1970-01-03]
s = bpd.Series(pd.date_range("1970-01-01", periods=3, freq="d", tz="UTC"))

bbq.unix_micros(s)
# 0               0
# 1     86400000000
# 2    172800000000
# dtype: Int64

Sie können auch die Zeitfunktionen unix_seconds() und unix_millis() verwenden.

SQL-Skalarfunktion verwenden

Mit der Funktion bigframes.bigquery.sql_scalar() in der Bibliothek bigframes.bigquery können Sie auf eine beliebige SQL-Syntax zugreifen, die einen einspaltigen Ausdruck darstellt:

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"

# The sql_scalar function can be used to inject SQL syntax that is not supported
# or difficult to express with the bigframes.pandas APIs.
bq_df = bpd.read_gbq(query_or_table)
shortest = bbq.sql_scalar(
    "LEAST({0}, {1}, {2})",
    columns=[
        bq_df["culmen_depth_mm"],
        bq_df["culmen_length_mm"],
        bq_df["flipper_length_mm"],
    ],
)

shortest.peek()
#         0
# 149	18.9
# 33	16.3
# 296	17.2
# 287	17.0
# 307	15.0
# dtype: Float64

Nächste Schritte