正在解析来自 Google 大查询的响应

Parsing response from Google big query

我正在使用 gem 'google-api-client' 从 Google 大查询中获取记录, 当我从 table

获取记录时
 client.execute(api_method: @compute_api.tabledata.list,
                                    parameters: {projectId: project,
                                                datasetId: dataset, 
                                                tableId: table,
                                                maxResults: 10}).body

我得到这样的回复,

{
"kind": "bigquery#tableDataList",
"etag": "\"iBDiwpngzDA0oFU52344ksWOrjA/-xEFKhLUueR63_XVaLG4z_mJt-8\"",
"totalRows": "2000113",
"pageToken": "BEIYURQ3J4AQAAAS23IIBAEAAUNAICAMCAGCBMFOCU======",
"rows": [
{
"f": [
{
 "v": "11873943041"
},
{
 "v": "639592585-0-1809110554@8.19.146.76"
},
{
 "v": "1.430438401E9"
},
{
 "v": "1.430438402E9"
},
{
 "v": "1.430438404E9"
},
{
 "v": "1.430438862E9"
}]}]}

其中没有列名,有没有人知道如何获取列名和数据?

目前我需要发出另一个 API 请求来获取架构和列名。

我自己使用 bigquery 命令行工具 (bq) 找到了答案,

bq --format=json query "select * from calls.details limit 10"

使用 bq 时,如果我们不提供 --quiet 选项,那么它 returns 响应带有附加文本(关于大查询作业的状态),这会导致解析 Json 出现问题,如下所示

Waiting on bqjob_r36676afce1bcba8d_0000014f1ba0e36b_1 ... (0s) Current status: DONE   
[{"status":null,"userfield":null,"answer_stamp":"2015-05-01 00:00:04","term_roid":"a"}]

这就是我转而使用 google api 来获取数据的原因,但同样不会为您提供列名和数据。但是我发现我们可以通过对 bq 命令使用 --quiet 选项来删除多余的文本,例如

bq --quiet --format=json query "select * from calls.details limit 10"

API 不提供在单个 API 调用中获取任意 table 的架构和行的方法。您需要调用 tables.get 获取架构,然后调用 tabledata.list 获取行。

但是,如果您是 运行 查询,则可以使用 jobs.queryjobs.getQueryResults 在单个 API 调用中获取输出架构和输出行.您甚至可以在已完成的查询作业上调用 jobs.getQueryResults,即使该查询作业是通过其他方式执行的。

https://cloud.google.com/bigquery/docs/reference/v2/jobs/query https://cloud.google.com/bigquery/docs/reference/v2/jobs/getQueryResults