BigQuery DataFrames-Sitzungen und ‑E/A verwalten

In diesem Dokument wird erläutert, wie Sie Sitzungen verwalten und Ein- und Ausgabevorgänge ausführen, wenn Sie BigQuery DataFrames verwenden. Sie erfahren, wie Sie Sitzungen erstellen und verwenden, mit In-Memory-Daten arbeiten und Daten aus Dateien und BigQuery-Tabellen lesen und in Dateien und BigQuery-Tabellen schreiben.

BigQuery-Sitzungen

BigQuery DataFrames verwendet ein lokales Sitzungsobjekt, um Metadaten intern zu verwalten. Jedes DataFrame- und Series-Objekt ist mit einer Sitzung verbunden, jede Sitzung ist mit einem Standort verbunden und jede Abfrage in einer Sitzung wird an dem Standort ausgeführt, an dem Sie die Sitzung erstellt haben. Mit dem folgenden Codebeispiel können Sie eine Sitzung manuell erstellen und zum Laden von Daten verwenden:

import bigframes
import bigframes.pandas as bpd

# Create session object
context = bigframes.BigQueryOptions(
    project=YOUR_PROJECT_ID,
    location=YOUR_LOCATION,
)
session = bigframes.Session(context)

# Load a BigQuery table into a dataframe
df1 = session.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Create a dataframe with local data:
df2 = bpd.DataFrame({"my_col": [1, 2, 3]}, session=session)

Sie können keine Daten aus mehreren Sitzungsinstanzen kombinieren, auch wenn Sie sie mit denselben Einstellungen initialisieren. Das folgende Codebeispiel zeigt, dass beim Versuch, Daten aus verschiedenen Sitzungsinstanzen zu kombinieren, ein Fehler auftritt:

import bigframes
import bigframes.pandas as bpd

context = bigframes.BigQueryOptions(location=YOUR_LOCATION, project=YOUR_PROJECT_ID)

session1 = bigframes.Session(context)
session2 = bigframes.Session(context)

series1 = bpd.Series([1, 2, 3, 4, 5], session=session1)
series2 = bpd.Series([1, 2, 3, 4, 5], session=session2)

try:
    series1 + series2
except ValueError as e:
    print(e)  # Error message: Cannot use combine sources from multiple sessions

Globale Sitzung

BigQuery DataFrames bietet eine globale Standardsitzung, auf die Sie mit der Methode bigframes.pandas.get_global_session() zugreifen können. In Colab müssen Sie eine Projekt-ID für das Attribut bigframes.pandas.options.bigquery.project angeben, bevor Sie es verwenden können. Sie können auch einen Standort mit dem Attribut bigframes.pandas.options.bigquery.location festlegen. Standardmäßig wird die Multi-Region US verwendet.

Das folgende Codebeispiel zeigt, wie Sie Optionen für die globale Sitzung festlegen:

import bigframes.pandas as bpd

# Set project ID for the global session
bpd.options.bigquery.project = YOUR_PROJECT_ID
# Update the global default session location
bpd.options.bigquery.location = YOUR_LOCATION

Wenn Sie den Standort oder das Projekt der globalen Sitzung zurücksetzen möchten, schließen Sie die aktuelle Sitzung mit der Methode bigframes.pandas.close_session().

Viele integrierte Funktionen von BigQuery DataFrames verwenden standardmäßig die globale Sitzung. Das folgende Codebeispiel zeigt, wie integrierte Funktionen die globale Sitzung verwenden:

# The following two statements are essentially the same
df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")
df = bpd.get_global_session().read_gbq("bigquery-public-data.ml_datasets.penguins")

In-Memory-Daten

Sie können Dataframes- und Series-Objekte mit integrierten Python- oder NumPy-Datenstrukturen erstellen, ähnlich wie Sie Objekte mit pandas erstellen. Verwenden Sie das folgende Codebeispiel, um ein Objekt zu erstellen:

import numpy as np

import bigframes.pandas as bpd

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

# Create a dataframe with Python dict
df = bpd.DataFrame(
    {
        "col_1": [1, 2, 3],
        "col_2": [4, 5, 6],
    }
)

# Create a series with Numpy
s = bpd.Series(np.arange(10))

Verwenden Sie das folgende Codebeispiel, um pandas-Objekte mit der Methode oder den Konstruktoren read_pandas() in DataFrames-Objekte zu konvertieren:

import numpy as np
import pandas as pd

import bigframes.pandas as bpd

pd_df = pd.DataFrame(np.random.randn(4, 2))

# Convert Pandas dataframe to BigQuery DataFrame with read_pandas()
df_1 = bpd.read_pandas(pd_df)
# Convert Pandas dataframe to BigQuery DataFrame with the dataframe constructor
df_2 = bpd.DataFrame(pd_df)

Wenn Sie die Methode to_pandas() verwenden möchten, um BigQuery DataFrames-Daten in den Arbeitsspeicher zu laden, verwenden Sie das folgende Codebeispiel:

import bigframes.pandas as bpd

bf_df = bpd.DataFrame({"my_col": [1, 2, 3]})
# Returns a Pandas Dataframe
bf_df.to_pandas()

bf_s = bpd.Series([1, 2, 3])
# Returns a Pandas Series
bf_s.to_pandas()

Kostenschätzung mit dem Parameter dry_run

Das Laden großer Datenmengen kann viel Zeit und Ressourcen in Anspruch nehmen. Um zu sehen, wie viele Daten verarbeitet werden, verwenden Sie den Parameter dry_run=True im Aufruf to_pandas(). Verwenden Sie das folgende Codebeispiel, um einen Probelauf durchzuführen:

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Returns a Pandas series with dry run stats
df.to_pandas(dry_run=True)

Dateien lesen und schreiben

Sie können Daten aus kompatiblen Dateien in ein BigQuery DataFrames-DataFrame einlesen. Diese Dateien können sich auf Ihrem lokalen Computer oder in Cloud Storage befinden. Verwenden Sie das folgende Codebeispiel, um Daten aus einer CSV-Datei zu lesen:

import bigframes.pandas as bpd

# Read a CSV file from GCS
df = bpd.read_csv("gs://cloud-samples-data/bigquery/us-states/us-states.csv")

Wenn Sie Ihre BigQuery DataFrames mit der Methode to_csv in lokalen Dateien oder Cloud Storage-Dateien speichern möchten, verwenden Sie das folgende Codebeispiel:

import bigframes.pandas as bpd

df = bpd.DataFrame({"my_col": [1, 2, 3]})
# Write a dataframe to a CSV file in GCS
df.to_csv(f"gs://{YOUR_BUCKET}/myfile*.csv")

BigQuery-Tabellen lesen und schreiben

Wenn Sie BigQuery DataFrames mit BigQuery-Tabellenreferenzen und der Funktion bigframes.pandas.read_gbq erstellen möchten, verwenden Sie das folgende Codebeispiel:

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

Wenn Sie einen SQL-String mit der Funktion read_gbq() verwenden möchten, um Daten in BigQuery DataFrames einzulesen, verwenden Sie das folgende Codebeispiel:

import bigframes.pandas as bpd

sql = """
SELECT species, island, body_mass_g
FROM bigquery-public-data.ml_datasets.penguins
WHERE sex = 'MALE'
"""

df = bpd.read_gbq(sql)

Wenn Sie Ihr DataFrame-Objekt in einer BigQuery-Tabelle speichern möchten, verwenden Sie die Methode to_gbq() Ihres DataFrame-Objekts. Das folgende Codebeispiel zeigt, wie das geht:

import bigframes.pandas as bpd

df = bpd.DataFrame({"my_col": [1, 2, 3]})

df.to_gbq(f"{YOUR_PROJECT_ID}.{YOUR_DATASET_ID}.{YOUR_TABLE_NAME}")

Nächste Schritte