Python中如何通过Polars API直接读写BigQuery表?
Polars 与 BigQuery 原生集成方案
从 BigQuery 读取数据
Polars 支持两种原生读取方式,无需转换为 Pandas:
方式1:通过 SQLAlchemy 连接读取
依赖 google-cloud-bigquery 和 sqlalchemy-bigquery 库实现数据库连接:
pip install polars google-cloud-bigquery sqlalchemy-bigquery
代码示例:
import polars as pl from sqlalchemy import create_engine # 初始化 BigQuery SQLAlchemy 引擎 engine = create_engine( "bigquery://<你的GCP项目ID>", credentials_path="<你的服务账号密钥路径>" ) # 直接执行查询并返回 Polars DataFrame df = pl.read_database( query="SELECT * FROM `项目ID.数据集ID.表名` LIMIT 1000", connection=engine )
方式2:基于 Arrow 格式读取(性能更优)
利用 BigQuery 的 Arrow 导出能力,直接将查询结果转为 Polars DataFrame:
from google.cloud import bigquery import polars as pl client = bigquery.Client(project="<你的GCP项目ID>") query_job = client.query("SELECT * FROM `项目ID.数据集ID.表名` LIMIT 1000") # 直接将 Arrow 结果转为 Polars DataFrame df = pl.from_arrow(query_job.to_arrow())
将 Polars DataFrame 写入 BigQuery
同样提供两种原生写入方案:
方式1:使用 write_database() 方法
import polars as pl from sqlalchemy import create_engine engine = create_engine( "bigquery://<你的GCP项目ID>", credentials_path="<你的服务账号密钥路径>" ) # 写入数据,支持 replace/append/fail 三种写入策略 df.write_database( table_name="<数据集ID.目标表名>", connection=engine, if_exists="replace" )
方式2:基于 Arrow 格式写入(大场景推荐)
借助 Polars 与 Arrow 的原生兼容性,直接写入避免额外转换:
from google.cloud import bigquery import polars as pl client = bigquery.Client(project="<你的GCP项目ID>") job_config = bigquery.LoadJobConfig( write_disposition="WRITE_TRUNCATE" # 可选:WRITE_TRUNCATE/WRITE_APPEND/WRITE_EMPTY ) # Polars DataFrame 转 Arrow Table arrow_table = df.to_arrow() # 加载到 BigQuery load_job = client.load_table_from_arrow( arrow_table, "<项目ID.数据集ID.目标表名>", job_config=job_config ) load_job.result() # 等待写入完成
关键注意事项
- 确保已完成 GCP 身份认证(服务账号密钥或环境变量认证均可)
- 超大规模数据集优先选择 Arrow 交互方式,性能远高于 Pandas 中转方案
- 注意
sqlalchemy-bigquery与 SQLAlchemy、Polars 的版本兼容性
内容的提问来源于stack exchange,提问作者Emiliano Moreno M.
相关产品推荐
相关产品推荐

