如何将查询结果插入 BigQuery 前缀表

Posted

技术标签:

【中文标题】如何将查询结果插入 BigQuery 前缀表【英文标题】:How to insert query result into BigQuery prefixed table 【发布时间】:2017-11-03 16:01:21 【问题描述】:

我正在使用 Python 客户端库 V0.28 开发 BigQuery。我想将表查询结果插入流式表(每天一个分区)。

我有 2 张桌子: - Table_A 包含我的源数据 - table_B 将在经过一些处理后从 table_A 中丰富(table_B_20101001,table_B_20101002,...)。

我浏览了文档,但没有找到示例。有人可以帮助我吗?

非常感谢!

【问题讨论】:

【参考方案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 设置为您的职位查询的查询结果。

【讨论】:

以上是关于如何将查询结果插入 BigQuery 前缀表的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Google 表格中的二维数组通过 Apps 脚本插入 Big Query?

Python 中的 Bigquery:如何将查询结果放入表中?

如何将 BigQuery 查询结果保存到另一个表?

Big Query 在从一个表插入到另一个表时指定 _PARTITIONTIME

如何在 Big Query 的标准 SQL 中使用通配符为特定分区查询多个表

Big Query:如何提取数据集的每个表创建时间?