Gestionar sesiones y E/S de BigQuery DataFrames

En este documento se explica cómo gestionar sesiones y realizar operaciones de entrada y salida (E/S) al usar DataFrames de BigQuery. Aprenderás a crear y usar sesiones, trabajar con datos en memoria y leer y escribir en archivos y tablas de BigQuery.

Sesiones de BigQuery

BigQuery DataFrames usa un objeto de sesión local internamente para gestionar los metadatos. Cada objeto DataFrame y Series se conecta a una sesión, cada sesión se conecta a una ubicación y cada consulta de una sesión se ejecuta en la ubicación en la que has creado la sesión. Usa el siguiente ejemplo de código para crear una sesión manualmente y usarla para cargar datos:

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)

No puedes combinar datos de varias instancias de sesión, aunque las inicialices con los mismos ajustes. En el siguiente código de ejemplo se muestra que, si se intenta combinar datos de diferentes instancias de sesión, se produce un error:

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

Sesión global

BigQuery DataFrames proporciona una sesión global predeterminada a la que puedes acceder con el método bigframes.pandas.get_global_session(). En Colab, debes proporcionar un ID de proyecto para el atributo bigframes.pandas.options.bigquery.project antes de usarlo. También puedes definir una ubicación con el atributo bigframes.pandas.options.bigquery.location, que tiene como valor predeterminado la multirregión US.

En el siguiente código de ejemplo se muestra cómo definir opciones para la sesión global:

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

Para restablecer la ubicación o el proyecto de la sesión global, cierra la sesión actual ejecutando el método bigframes.pandas.close_session().

Muchas funciones integradas de BigQuery DataFrames usan la sesión global de forma predeterminada. En el siguiente código de ejemplo se muestra cómo usan las funciones integradas la sesión global:

# 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")

Datos en memoria

Puedes crear objetos Dataframes y Series con estructuras de datos de Python o NumPy integradas, de forma similar a como creas objetos con pandas. Usa el siguiente código de ejemplo para crear un objeto:

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))

Para convertir objetos pandas en objetos DataFrames mediante el método read_pandas() o los constructores, usa el siguiente código de ejemplo:

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)

Para usar el método to_pandas() para cargar datos de BigQuery DataFrames en tu memoria, usa el siguiente código de ejemplo:

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()

Estimación de costes con el parámetro dry_run

Cargar una gran cantidad de datos puede llevar mucho tiempo y consumir muchos recursos. Para ver la cantidad de datos que se están procesando, usa el parámetro dry_run=True en la llamada to_pandas(). Usa el siguiente código de ejemplo para hacer una prueba de funcionamiento:

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)

Leer y escribir archivos

Puedes leer datos de archivos compatibles en un DataFrame de BigQuery. Estos archivos pueden estar en tu máquina local o en Cloud Storage. Usa el siguiente código de ejemplo para leer datos de un archivo CSV:

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")

Para guardar tus DataFrames de BigQuery en archivos locales o de Cloud Storage con el método to_csv, usa el siguiente código de ejemplo:

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")

Leer y escribir tablas de BigQuery

Para crear DataFrames de BigQuery con referencias de tablas de BigQuery y la función bigframes.pandas.read_gbq, usa el siguiente código de ejemplo:

import bigframes.pandas as bpd

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

Para usar una cadena de SQL con la función read_gbq() para leer datos en DataFrames de BigQuery, usa el siguiente código de ejemplo:

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)

Para guardar tu objeto DataFrame en una tabla de BigQuery, usa el método to_gbq() de tu objeto DataFrame. En el siguiente código de ejemplo se muestra cómo hacerlo:

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}")

Siguientes pasos