BigQuery에서 Ibis 변환 실행하기
Python 저장소에서 최신 transforms-tables를 설치하고 BigQuery 소스의 code imports와 export controls를 준비합니다. 입력과 출력은 모두 같은 BigQuery 소스 연결의 가상 테이블이어야 합니다.
Foundry는 선언한 가상 입력과 출력의 연결 정보로 BigQuery용 Ibis 연결을 구성합니다. IbisInput.table()로 지연 테이블 표현식을 얻고, IbisOutput.write()에 표현식을 전달하여 결과를 외부 출력 테이블에 씁니다. Ibis의 SQL 생성 백엔드는 DataFrame 표현식을 외부 엔진이 실행할 쿼리로 변환합니다.
전체 입력을 출력에 복사하기
다음은 입력 테이블 표현식을 그대로 쓰는 전체 변환입니다. 경로, 소스 RID, Google Cloud 프로젝트와 dataset 및 테이블 이름은 가상의 값이며 실제 연결 정보로 바꿉니다.
from transforms.api import transform
from transforms.tables import (
BigQueryTable,
IbisInput,
IbisOutput,
TableInput,
TableOutput,
)
SOURCE_RID = "ri.magritte..source.00000000-0000-0000-0000-000000000001"
@transform.bigquery.using(
source_table=TableInput("/Example Project/Inputs/bigquery_table"),
output_table=TableOutput(
"/Example Project/Outputs/bigquery_copy",
SOURCE_RID,
BigQueryTable("GOOGLE_CLOUD_PROJECT", "DATASET", "OUTPUT_TABLE"),
),
)
def compute(source_table: IbisInput, output_table: IbisOutput):
table = source_table.table()
output_table.write(table)
선언에는 Foundry Spark용 transform.spark.using() 대신 BigQuery 전용 선언을 사용합니다. BigQueryTable의 project는 Google Cloud 프로젝트 ID, dataset은 BigQuery 네임스페이스, table은 그 안의 테이블 이름입니다.
실제 계산을 추가할 때는 Ibis 표현식에 필요한 열 선택, 필터와 집계를 적용한 뒤 결과 표현식을 씁니다. 로컬에서 결과를 실행해 Pandas로 수집하는 호출은 외부 계산만 조율하는 경로와 데이터 이동 비용이 다릅니다.
@incremental을 이용한 BigQuery pushdown 증분 계산은 지원하지 않습니다. 생성 후 출력 소스와 외부 위치를 바꾸면 checks가 실패하므로 출력 등록 계약을 따릅니다.