首页 > 解决方案 > 如何以编程方式列出可用的 Google BigQuery 位置?

问题描述

如何以编程方式列出可用的 Google BigQuery 位置?我需要一个类似于此页面表格中的结果:https ://cloud.google.com/bigquery/docs/locations 。

标签: google-bigquery

解决方案


正如@shollyman 提到的

BigQuery API 目前不公开等效的列表位置调用。因此,您应该考虑在问题跟踪器上提交功能请求。

同时,我想将选项 3 添加到 @Tamir 已经提出的两个选项中

这是一个有点幼稚的选项,有其优点和缺点,但取决于您的特定用例,它可能有用且易于适应您的应用程序

第 1 步 - 加载页面 ( https://cloud.google.com/bigquery/docs/locations ) html
第 2 步 - 解析并提取所需信息

显然,这在您选择的任何客户端中实现起来 都非常简单

由于我是 BigQuery 的忠实粉丝 - 我使用 BigQuery 工具完成了“概念验证” - Magnus

我创建了只有两个任务的工作流程:
API 任务- 将页面的 HTML 加载到变量var_payload

BigQuery 任务- 从 html 中解析和提取想要的信息

“整个”工作流程就像下面的屏幕截图一样简单

在此处输入图像描述

我在 BigQuery 任务中使用的查询是

CREATE TEMP FUNCTION decode(x STRING) RETURNS STRING
LANGUAGE js AS """
  return he.decode(x);
"""
OPTIONS (library="gs://my_bucket/he.js");
WITH t AS (
 SELECT html, 
   REGEXP_EXTRACT_ALL(
     REGEXP_REPLACE(html, 
       r'\n|<strong>|</strong>|<code>|</code>', ''), 
     r'<table>(.*?)</table>'
   )[OFFSET(0)] x
 FROM (SELECT'''<var_payload>''' AS html)
)
SELECT pos, 
  line[SAFE_OFFSET(0)] Area, 
  line[SAFE_OFFSET(1)] Region_Name, 
  decode(line[SAFE_OFFSET(2)]) Region_Description
FROM (
 SELECT  
   pos, REGEXP_EXTRACT_ALL(line, '<td>(.*?)</td>') line
 FROM t, 
    UNNEST(REGEXP_EXTRACT_ALL(x, r'<tr>(.*?)</tr>')) line 
    WITH OFFSET pos
 WHERE pos > 0
)

如您所见,我使用了他的库。从它的自述文件中:

他(用于“HTML 实体”)是用 JavaScript 编写的强大的 HTML 实体编码器/解码器。它支持根据 HTML 的所有标准化命名字符引用,处理模棱两可的 & 和其他边缘情况,就像浏览器一样......

执行工作流并完成这两个步骤后 - 结果已输入project.dataset.location_extraction,我们可以查询此表以确保我们得到了预期的 结果

在此处输入图像描述

注意:显然解析和提取所需位置信息非常简单,并且在更改源页面布局方面肯定可以改进以更加灵活


推荐阅读