Administra las sesiones y las operaciones de 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 archivos y tablas de BigQuery.

Sesiones de BigQuery

BigQuery DataFrames usa un objeto de sesión local para administrar metadatos de forma interna. Cada objeto DataFrame y Series se conecta a una sesión, cada sesión se conecta a una ubicación y cada consulta 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 la siguiente muestra de código, se muestra que intentar combinar datos de diferentes instancias de sesión causa 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 bigframes.pandas.get_global_session() método. En Colab, debes proporcionar un ID del proyecto para el bigframes.pandas.options.bigquery.project atributo antes de usarlo. También puedes establecer una ubicación con el atributo bigframes.pandas.options.bigquery.location, que, de forma predeterminada, es la US multirregión.

En el 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 la 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 la memoria

Puedes crear objetos DataFrames y Series con estructuras de datos integradas de Python o NumPy, de forma similar a cómo creas objetos con pandas. Usa la 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 read_pandas() método o los constructores, usa la 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 recursos. Para ver cuánto datos se procesan, usa el dry_run=True parámetro en la to_pandas() llamada. Usa el siguiente muestra de código para realizar una ejecución de prueba:

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)

Lee y escribe archivos

Puedes leer datos de archivos compatibles en un BigQuery DataFrames. Estos archivos pueden estar en tu máquina local o en Cloud Storage. Usa el siguiente código de muestra 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 archivos de Cloud Storage con el to_csv método, usa la 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 BigQuery DataFrames con referencias de tablas de BigQuery y la función bigframes.pandas.read_gbq, usa el siguiente código de muestra:

import bigframes.pandas as bpd

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

Para usar una cadena SQL con la read_gbq() función para leer datos en BigQuery DataFrames, usa la 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 DataFrame objeto en una tabla de BigQuery, usa el to_gbq() método de tu DataFrame objeto. En la 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?