我使用gem'google-api-client'从Google大查询中获取记录, 当我从表中获取记录时
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请求来获取架构并获取列名。
答案 0 :(得分:1)
我自己使用bigquery命令行工具(bq)找到了答案,
bq --format=json query "select * from calls.details limit 10"
当使用bq如果我们不提供--quiet选项然后它返回带有附加文本的响应(关于大查询作业的状态),这会导致解析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来获取数据,而且还没有给你提供列名和数据。但我发现我们可以通过使用--quiet选项为
等bq命令删除那些额外的文本bq --quiet --format=json query "select * from calls.details limit 10"
答案 1 :(得分:1)
API没有提供在单个API调用中获取任意表的架构和行的方法。您需要调用tables.get
来获取架构,然后调用tabledata.list
来获取行。
但是,如果您正在运行查询,则可以使用jobs.query
或jobs.getQueryResults
在单个API调用中获取输出架构和输出行。您甚至可以在已完成的查询作业上调用jobs.getQueryResults
,即使该查询作业是通过其他方式执行的。
https://cloud.google.com/bigquery/docs/reference/v2/jobs/query https://cloud.google.com/bigquery/docs/reference/v2/jobs/getQueryResults