Administra las sesiones y la E/S de BigQuery DataFrames

Administrar sesiones y operaciones de E/S en BigQuery DataFrames te permite controlar tu entorno de ejecución y mover datos dentro y fuera de tus flujos de trabajo. Puedes configurar tus sesiones para controlar dónde se ejecutan tus consultas y realizar operaciones de E/S para leer y escribir datos en la memoria, archivos de Cloud Storage 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 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 indica que, si intentas 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 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 indica 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 indica 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 forma similar a como 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 método o los constructores read_pandas(), 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() y cargar datos de BigQuery DataFrames en tu memoria, usa la 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ántos datos se procesan, usa el parámetro dry_run=True en la llamada to_pandas(). Usa la 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 la siguiente muestra 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 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 la siguiente muestra 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() 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 objeto DataFrame en una tabla de BigQuery, usa el método to_gbq() de tu objeto DataFrame. En la siguiente muestra de código, se indica 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?