Administra las sesiones y la E/S de BigQuery DataFrames

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

Sesiones de BigQuery

BigQuery DataFrames usa un objeto de sesión local de forma interna para administrar metadatos. Cada objeto DataFrame y Series se conecta a una sesión, cada sesión se conecta a una ubicación y cada búsqueda en una sesión se ejecuta en la ubicación en la que creaste la sesión. Usa la siguiente muestra de código para crear una sesión de forma manual 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, incluso si las inicializas con la misma configuración. En el siguiente muestra de código, se muestra que intentar combinar datos de diferentes instancias de sesión genera 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 del proyecto para el atributo bigframes.pandas.options.bigquery.project antes de usarlo. También puedes establecer una ubicación con el atributo bigframes.pandas.options.bigquery.location, que se establece de forma predeterminada en la multirregión US.

En la siguiente muestra de código, se muestra cómo establecer 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 muestra de código, se muestra cómo las funciones integradas usan 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 integradas de Python o NumPy, de manera similar a como creas objetos con pandas. Usa el siguiente muestra de código 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 con el método o los constructores read_pandas(), usa el siguiente muestra de código:

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 muestra de código:

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 costos 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 procesan, usa el parámetro dry_run=True en la llamada a to_pandas(). Usa la siguiente muestra de código para realizar una prueba de validación:

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 DataFrames. Estos archivos pueden estar en tu máquina local o en Cloud Storage. Usa el siguiente ejemplo de código 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 BigQuery DataFrames en archivos locales o de Cloud Storage con el método to_csv, usa el siguiente muestra de código:

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

Lee y escribe 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 ejemplo de código:

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() y leer datos en BigQuery DataFrames, usa el siguiente muestra de código:

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 muestra de código, 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}")

¿Qué sigue?