【问题标题】:How to insert query result into BigQuery prefixed table如何将查询结果插入 BigQuery 前缀表
【发布时间】:2017-11-03 16:01:21
【问题描述】:
我正在使用 Python 客户端库 V0.28 开发 BigQuery。我想将表查询结果插入流式表(每天一个分区)。
我有 2 张桌子:
- Table_A 包含我的源数据
- table_B 将在经过一些处理后从 table_A 中丰富(table_B_20101001,table_B_20101002,...)。
我浏览了文档,但没有找到示例。有人可以帮助我吗?
非常感谢!
【问题讨论】:
标签:
python
python-2.7
google-bigquery
【解决方案1】:
根据您的描述,您的 table B 似乎实际上并未分区,而是按后缀日期聚合。
您可以做的一件事是运行查询并将其设置为将结果保存到所需的表中,如下所示:
import os
from google.cloud.bigquery import Client, job
os.environ['GOOGLE_APPLICATION_CREDENTIALS']='path/to/your/credentials.json'
config = job.QueryJobConfig()
config.write_disposition = 'WRITE_APPEND'
dataset = bc.dataset('name of dataset where table_B is located')
table = dataset.table('table_B_20101001')
config.destination = table
query = """select (make the data transformations you want) FROM table_A"""
query_job = bc.query(query, config)
此脚本查询源table_A,进行所需的数据转换并将结果保存到table_B_20101001(相应更改)。
该操作将结果附加到那里,如果要替换其内容可以设置config.write_disposition = 'WRITE_TRUNCATE'。
虽然您对流式传输到table_B 说了一些话,但我认为您应该仅在我提供的选项对您不够用时才使用此选项,因为这种方法会更昂贵并且操作会花费更长的时间。
基本上,您必须使用docs 中所述的bc.create_rows 方法,并将rows 设置为您的职位查询的查询结果。