- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
截至 2019 年秋季,BigQuery 支持 scripting ,这很棒。我想不通的是 Python client for BigQuery能够利用这一新功能。
例如,运行以下 Python 代码:
client = bigquery.Client()
QUERY = """
BEGIN
CREATE OR REPLACE TEMP TABLE t0 AS
SELECT * FROM my_dataset.my_table WHERE foo < 1;
SELECT SUM(bar) AS bar_sum FROM t0;
DROP TABLE IF EXISTS t0;
END;
"""
query_job = client.query(QUERY)
rows = query_job.result()
... 返回一个 google.cloud.bigquery.table._EmptyRowIterator
对象,即使我能够看到 SQL 脚本中的语句已从 BigQuery 的 Web UI 成功运行。
如何将这个标准 SQL 脚本中 SELECT 语句的结果返回给 Python 客户端?
最佳答案
支持,但您需要考虑以下 documentation :
Scripts are executed in BigQuery using jobs.insert, similar to any other query, with the multi-statement script specified as the query text. When a script executes, additional jobs, known as child jobs, are created for each statement in the script. You can enumerate the child jobs of a script by calling jobs.list, passing in the script’s job ID as the parentJobId parameter.
When jobs.getQueryResults is invoked on a script, it will return the query results for the last SELECT, DML, or DDL statement to execute in the script, with no query results if none of the above statements have executed. To obtain the results of all statements in the script, enumerate the child jobs and call jobs.getQueryResults on each of them.
例如,我修改了您的脚本以查询公共(public)表:bigquery-public-data.london_bicycles.cycle_stations
.这会运行三个子作业:
最后一个删除表格并且不返回任何行:
这就是为什么,如果我运行 Python 文件,我会得到类似 <google.cloud.bigquery.table._EmptyRowIterator object at 0x7f440aa33c88>
的信息。 .
我们想要的是中间查询的输出结果:
快速测试是注释掉 DROP
语句,然后遍历行以获得 sum=6676
的结果.那么,如果我们想要中间结果呢?与前面引用的文档一样,答案是调用 jobs.list
。并将脚本作业 ID 作为 parentJobId
传递获取子作业 ID 的参数:
for job in client.list_jobs(parent_job=query_job.job_id):
print("Job ID: {}, Statement Type: {}".format(job.job_id, job.statement_type))
我们使用 list_jobs
方法和检查ID and statement type :
Job ID: script_job_80e...296_2, Statement Type: DROP_TABLE
Job ID: script_job_9a0...7fd_1, Statement Type: SELECT
Job ID: script_job_113...e13_0, Statement Type: CREATE_TABLE_AS_SELECT
请注意,后缀 (0, 1, 2) 表示执行顺序,但我们可以添加双重检查来验证作业实际上是 SELECT
检索结果前的声明:
from google.cloud import bigquery
client = bigquery.Client()
QUERY = """
BEGIN
CREATE OR REPLACE TEMP TABLE t0 AS
SELECT name, bikes_count FROM `bigquery-public-data.london_bicycles.cycle_stations` WHERE bikes_count > 10;
SELECT SUM(bikes_count) AS total_bikes FROM t0;
DROP TABLE IF EXISTS t0;
END;
"""
query_job = client.query(QUERY)
query_job.result()
for job in client.list_jobs(parent_job=query_job.job_id): # list all child jobs
# print("Job ID: {}, Statement Type: {}".format(job.job_id, job.statement_type))
if job.statement_type == "SELECT": # print the desired job output only
rows = job.result()
for row in rows:
print("sum={}".format(row["total_bikes"]))
输出:
sum=6676
关于python - 将 BigQuery 脚本的结果返回给 Python 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59806304/
我有一个包含数据的表,其中在 A 列中我有一组重复的数据(一个接一个)。 我只想根据 A 列中的值(没有其他条件)选择每个组的第一行。请注意,我还希望为提到的新发现的行选择所有相应的列(我不想排除它们
我有一个包含 340GB 数据的表,但我们只使用了最后一周的数据。因此,为了最小化将这些数据移动到分区表或分片表的成本计划。 我对分片表和分区做了一些实验。我创建了分区表并加载了两天的数据(两个分区)
我想安排将数据从 GCS 存储桶加载到 BigQuery 表。如果我使用 bigquery-transfer 与调度及时的 bigquery-loads 的核心区别是什么? 最佳答案 它们是相同的。
我想安排将数据从 GCS 存储桶加载到 BigQuery 表。如果我使用 bigquery-transfer 与调度及时的 bigquery-loads 的核心区别是什么? 最佳答案 它们是相同的。
我想编写一个 BigQuery 命令行命令来检索 BigQuery 表的最后修改时间。我怎样才能做到这一点? 仅当 BigQuery 表的最后修改日期时间大于某个日期时间时,我才会使用它。 最佳答案
我似乎无法将任何数据从 Socrata 上传到 BigQuery。我收到“加载操作中的 BigQuery 错误:无法连接 BigQuery 服务器。”最初我得到的是 0 错误错误的限制。现在我已将 C
我正在尝试弄清楚是否可以从大查询中导出 hyperloglog 草图并在外部合并它们以进行基数估计。是否有可用的开源库可以轻松解析大型查询草图? 如果不是,是否有任何关于 biq 查询的 hyperl
这是我用作https://cloud.google.com/bigquery/docs/managing-tables#bigquery-copy-table-python的引用的代码: source
构建管道时,源是 BigQueryIO.Read,您会得到一组 TableRow 对象以供使用。 我基本上想对那些 TableRow 对象进行一些小的更改,然后使用 BigQueryIO.Write
BigQuery API Client Libraries 之间有什么区别?和 BigQuery Storage API Client Libraries ? 在 BigQuery Storage R
据我所知,将数据流式传输到 BigQuery 会导致重复行,正如这里提到的 https://cloud.google.com/bigquery/streaming-data-into-bigquery
我在 BigQuery Jobs API 中注意到复制任务: https://developers.google.com/bigquery/docs/reference/v2/jobs#resourc
https://cloud.google.com/bigquery/docs/reference/datatransfer/rest/ 我正在寻找“bigquery 数据传输服务”的 php 客户端库
我正在从 GCS 中的 CSV 文件到 BQ 执行一些 ETL,一切正常,除了日期。我的表中的字段名称是 TEST_TIME,类型是 DATE,所以在 TableRow 中我尝试传递一个 java.u
我已经阅读了 BigQuery 连接器的文档(https://support.google.com/360suite/datastudio/answer/6370296?hl=en)。 我想将自定义查
当两个不同的billing account下有两个project,并且有跨两个project的授权view时,view的查询费用由哪个billing account来计费? 场景:项目 A 包含使用项
所以我有一张购买表: 用户编号 购买时间 数量 我有一张网站上的用户事件表: 用户编号 位置 浏览时间 如何在不超过 purchase_time 的情况下将 purchases 表与 activiti
我有一个 unix 时间戳列,在我的 csv 文件中以毫秒表示。现在,当我将这些数据插入到我的 bigQuery 表中并查询它时,我得到了这个错误 bigQuery not supporting mi
我目前正在将 BigQuery 表提取到 Google Cloud Storage 中的分片 .csv 中——是否有任何方法可以对提取的行进行洗牌/随机化? GCS .csv 将用作 GCMLE 模型
我需要从数据流更新和删除 BigQuery 中的记录。数据来自 Pubsub,并带有标识操作插入、更新、删除 (I、U、D) 的标志。插入不是问题。 有更新和删除的建议吗? 最佳答案 Dataflow
我是一名优秀的程序员,十分优秀!