如何在 Google Bigquery 中触发按需计划查询
Posted
技术标签:
【中文标题】如何在 Google Bigquery 中触发按需计划查询【英文标题】:How to trigger On-Demand scheduled Query in Google Bigquery 【发布时间】:2020-06-11 05:05:30 【问题描述】:我在 Google Bigquery 中创建了一个查询,该查询连接到触发云功能的主题。我想安排查询按需运行。一旦我安排了查询,我就无法在 UI 中找到任何选项来运行该特定查询。如果需要更多说明,请告诉我。我只在计划查询 UI 页面中看到以下选项。
【问题讨论】:
【参考方案1】:2021 年 7 月更新:Google 改进了其 UI,因此现在可以按需运行预定查询(详情请查看 Julio's answer)。然而,据他说,这里描述的命令行选项比 UI 选项运行得更快。
很遗憾,你不能。我不知道这是否是一个错误(可能是一个糟糕的 UI 设计),但您无法通过 UI 运行按需计划查询。
这仅适用于设置为按需运行的计划查询。如果您的查询计划在任何时间范围内运行(每天、每周等),您可以使用“计划回填”选项使其按需运行。此选项要求您提供开始日期和结束日期,因此它会强制所有应该在给定时间窗口内运行的运行(是的,使用此选项运行次数将取决于计划)。也就是说,如果您的查询设置为每天运行,只需提供一天的时间跨度,您的查询将运行一次。
或者,如果您确实需要按需运行它,则需要使用命令行或 API,如下所示。
命令行解决方案(使用 Cloud Shell):
运行命令:
bq mk --transfer_run --run_time "$(date --iso-8601=seconds)" \
projects/[YOUR_PROJECT]/locations/us/transferConfigs/[YOUR_SCHEDULED_QUERY_GUID]
请注意,YOUR_SCHEDULED_QUERY_ID
是一个 GUID(它不是计划查询名称,它看起来像 1234a123-1234-1a23-1be9-12ab3c456de7
)。您可以从浏览器 URL 复制它,或从运行命令 bq ls --transfer_config --transfer_location='us'
的所有计划查询列表中获取。
在所有地方,将us
更改为您可能使用的任何其他位置(例如eu
)。
API 解决方案
使用与命令行选项相同的参数使用transferConfigs.startManualRuns API。
注意参数requestedRunTime
是强制性的。仅当您在查询中使用@run_time
参数时,其值才相关,否则不使用。如果需要,您甚至可以对日期进行硬编码。因此,只需使用 2020-08-04T00:00:0Z
格式的任何有效日期时间填充它就可以了(在命令行解决方案中,我使用命令 date --iso-8601=seconds
填充它)。
【讨论】:
如何使用云函数触发? @ThadeuAntonioFerreiraMelo 如果在新问题中详细描述您的需求会更好。但是,您可能可以开发一个调用 Big Query API 的云函数(上面的第二个解决方案)。 我需要运行调度查询来按需更新一些表,但是我不想让用户看到任何关于表的代码或详细信息。他们唯一需要访问的是表和数据集。 Cloud Functions 似乎是正确的解决方案。 确实有道理。请根据您的询问创建一个新问题。您的需求似乎对我也有用,所以我会为此开发一个解决方案。【参考方案2】:聚会晚了一点,但您可以通过点击“安排回填”按需运行它,在弹出窗口中填写从昨天到今天的日期框,仅此而已。这适用于不依赖于当前日期(连接、副本等)的查询。
更新:现在更容易了,他们实现了一个按钮来直接运行一次。不过,我认为使用 Diego Queiroz 's solution 会更快,因为它运行过程的速度比这种方式快 2 倍。
【讨论】:
【参考方案3】:我迟到了,但现在可以使用“RUN TRANSFER NOW”来进行按需查询。
【讨论】:
【参考方案4】:我了解您的 Bigquery 作业在计划之前运行正常,并且您的问题集中在您无法在计划之后手动运行查询这一事实上。如果我理解错了,请确认。
如果您点击您的计划查询然后选择配置(在页面顶部),您可以找到您查询的代码。在“数据源详细信息”下,您可以看到“查询字符串”。
确实,您不能从此处直接运行此查询,但您也可以使用上面获得的“查询字符串”使用BigQuery View。 BigQuery 视图可让您在运行时“更新”查询。如果您需要对此进一步澄清,请告诉我。
【讨论】:
是费尔南多我的查询运行正确,所以查询没有问题。我唯一要做的就是当查询执行完成时我必须触发一个主题(发布/订阅)。这只有在我们创建计划查询时才有可能,如果我们直接从查询编辑器运行它不会触发主题。当我安排查询时,它有一个按需安排它的选项,但是一旦我创建了它,我就找不到任何触发查询的选项。我不知道 Bigquery View,如果它解决了我的问题,请告诉我。 不,您在创建计划查询后无法编辑任何内容。但是,您可以创建一个启用 Cloud Pub/Sub 主题的新计划查询。正如我所说,您可以从计划查询中获取查询代码,因此使用这个新选项重新创建它应该不会花费很多时间。 实际上我的查询非常大并且处理 GB 的数据。因此,当我必须重新创建计划查询时,bigquery UI 需要花费大量时间来编译它,有时浏览器会崩溃。 您不必在创建新的计划查询之前运行查询。另外,“浏览器崩溃”是什么意思。该作业作为 VM 执行。您是否超出任何限制stated here?以上是关于如何在 Google Bigquery 中触发按需计划查询的主要内容,如果未能解决你的问题,请参考以下文章
每次在 Google Cloud Storage 上上传 CSV 时如何触发自动更新 Google BigQuery 数据集
使用 spark 将 parquet 数据从 Google 云存储加载到 BigQuery
如何找到在 BigQuery 中触发设置事件之前触发的事件?