5

tôi đang lấy hồ sơ từ truy vấn lớn của Google sử dụng đá quý 'google-api-client, Khi tôi lấy hồ sơ từ bảngParsing phản hồi từ truy vấn lớn Google

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

tôi nhận được phản ứng như thế nào,

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

Không có tên cột trong đó, Có ai có bất kỳ ý tưởng nào về cách lấy tên cột cùng với dữ liệu không?

Hiện tại tôi cần thực hiện một yêu cầu API khác để tìm nạp giản đồ và lấy tên cột.

Trả lời

1

Tôi tìm thấy câu trả lời cho điều này bản thân mình sử dụng bigquery công cụ dòng lệnh (bq),

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

khi sử dụng bq nếu chúng tôi không cung cấp tùy chọn --quiet sau đó nó sẽ trả về phản ứng với các văn bản bổ sung cho nó (trạng thái về lớn việc truy vấn), gây ra vấn đề trong phân tích cú pháp JSON như hình dưới đây

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"}] 

Thats lý do tôi chuyển sang sử dụng google api để lấy dữ liệu và một lần nữa mà không cung cấp cho bạn tên cột cùng với dữ liệu. Nhưng tôi thấy rằng chúng ta có thể loại bỏ văn bản thêm bằng cách sử dụng tùy chọn --quiet cho lệnh bq như

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

API không cung cấp một cách để có được các lược đồ và hàng cho một bảng tùy ý trong một cuộc gọi API duy nhất. Bạn cần gọi số tables.get để nhận giản đồ, sau đó tabledata.list để nhận các hàng.

Tuy nhiên, nếu bạn đang chạy truy vấn, bạn có thể nhận được sơ đồ đầu ra và các hàng đầu ra trong một cuộc gọi API bằng cách sử dụng jobs.query hoặc jobs.getQueryResults. Bạn thậm chí có thể gọi jobs.getQueryResults trên công việc truy vấn đã hoàn tất, ngay cả khi công việc truy vấn đó được thực hiện bởi một số phương tiện khác.

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

+0

Ngay cả sau khi sử dụng jobs.getQueryResults, có vẻ như bạn sẽ cần để lập bản đồ những nhãn schema với dữ liệu thực tế. Công cụ dòng lệnh bq có vẻ là giải pháp tốt hơn cho điều này mang lại đầu ra thích hợp như tôi đã đề cập trong câu trả lời ở trên. –

+0

Có, bạn vẫn phải thực hiện ánh xạ, nhưng bạn chỉ phải thực hiện một cuộc gọi API để nhận tất cả thông tin. Sử dụng bq là tốt nếu nó làm việc cho bạn (vì nó làm tất cả điều này dưới mui xe), nhưng nó cũng không có ý định trở thành một API, do đó định dạng và đầu ra có thể thay đổi. –

Các vấn đề liên quan