Google bigquery 如何通过HTTP api获取BigQuery查询的元数据
我正在研究F的类型提供程序,要实现它,我们需要获取查询编译时的模式,这意味着它必须很快。目前,我们正在进行类似的操作:Google bigquery 如何通过HTTP api获取BigQuery查询的元数据,google-bigquery,Google Bigquery,我正在研究F的类型提供程序,要实现它,我们需要获取查询编译时的模式,这意味着它必须很快。目前,我们正在进行类似的操作: bq query --format=json --dry_run=true --use_legacy_sql=false 'SELECT @a IS TRUE AS x, @b + 1 AS y, "foo" = @c AS z, ["tomas", "jansson"] as w, STRUCT("wat" as t, 69 as u) as v, [STRUCT(3, "a
bq query --format=json --dry_run=true --use_legacy_sql=false 'SELECT @a IS TRUE AS x, @b + 1 AS y, "foo" = @c AS z, ["tomas", "jansson"] as w, STRUCT("wat" as t, 69 as u) as v, [STRUCT(3, "allo" as g), STRUCT(5 as a, "yolo")] as u, STRUCT(["a"] as h) as t;'
这正是我们想要的,但它使用的是bq工具。我想知道在代码库中很难找到的底层http调用是什么
我想知道底层代码库的原因是,我想删除尽可能多的第三方依赖项,这些依赖项可能在生成服务器上不可用,或者需要很长时间才能设置。编辑:Mikhail是对的;只有jobs.insert API提供架构信息。我将使用这个答案来记录当前的行为 使用API,以下是一个请求和响应示例:
PROJECT="YOUR_PROJECT_NAME"
QUERY="\"SELECT 1 AS x, 'foo' AS y, @b IS FALSE AS z;\""
REQUEST="{\"configuration\":{\"dryRun\":true,\"query\":{\"useLegacySql\":false,\"query\":${QUERY}}}}"
echo $REQUEST | \
curl -X POST -d @- -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://www.googleapis.com/bigquery/v2/projects/$PROJECT/jobs
(some parts omitted)
"statistics": {
"query": {
"schema": {
"fields": [
{
"name": "x",
"type": "INTEGER",
"mode": "NULLABLE"
},
{
"name": "y",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "z",
"type": "BOOLEAN",
"mode": "NULLABLE"
}
]
},
"undeclaredQueryParameters": [
{
"name": "b",
"parameterType": {
"type": "BOOL"
}
}
],
"statementType": "SELECT"
}
以下是一个请求和响应示例,为便于比较,使用:
PROJECT="YOUR_PROJECT_NAME"
QUERY="\"SELECT 1 AS x, 'foo' AS y, @b IS FALSE AS z;\""
REQUEST="{\"kind\":\"bigquery#queryRequest\",\"dryRun\":true,\"useLegacySql\":false,\"query\":$QUERY}"
echo $REQUEST | \
curl -X POST -d @- -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://www.googleapis.com/bigquery/v2/projects/$PROJECT/queries
{
"kind": "bigquery#queryResponse",
"jobReference": {
"projectId": "<omitted>"
},
"totalBytesProcessed": "0",
"jobComplete": true,
"cacheHit": false
}
或者你可以使用
使用配置属性并设置为true谢谢。明天第一件事我会再试一次。我早些时候试过试运行,但只得到了一个数字,没有得到模式。可能做错了什么。使用try-run时,我似乎没有获取架构。我得到的数据是:{kind:bigqueryqueryResponse,jobReference:{projectId:uc prox development},totalBytesProcessed:0,jobComplete:true,cacheHit:false}尝试了此页面上的API:另一个答案也可以,但是当直接转到查询API而不是作业时,API应该更新为包含模式。我更新了答案以显示插入API和查询API之间响应的差异。您可以考虑提交一个查询API返回架构信息。谢谢在BigQuery中报告了一个问题,因此您可以跟踪它:查看bq工具进行的底层http API调用的一个好技巧是使用API标志。例如:bq query-apilog=true-format=json-dry\u run=true-use\u legacy\u sql=false“从lookerdata:cdc.project\u tycho\u reports中选择count*”要查看所有标志,请运行bq-help | grep \-api