|
3 | 3 | module BigQuery |
4 | 4 | module Jobs |
5 | 5 | def sql(query, options = {}) |
6 | | - result = jobs_query(query, options) |
7 | | - names = result['schema']['fields'].map {|field| field['name'] } |
8 | | - types = result['schema']['fields'].map {|field| field['type'] } |
9 | | - records = (result['rows'] || []).map {|row| row['f'].map {|record| record['v'] } } |
| 6 | + jobs_query_response = jobs_query(query, options) |
| 7 | + names = jobs_query_response['schema']['fields'].map {|field| field['name'] } |
| 8 | + types = jobs_query_response['schema']['fields'].map {|field| field['type'] } |
| 9 | + records = extract_records(jobs_query_response) |
| 10 | + |
| 11 | + page_token = jobs_query_response['pageToken'] |
| 12 | + job_id = jobs_query_response['jobReference']['jobId'] |
| 13 | + while page_token |
| 14 | + query_results_response = query_results(job_id, pageToken: page_token) |
| 15 | + records += extract_records(query_results_response) |
| 16 | + page_token = query_results_response['pageToken'] |
| 17 | + end |
| 18 | + |
10 | 19 | convert(records, types).map { |values| [names, values].transpose.to_h } |
11 | 20 | end |
12 | 21 |
|
@@ -52,6 +61,10 @@ def query_results(id, options = {}) |
52 | 61 |
|
53 | 62 | private |
54 | 63 |
|
| 64 | + def extract_records(response) |
| 65 | + (response['rows'] || []).map {|row| row['f'].map {|record| record['v'] } } |
| 66 | + end |
| 67 | + |
55 | 68 | def convert(records, types) |
56 | 69 | records.map do |values| |
57 | 70 | values.map.with_index do |value, index| |
|
0 commit comments