ניהול סשנים וקלט/פלט של BigQuery DataFrames

ניהול הסשנים ופעולות הקלט/פלט ב-BigQuery DataFrames מאפשר לכם לשלוט בסביבת ההפעלה ולהעביר נתונים אל תהליכי העבודה ומחוצה להם. אתם יכולים להגדיר את הסשנים כדי לקבוע איפה השאילתות יופעלו, ולבצע פעולות קלט/פלט כדי לקרוא ולכתוב נתונים בזיכרון, קבצים ב-Cloud Storage וטבלאות ב-BigQuery.

סשנים ב-BigQuery

ב-BigQuery DataFrames נעשה שימוש פנימי באובייקט סשן מקומי כדי לנהל מטא-נתונים. כל אובייקט DataFrame ו-Series מתחבר לסשן, כל סשן מתחבר למיקום וכל שאילתה בסשן פועלת במיקום שבו יצרתם את הסשן. כדי ליצור סשן באופן ידני ולהשתמש בו לטעינת נתונים, משתמשים בדוגמת הקוד הבאה:

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)

אי אפשר לשלב נתונים מכמה מופעים של סשנים, גם אם מאתחלים אותם עם אותן הגדרות. בדוגמת הקוד הבאה אפשר לראות שניסיון לשלב נתונים ממופעי סשן שונים גורם לשגיאה:

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

סשן גלובלי

ב-BigQuery DataFrames יש סשן גלובלי שמוגדר כברירת מחדל, שאפשר לגשת אליו באמצעות השיטה bigframes.pandas.get_global_session(). ב-Colab, צריך לציין מזהה פרויקט במאפיין bigframes.pandas.options.bigquery.project לפני שמשתמשים בו. אפשר גם להגדיר מיקום באמצעות המאפיין bigframes.pandas.options.bigquery.location, שמוגדר כברירת מחדל למיקום US במספר אזורים.

בדוגמת הקוד הבאה אפשר לראות איך מגדירים אפשרויות לסשן הגלובלי:

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

כדי לאפס את המיקום או הפרויקט של הסשן הגלובלי, סוגרים את הסשן הנוכחי באמצעות הפעלת השיטה bigframes.pandas.close_session().

הרבה פונקציות מובנות של BigQuery DataFrames משתמשות בסשן הגלובלי כברירת מחדל. בדוגמת הקוד הבאה אפשר לראות איך פונקציות מובנות משתמשות בסשן הגלובלי:

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

נתונים בזיכרון

אתם יכולים ליצור אובייקטים של DataFrames ו-Series באמצעות מבני נתונים מובְנים של Python או NumPy, בדומה לאופן שבו אתם יוצרים אובייקטים באמצעות pandas. כדי ליצור אובייקט, משתמשים בדוגמת הקוד הבאה:

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

כדי להמיר אובייקטים מסוג pandas לאובייקטים מסוג DataFrames באמצעות ה-method או ה-constructors של read_pandas(), משתמשים בדוגמת הקוד הבאה:

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)

כדי להשתמש ב-to_pandas() כדי לטעון נתונים של BigQuery DataFrames לזיכרון, משתמשים בדוגמת הקוד הבאה:

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

אומדן עלויות באמצעות הפרמטר dry_run

טעינה של כמות גדולה של נתונים יכולה לקחת הרבה זמן ומשאבים. כדי לראות כמה נתונים מעובדים, משתמשים בפרמטר dry_run=True בקריאה ל-to_pandas(). כדי לבצע הרצת בדיקה, משתמשים בדוגמת הקוד הבאה:

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)

לקרוא ולכתוב קבצים

אתם יכולים לקרוא נתונים מקבצים תואמים ל-BigQuery DataFrames. הקבצים האלה יכולים להיות במחשב המקומי או ב-Cloud Storage. כדי לקרוא נתונים מקובץ 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")

כדי לשמור את BigQuery DataFrames בקבצים מקומיים או בקבצים ב-Cloud Storage באמצעות השיטה to_csv, משתמשים בדוגמת הקוד הבאה:

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

כדי ליצור BigQuery DataFrames באמצעות הפונקציה bigframes.pandas.read_gbq והפניות לטבלאות ב-BigQuery, השתמשו בדוגמת הקוד הבאה:

import bigframes.pandas as bpd

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

כדי להשתמש במחרוזת SQL עם הפונקציה read_gbq() כדי לקרוא נתונים ל-BigQuery DataFrames, השתמשו בדוגמת הקוד הבאה:

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)

כדי לשמור את האובייקט DataFrame בטבלה ב-BigQuery, משתמשים ב-method‏ to_gbq() של האובייקט DataFrame. דוגמת הקוד הבאה מראה איך עושים את זה:

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

המאמרים הבאים