Google bigquery 如何通过HTTP api获取BigQuery查询的元数据

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

我正在研究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, "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