在 Google Big Query 中使用 bq 命令行执行查询

Posted

技术标签:

【中文标题】在 Google Big Query 中使用 bq 命令行执行查询【英文标题】:Executing the query using bq command line in Google Big Query 【发布时间】:2016-07-21 19:42:59 【问题描述】:

我使用下面的 Python 脚本执行查询,表格中填充了 2,564,691 行。当我使用 Google Big Query 控制台运行相同的查询时,它返回 17,379,353 行(查询原样)。我想知道下面的脚本是否有问题。不确定 bq 查询中的 --replace 是否替换过去的结果集而不是附加到它。

任何帮助将不胜感激。

dateToday =  (time.strftime("%Y/%m/%d"))
dateToday1 = dateToday.replace('/','')

commandStr = "type C:\Users\query.txt | bq query --allow_large_results --replace --destination_table table:dataset1_%s -n 1" %(dateToday1)

【问题讨论】:

如果您愿意共享这两个作业的作业 ID,我们(BigQuery 团队)可以进一步调查,看看这两个查询之间可能有什么不同。 通过 Web UI 运行的查询的作业 ID:red-road-574:bquijob_64bd407c_1560f071d85 能否通过命令行分享查询的ID? @DannyKitt:通过命令行查询的作业 id 是 bqjob_r5790ceea_000001560fdd5e9b_1 我查看了您的工作详情:这两个查询并不完全相同。两个查询的结构相同,但 bqjob_r5790ceea_000001560fdd5e9b_1 通过 CURRENT_TIMESTAMP 引用 20160721 表(因为它在 20160721 上运行),而 red-road-574:bquijob_64bd407c_1560f071d85 显式引用 20160719 表。 【参考方案1】:

在 Web UI 中,您可以使用“查询历史记录”选项导航到相应的查询。 找到它们后 - 您可以展开相应的条目并查看究竟执行了什么查询 我非常确定,只要比较查询文本,您就会立即看到“差异”的来源!

添加

在查询历史记录中 - 您不仅可以看到查询文本,还可以看到用于相应查询的所有配置属性 - 例如 Write Preference 等。因此,即使查询文本相同,您也可以看到配置的潜在差异,这将为您提供线索

【讨论】:

查询完全一样。我上面提到的脚本每 10 分钟运行一次并填充表格。当我为昨天的日期运行脚本时,它返回相同的行数。但是当我检查昨天表格中的行数(昨天由脚本填充)时,有很大的不同。这就是为什么我想知道 --replace 是否会做出任何改变。 查看 Danny Kitt 对该问题的评论:它们不是同一个查询(结构相同,扫描的表不同)

以上是关于在 Google Big Query 中使用 bq 命令行执行查询的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 Big Query 导出时出现内部错误

Big Query 命令行:附属查询

在 Big Query 中获取表创建时间

Big Query @0 表装饰器

如何设置 Big Query 表的过期时间?

使用 Google Big Query 在 Google App 脚本上超过最大执行时间