BigQuery DataFrames 세션 및 I/O 관리

이 문서에서는 BigQuery DataFrames를 사용할 때 세션을 관리하고 입력 및 출력 (I/O) 작업을 수행하는 방법을 설명합니다. 세션을 만들고 사용하는 방법, 인메모리 데이터로 작업하는 방법, 파일 및 BigQuery 테이블에서 읽고 쓰는 방법을 알아봅니다.

BigQuery 세션

BigQuery DataFrames는 로컬 세션 객체를 내부적으로 사용하여 메타데이터를 관리합니다. 각 DataFrameSeries 객체는 세션에 연결되고, 각 세션은 위치에 연결되며, 각 쿼리는 세션을 만든 위치에서 실행됩니다. 다음 코드 샘플을 사용하여 세션을 수동으로 만들고 데이터 로드에 사용합니다.

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 속성을 사용하기 전에 프로젝트 ID를 제공해야 합니다. 속성으로 위치를 설정할 수도 있습니다. 기본값은 US 멀티 리전입니다.bigframes.pandas.options.bigquery.location

다음 코드 샘플은 전역 세션의 옵션을 설정하는 방법을 보여줍니다.

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

인메모리 데이터

pandas로 객체를 만드는 방법과 마찬가지로 기본 제공 Python 또는 NumPy 데이터 구조를 사용하여 DataFramesSeries 객체를 만들 수 있습니다. 다음 코드 샘플을 사용하여 객체를 만듭니다.

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

read_pandas() 메서드 또는 생성자를 사용하여 pandas 객체를 DataFrames 객체로 변환하려면 다음 코드 샘플을 사용합니다.

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

`to_csv` 메서드를 사용하여 BigQuery DataFrames를 로컬 파일 또는 Cloud Storage 파일 에 저장하려면 다음 코드 샘플을 사용합니다.

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 테이블 참조 및 bigframes.pandas.read_gbq 함수를 사용하여 BigQuery DataFrames를 만들려면 다음 코드 샘플을 사용합니다.

import bigframes.pandas as bpd

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

read_gbq() 함수와 함께 SQL 문자열을 사용하여 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 테이블에 저장하려면 DataFrame 객체의 to_gbq() 메서드를 사용합니다. 다음 코드 샘플은 이 작업을 수행하는 방법을 보여줍니다.

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

다음 단계