如何以编程方式列出可用的Google BigQuery位置?我需要一个类似于此页表中的结果:https://cloud.google.com/bigquery/docs/locations。
答案 0 :(得分:2)
正如@shollyman提到的
BigQuery API目前不公开等效于列表位置的调用。 因此,您应该考虑在issue tracker上提交功能请求。
平均时间,我想将选项3添加到@Tamir已经提出的两个选项中
这是一个天真的选项,它具有优点和缺点,但是取决于您的特定用例是否有用并易于适应您的应用程序
第1步-加载页面(https://cloud.google.com/bigquery/docs/locations)html
第2步-解析并提取所需信息
很明显,这在您选择的任何客户端中实现超级简单
由于我是BigQuery的忠实拥护者-我使用BigQuery工具-Magnus进行了“概念验证”
我创建的工作流只有两个任务:
API任务-将页面的HTML加载到变量var_payload
中
和
BigQuery任务-从html解析和提取所需信息
“整个”工作流程很简单,就像下面的屏幕截图所示
我在BigQuery Task中使用的查询是
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
)
如您所见,我使用了he library。从其自述文件:
he(对于“ HTML实体”)是用JavaScript编写的健壮的HTML实体编码器/解码器。它支持HTML格式的所有标准化命名字符引用,像浏览器一样处理歧义的“&”号和其他极端情况。
执行工作流程并完成了这两个步骤后-结果在project.dataset.location_extraction
中,我们可以查询该表以确保获得期望的结果
注意:显然,解析和提取所需的位置信息已相当简化,并且在更改源页面布局方面肯定可以进行改进以变得更加灵活
答案 1 :(得分:0)
不幸的是,没有提供BigQuery支持的位置列表的API。
我看到两个可能对您有益的选择:
选项1
您可以手动管理列表,并通过API或应用程序支持的任何其他方式将此列表显示给客户端(您需要遵循BigQuery产品更新,才能跟踪此列表中的更新)
选项2
如果您的用例是提供用于存储自己的数据的位置列表,则可以调用dataset.list获取位置列表并在您的应用中显示/使用它
{
"kind": "bigquery#dataset",
"id": "id1",
"datasetReference": {
"datasetId": "datasetId",
"projectId": "projectId"
},
"location": "US"
}