BigQuery DataFrames 데이터 유형 시스템 사용
BigQuery DataFrames 데이터 유형 시스템은 BigQuery 데이터 유형을 기반으로 빌드됩니다. 이 설계는Google Cloud 데이터 웨어하우스와의 원활한 통합 및 정렬을 보장하며 BigQuery의 데이터 저장에 사용되는 내장 유형을 반영합니다.
유형 매핑
다음 표에는 BigQuery, BigQuery DataFrames, 기타 Python 라이브러리의 데이터 유형과 지원 수준이 나와 있습니다.
데이터 유형 | BigQuery | BigQuery DataFrames | Python 내장 | PyArrow |
---|---|---|---|---|
불리언 | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
정수 | INT64 |
pandas.Int64Dtype() |
int |
int64() |
부동 소수점 수 | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
문자열 | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
바이트 | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
날짜 | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
시간 | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
날짜/시간 | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
타임스탬프 | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime (시간대 포함) |
timestamp("us", tz="UTC") |
숫자 | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
큰 숫자 | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
목록 |
ARRAY <T> |
pandas.ArrowDtype(pyarrow.list_(T)) |
list[T] |
list_(T) |
구조체 | STRUCT |
pandas.ArrowDtype(pyarrow.struct()) |
dict |
struct() |
JSON | JSON |
pandas 버전 3.0 이상 및 PyArrow 버전 19.0 이상에서는 pandas.ArrowDtype(pyarrow.json_(pa.string()) 입니다. 그렇지 않으면 JSON 열이 pandas.ArrowDtype(db_dtypes.JSONArrowType()) 으로 노출됩니다. 이 기능은 미리보기 상태입니다. |
지원되지 않음 | json_() (미리보기) |
지역 | GEOGRAPHY |
Geopandas.array.GeometryDtype() to_pandas() 에서만 지원됩니다. |
지원되지 않음 | 지원되지 않음 |
Timedelta | 지원되지 않음 | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
유형 변환
로컬 데이터와 함께 사용되는 경우 BigQuery DataFrames는 유형 매핑이 정의된 모든 위치에서 데이터 유형을 해당 BigQuery DataFrames 유형으로 변환합니다. 다음 예를 참고하세요.
데이터 유형이 서로 다른 경우 PyArrow가 동작을 결정합니다. Python 내장 유형이 PyArrow 대응 항목과 다르게 작동하는 드문 경우에 BigQuery DataFrames는 일반적으로 일관성을 유지하기 위해 PyArrow 동작을 선호합니다.
다음 코드 샘플에서는 datetime.date + timedelta
작업을 사용하여 Python datetime 라이브러리와 달리 BigQuery DataFrames는 타임스탬프 인스턴스를 반환하여 PyArrow 동작을 따르는 것을 보여줍니다.
특수 유형
다음 섹션에서는 BigQuery DataFrames에서 사용하는 특수 데이터 유형을 설명합니다.
JSON
BigQuery DataFrames 내에서 BigQuery JSON 형식(경량 표준)을 사용하는 열은 pandas.ArrowDtype
로 표시됩니다. 정확한 기본 Arrow 유형은 라이브러리 버전에 따라 다릅니다. 이전 환경에서는 일반적으로 호환성을 위해 db_dtypes.JSONArrowType()
를 사용합니다. 이는 pa.string()
주변의 경량 래퍼 역할을 하는 Arrow 확장 프로그램 유형입니다. 반면 최신 설정 (pandas 3.0 이상 및 PyArrow 19.0 이상)에서는 최신 pa.json_(pa.string())
표현을 활용합니다.
timedelta
timedelta
유형은 BigQuery 기본 유형 시스템에 직접 상응하는 유형이 없습니다. 기간 데이터를 관리하기 위해 BigQuery DataFrames는 BigQuery 테이블에서 INT64
유형을 기본 저장소 형식으로 사용합니다. 계산 결과는 pandas 라이브러리로 실행되는 동등한 작업에서 예상되는 동작과 일치합니다.
다음 예와 같이 timedelta
값을 BigQuery DataFrame 및 Series
객체에 직접 로드할 수 있습니다.
pandas와 달리 BigQuery DataFrames는 마이크로초 정밀도의 timedelta
값만 지원합니다. 데이터에 나노초가 포함된 경우 다음 예와 같이 잠재적인 예외를 방지하기 위해 반올림해야 합니다.
다음 예와 같이 bigframes.pandas.to_timedelta
함수를 사용하여 BigQuery DataFrames Series
객체를 timedelta
유형으로 변환할 수 있습니다.
timedelta
값이 포함된 데이터를 BigQuery 테이블에 로드하면 값이 마이크로초로 변환되어 INT64
열에 저장됩니다. 유형 정보를 유지하기 위해 BigQuery DataFrames는 이러한 열의 설명에 #microseconds
문자열을 추가합니다. SQL 쿼리 실행 및 UDF 호출과 같은 일부 작업은 열 설명을 유지하지 않으며 이러한 작업이 완료된 후 timedelta
유형 정보가 손실됩니다.
복합 유형 도구
특정 복합 유형의 경우 BigQuery DataFrames는 이러한 유형 내의 기본 값에 액세스하고 이를 처리할 수 있는 도구를 제공합니다.
목록 접근자
ListAccessor
객체를 사용하면 다음 예와 같이 Series
객체의 목록 속성을 사용하여 각 목록 요소에 작업을 실행할 수 있습니다.
구조체 접근자
StructAccessor
객체는 일련의 구조체에서 필드에 액세스하고 필드를 처리할 수 있습니다. API 액세스 도구 객체는 다음 예와 같이 series.struct
입니다.
액세스하려는 struct
필드가 다른 Series
속성과 명확하게 구분되는 경우 다음 예와 같이 struct
호출을 건너뛸 수 있습니다.
하지만 필드에 액세스할 때는 struct
를 사용하는 것이 좋습니다. 코드를 더 쉽게 이해할 수 있고 오류가 발생할 가능성이 줄어들기 때문입니다.
문자열 접근자
다음 예와 같이 Series
객체의 str
속성을 사용하여 StringAccessor
객체에 액세스할 수 있습니다.
지리 접근자
BigQuery DataFrames는 GeoPandas 라이브러리에서 제공하는 GeoSeries 구조와 유사한 API를 공유하는 GeographyAccessor
객체를 제공합니다. 다음 예와 같이 Series
객체에서 geo
속성을 사용하여 GeographyAccessor
객체를 호출할 수 있습니다.
다음 단계
- BigQuery DataFrames를 사용하는 방법을 알아보세요.
- BigQuery DataFrames를 사용하여 그래프를 시각화하는 방법 알아보기
- BigQuery DataFrames API 참조 살펴보기