yancya-big_query 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d5bd68e33c49a23f96f348b24d41aa9e2140af2
4
- data.tar.gz: a4ae4adae7acf4754728e94ca31a9726239aa1ad
3
+ metadata.gz: 06183ec4fd4344c825bbc907b5e7ac62807cf921
4
+ data.tar.gz: 7bef7e5f244f514cb418503ab44f57448c5c1ff0
5
5
  SHA512:
6
- metadata.gz: dcae7d1b73287106727ac1ebbf5a4e0f344ad6f981c78686f4ae47de33cda2b93fbf36a0e108a6052b56ad763f1e1eed93bf9af891589aafa94cf8f37a653025
7
- data.tar.gz: aa6af3940f7b669a3b00a727cc75638f550f1fa4690bbfffb83fee0d145fb7c95142963d74865dfe84f4f5dda11c229ebcf4ea238f6b3fe593593422ad203ba4
6
+ metadata.gz: 2b25247ed836fc651980505d1b89270d91bd9b1207e91bad8f258d9e945419381001365b1cd5ef2bc45af96929bc1f6a5a4a7521658c073fd36e5f12b6773e23
7
+ data.tar.gz: a9fd32c9c007d101e9b221fee9e35ff5a78f7c6a3c49adac08e868ba704dc2a49a464e2df86e62dde8dd9343a4eacc41617a8a9cbb3d184db43034d357ed10cb
data/README.md CHANGED
@@ -8,22 +8,20 @@ Google BigQuery API client library
8
8
 
9
9
  Add this line to your application's Gemfile:
10
10
 
11
- gem 'big_query', github: "yancya/big_query"
11
+ gem 'yancya-big_query'
12
12
 
13
13
  And then execute:
14
14
 
15
15
  $ bundle
16
16
 
17
- Or build and install it yourself as:
17
+ Or install it yourself as:
18
18
 
19
- $ git clone git@github.com:yancya/big_query.git
20
- $ cd big_query
21
- $ rake install
19
+ $ gem install yancya-big_query
22
20
 
23
21
  ## Usage
24
22
 
25
23
  ```rb
26
- bq = BigQuery.new(
24
+ bq = Yancya::BigQuery.new(
27
25
  key_path: "path_to_secret_key"
28
26
  issuer: "mail@address"
29
27
  )
@@ -1,31 +1,33 @@
1
1
  require_relative 'tables'
2
2
 
3
3
  module Yancya
4
- class BigQuery::Dataset
5
- def initialize(resource:, bq:)
6
- @resource = resource
7
- @tables = BigQuery::Tables.new(bq: bq)
8
- end
4
+ class BigQuery
5
+ class Dataset
6
+ def initialize(resource:, bq:)
7
+ @resource = resource
8
+ @tables = BigQuery::Tables.new(bq: bq)
9
+ end
9
10
 
10
- def tables
11
- @tables.list(
12
- project_id: project_id,
13
- dataset_id: dataset_id
14
- )
15
- end
11
+ def tables
12
+ @tables.list(
13
+ project_id: project_id,
14
+ dataset_id: dataset_id
15
+ )
16
+ end
16
17
 
17
- def project_id
18
- dataset_reference["projectId"]
19
- end
18
+ def project_id
19
+ dataset_reference["projectId"]
20
+ end
20
21
 
21
- def dataset_id
22
- dataset_reference["datasetId"]
23
- end
22
+ def dataset_id
23
+ dataset_reference["datasetId"]
24
+ end
24
25
 
25
- private
26
+ private
26
27
 
27
- def dataset_reference
28
- @resource["datasetReference"]
28
+ def dataset_reference
29
+ @resource["datasetReference"]
30
+ end
29
31
  end
30
32
  end
31
33
  end
@@ -1,63 +1,60 @@
1
- require_relative 'initializer'
2
- require_relative 'request_executor'
3
-
1
+ require_relative 'resource'
4
2
  require_relative 'dataset'
5
3
 
6
4
  module Yancya
7
- class BigQuery::Datasets
8
- include Initializer
9
- include RequestExecutor
10
-
11
- def delete(project_id:, dataset_id:)
12
- execute(
13
- api_method: @bq.api.datasets.delete,
14
- parameters: {projectId: project_id, datasetId: dataset_id, deleteContents: true}
15
- )
16
- end
17
-
18
- def get(project_id:, dataset_id:)
19
- execute(
20
- api_method: @bq.api.datasets.get,
21
- parameters: {projectId: project_id, datasetId: dataset_id}
22
- )
23
- end
5
+ class BigQuery
6
+ class Datasets < Resource
7
+ def delete(project_id:, dataset_id:)
8
+ execute(
9
+ api_method: @bq.api.datasets.delete,
10
+ parameters: {projectId: project_id, datasetId: dataset_id, deleteContents: true}
11
+ )
12
+ end
24
13
 
25
- def insert(project_id:, dataset:)
26
- execute(
27
- api_method: @bq.api.datasets.insert,
28
- parameters: {projectId: project_id},
29
- body_object: dataset
30
- )
31
- end
14
+ def get(project_id:, dataset_id:)
15
+ execute(
16
+ api_method: @bq.api.datasets.get,
17
+ parameters: {projectId: project_id, datasetId: dataset_id}
18
+ )
19
+ end
32
20
 
33
- def list(project_id:)
34
- resources = execute(
35
- api_method: @bq.api.datasets.list,
36
- parameters: {projectId: project_id}
37
- )
21
+ def insert(project_id:, dataset:)
22
+ execute(
23
+ api_method: @bq.api.datasets.insert,
24
+ parameters: {projectId: project_id},
25
+ body_object: dataset
26
+ )
27
+ end
38
28
 
39
- resources["datasets"].map{ |resource|
40
- Yancya::BigQuery::Dataset.new(
41
- resource: resource,
42
- bq: @bq
29
+ def list(project_id:)
30
+ resources = execute(
31
+ api_method: @bq.api.datasets.list,
32
+ parameters: {projectId: project_id}
43
33
  )
44
- }
45
- end
46
34
 
47
- def patch(project_id:, dataset_id:, dataset:)
48
- execute(
49
- api_method: @bq.api.datasets.patch,
50
- parameters: {projectId: project_id, datasetId: dataset_id},
51
- body_object: dataset
52
- )
53
- end
35
+ resources["datasets"].map{ |resource|
36
+ Yancya::BigQuery::Dataset.new(
37
+ resource: resource,
38
+ bq: @bq
39
+ )
40
+ }
41
+ end
42
+
43
+ def patch(project_id:, dataset_id:, dataset:)
44
+ execute(
45
+ api_method: @bq.api.datasets.patch,
46
+ parameters: {projectId: project_id, datasetId: dataset_id},
47
+ body_object: dataset
48
+ )
49
+ end
54
50
 
55
- def update(project_id:, dataset_id:, dataset:)
56
- execute(
57
- api_method: @bq.api.datasets.update,
58
- parameters: {projectId: project_id, datasetId: dataset_id},
59
- body_object: dataset
60
- )
51
+ def update(project_id:, dataset_id:, dataset:)
52
+ execute(
53
+ api_method: @bq.api.datasets.update,
54
+ parameters: {projectId: project_id, datasetId: dataset_id},
55
+ body_object: dataset
56
+ )
57
+ end
61
58
  end
62
59
  end
63
60
  end
@@ -1,53 +1,82 @@
1
1
  module Yancya
2
- class BigQuery::Job
3
- def initialize(resource:, bq:)
4
- @resource = resource
5
- @jobs = BigQuery::Jobs.new(bq: bq)
6
- end
2
+ class BigQuery
3
+ class Job
4
+ def initialize(resource:, bq:)
5
+ @resource = resource
6
+ @jobs = BigQuery::Jobs.new(bq: bq)
7
+ end
7
8
 
8
- def query_results
9
- @jobs.get_query_results(
10
- project_id: project_id,
11
- job_id: job_id
12
- )
13
- end
9
+ def query_results
10
+ @jobs.get_query_results(
11
+ project_id: project_id,
12
+ job_id: job_id
13
+ ).tap do |qr|
14
+ if qr["pageToken"]
15
+ warn <<-TEXT
16
+ This is a slice in all results.
17
+ You have not took rest results.
18
+ Perhaps all_query_results is useful.
19
+ TEXT
20
+ end
21
+ end
22
+ end
14
23
 
15
- def reload
16
- @jobs.get(project_id: project_id, job_id: job_id)
17
- end
24
+ # caution: This method might return huge results
25
+ def all_query_results
26
+ loop.reduce([]) do |ary, _|
27
+ ary.tap do |a|
28
+ a << @jobs.get_query_results(
29
+ project_id: project_id,
30
+ job_id: job_id,
31
+ page_token: (ary.last||{})["pageToken"]
32
+ )
33
+ end
18
34
 
19
- def project_id
20
- job_reference["projectId"]
21
- end
35
+ if (ary.last||{})["pageToken"].nil?
36
+ break ary
37
+ else
38
+ ary
39
+ end
40
+ end
41
+ end
22
42
 
23
- def job_id
24
- job_reference["jobId"]
25
- end
43
+ def reload
44
+ @jobs.get(project_id: project_id, job_id: job_id)
45
+ end
26
46
 
27
- def query
28
- (configuration["query"]||{})["query"]
29
- end
47
+ def project_id
48
+ job_reference["projectId"]
49
+ end
30
50
 
31
- def state
32
- status["state"]
33
- end
51
+ def job_id
52
+ job_reference["jobId"]
53
+ end
34
54
 
35
- def errors
36
- status["errors"]
37
- end
55
+ def query
56
+ (configuration["query"]||{})["query"]
57
+ end
38
58
 
39
- private
59
+ def state
60
+ status["state"]
61
+ end
40
62
 
41
- def configuration
42
- @resource["configuration"]
43
- end
63
+ def errors
64
+ status["errors"]
65
+ end
44
66
 
45
- def status
46
- @resource["status"]
47
- end
67
+ private
68
+
69
+ def configuration
70
+ @resource["configuration"]
71
+ end
72
+
73
+ def status
74
+ @resource["status"]
75
+ end
48
76
 
49
- def job_reference
50
- @resource["jobReference"]
77
+ def job_reference
78
+ @resource["jobReference"]
79
+ end
51
80
  end
52
81
  end
53
82
  end
@@ -1,61 +1,61 @@
1
- require 'json'
2
-
3
- require_relative 'initializer'
4
- require_relative 'request_executor'
1
+ require_relative 'resource'
5
2
  require_relative 'job'
6
3
 
7
4
  module Yancya
8
- class BigQuery::Jobs
9
- include Initializer
10
- include RequestExecutor
11
-
12
- def cancel(project_id:, job_id:)
13
- execute(
14
- api_method: @bq.api.jobs.cancel,
15
- parameters: { projectId: project_id, jobId: job_id }
16
- )
17
- end
18
-
19
- def get(project_id:, job_id:)
20
- resource = execute(
21
- api_method: @bq.api.jobs.get,
22
- parameters: { projectId: project_id, jobId: job_id }
23
- )
24
-
25
- BigQuery::Job.new(resource: resource, bq: @bq)
26
- end
27
-
28
- def get_query_results(project_id:, job_id:)
29
- execute(
30
- api_method: @bq.api.jobs.get_query_results,
31
- parameters: { projectId: project_id, jobId: job_id }
32
- )
33
- end
34
-
35
- def insert(project_id:)
36
- # TODO: https://developers.google.com/bigquery/docs/reference/v2/jobs/insert
37
- raise "This method is not yet working"
38
- end
39
-
40
- def list(project_id:)
41
- resources = execute(
42
- api_method: @bq.api.jobs.list,
43
- parameters: { projectId: project_id, projection: "full" }
44
- )
45
-
46
- resources["jobs"].map{|job|
47
- BigQuery::Job.new(resource: job, bq: @bq)
48
- }
49
- end
50
-
51
- def query(project_id:, sql:)
52
- resource = execute(
53
- api_method: @bq.api.jobs.query,
54
- body_object: { query: sql },
55
- parameters: { projectId: project_id }
56
- )
57
-
58
- BigQuery::Job.new(resource: resource, bq: @bq)
5
+ class BigQuery
6
+ class Jobs < Resource
7
+ def cancel(project_id:, job_id:)
8
+ execute(
9
+ api_method: @bq.api.jobs.cancel,
10
+ parameters: { projectId: project_id, jobId: job_id }
11
+ )
12
+ end
13
+
14
+ def get(project_id:, job_id:)
15
+ resource = execute(
16
+ api_method: @bq.api.jobs.get,
17
+ parameters: { projectId: project_id, jobId: job_id }
18
+ )
19
+
20
+ BigQuery::Job.new(resource: resource, bq: @bq)
21
+ end
22
+
23
+ def get_query_results(project_id:, job_id:, page_token: nil)
24
+ execute(
25
+ api_method: @bq.api.jobs.get_query_results,
26
+ parameters: {
27
+ projectId: project_id,
28
+ jobId: job_id,
29
+ pageToken: page_token
30
+ }
31
+ )
32
+ end
33
+
34
+ def insert(project_id:)
35
+ # TODO: https://developers.google.com/bigquery/docs/reference/v2/jobs/insert
36
+ raise "This method is not yet working"
37
+ end
38
+
39
+ def list(project_id:)
40
+ resources = execute(
41
+ api_method: @bq.api.jobs.list,
42
+ parameters: { projectId: project_id, projection: "full" }
43
+ )
44
+
45
+ resources["jobs"].map{|job|
46
+ BigQuery::Job.new(resource: job, bq: @bq)
47
+ }
48
+ end
49
+
50
+ def query(project_id:, sql:)
51
+ resource = execute(
52
+ api_method: @bq.api.jobs.query,
53
+ body_object: { query: sql },
54
+ parameters: { projectId: project_id }
55
+ )
56
+
57
+ BigQuery::Job.new(resource: resource, bq: @bq)
58
+ end
59
59
  end
60
60
  end
61
61
  end
@@ -3,30 +3,32 @@ require_relative 'datasets'
3
3
  require_relative 'request_executor'
4
4
 
5
5
  module Yancya
6
- class BigQuery::Project
7
- include RequestExecutor
6
+ class BigQuery
7
+ class Project
8
+ include RequestExecutor
8
9
 
9
- def initialize(resource:, bq:)
10
- @resource = resource
11
- @jobs = BigQuery::Jobs.new(bq: bq)
12
- @datasets = BigQuery::Datasets.new(bq: bq)
13
- @bq = bq
14
- end
10
+ def initialize(resource:, bq:)
11
+ @resource = resource
12
+ @jobs = BigQuery::Jobs.new(bq: bq)
13
+ @datasets = BigQuery::Datasets.new(bq: bq)
14
+ @bq = bq
15
+ end
15
16
 
16
- def query(sql)
17
- @jobs.query(project_id: project_id, sql: sql)
18
- end
17
+ def query(sql)
18
+ @jobs.query(project_id: project_id, sql: sql)
19
+ end
19
20
 
20
- def jobs
21
- @jobs.list(project_id: project_id)
22
- end
21
+ def jobs
22
+ @jobs.list(project_id: project_id)
23
+ end
23
24
 
24
- def datasets
25
- @datasets.list(project_id: project_id)
26
- end
25
+ def datasets
26
+ @datasets.list(project_id: project_id)
27
+ end
27
28
 
28
- def project_id
29
- @resource["projectReference"]["projectId"]
29
+ def project_id
30
+ @resource["projectReference"]["projectId"]
31
+ end
30
32
  end
31
33
  end
32
34
  end
@@ -1,20 +1,17 @@
1
- require_relative 'request_executor'
2
- require_relative 'initializer'
3
-
1
+ require_relative 'resource'
4
2
  require_relative 'project'
5
3
 
6
4
  module Yancya
7
- class BigQuery::Projects
8
- include Initializer
9
- include RequestExecutor
10
-
11
- def list
12
- resources = execute(
13
- api_method: @bq.api.projects.list
14
- )
5
+ class BigQuery
6
+ class Projects < Resource
7
+ def list
8
+ resources = execute(
9
+ api_method: @bq.api.projects.list
10
+ )
15
11
 
16
- resources["projects"].map do |resource|
17
- BigQuery::Project.new(resource: resource, bq: @bq)
12
+ resources["projects"].map do |resource|
13
+ BigQuery::Project.new(resource: resource, bq: @bq)
14
+ end
18
15
  end
19
16
  end
20
17
  end
@@ -1,12 +1,14 @@
1
+ require 'json'
2
+
1
3
  module Yancya
2
4
  module RequestExecutor
3
5
  private
4
6
 
5
7
  def response_to_json(obj)
6
8
  return {} if obj.response.body.empty?
9
+
7
10
  JSON.parse(obj.response.body).tap do |resource|
8
11
  raise resource["error"].to_s if resource["error"]
9
- break resource
10
12
  end
11
13
  end
12
14
 
@@ -0,0 +1,13 @@
1
+ require_relative 'request_executor'
2
+
3
+ module Yancya
4
+ class BigQuery
5
+ class Resource
6
+ include RequestExecutor
7
+
8
+ def initialize(bq:)
9
+ @bq = bq
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,67 +1,69 @@
1
1
  module Yancya
2
- class BigQuery::Table
3
- def initialize(resource:, tables:)
4
- @resource = resource
5
- @tables = tables
6
- end
2
+ class BigQuery
3
+ class Table
4
+ def initialize(resource:, tables:)
5
+ @resource = resource
6
+ @tables = tables
7
+ end
7
8
 
8
- def project_id
9
- table_reference["projectId"]
10
- end
9
+ def project_id
10
+ table_reference["projectId"]
11
+ end
11
12
 
12
- def dataset_id
13
- table_reference["datasetId"]
14
- end
13
+ def dataset_id
14
+ table_reference["datasetId"]
15
+ end
15
16
 
16
- def table_id
17
- table_reference["tableId"]
18
- end
17
+ def table_id
18
+ table_reference["tableId"]
19
+ end
19
20
 
20
- def description
21
- @resource["description"]
22
- end
21
+ def description
22
+ @resource["description"]
23
+ end
23
24
 
24
- def schema
25
- @resource["schema"]
26
- end
25
+ def schema
26
+ @resource["schema"]
27
+ end
27
28
 
28
- def reload
29
- @tables.get(
30
- project_id: project_id,
31
- dataset_id: dataset_id,
32
- table_id: table_id
33
- )
34
- end
29
+ def reload
30
+ @tables.get(
31
+ project_id: project_id,
32
+ dataset_id: dataset_id,
33
+ table_id: table_id
34
+ )
35
+ end
35
36
 
36
- def delete
37
- @tables.delete(
38
- project_id: project_id,
39
- dataset_id: dataset_id,
40
- table_id: table_id
41
- )
42
- end
37
+ def delete
38
+ @tables.delete(
39
+ project_id: project_id,
40
+ dataset_id: dataset_id,
41
+ table_id: table_id
42
+ )
43
+ end
43
44
 
44
- def patch(table_reference:)
45
- @tables.patch(
46
- project_id: project_id,
47
- dataset_id: dataset_id,
48
- table_id: table_id,
49
- table: table_reference
50
- )
51
- end
45
+ def patch(table_reference:)
46
+ @tables.patch(
47
+ project_id: project_id,
48
+ dataset_id: dataset_id,
49
+ table_id: table_id,
50
+ table: table_reference
51
+ )
52
+ end
52
53
 
53
- def update(table_reference:)
54
- @tables.update(
55
- project_id: project_id,
56
- dataset_id: dataset_id,
57
- table_id: table_id,
58
- table: table_reference
59
- )
60
- end
54
+ def update(table_reference:)
55
+ @tables.update(
56
+ project_id: project_id,
57
+ dataset_id: dataset_id,
58
+ table_id: table_id,
59
+ table: table_reference
60
+ )
61
+ end
61
62
 
62
- private
63
- def table_reference
64
- @resource["tableReference"]
63
+ private
64
+ def table_reference
65
+ @resource["tableReference"]
66
+ end
65
67
  end
66
68
  end
67
69
  end
@@ -1,37 +1,39 @@
1
1
  require_relative 'request_executor'
2
2
 
3
3
  module Yancya
4
- class BigQuery::Tabledata
5
- include RequestExecutor
4
+ class BigQuery
5
+ class Tabledata
6
+ include RequestExecutor
6
7
 
7
- def initialize(project_id:, dataset_id:, table_id:, bq:)
8
- @project_id = project_id
9
- @dataset_id = dataset_id
10
- @table_id = table_id
11
- @bq = bq
12
- end
8
+ def initialize(project_id:, dataset_id:, table_id:, bq:)
9
+ @project_id = project_id
10
+ @dataset_id = dataset_id
11
+ @table_id = table_id
12
+ @bq = bq
13
+ end
13
14
 
14
- def insert_all(rows)
15
- execute(
16
- api_method: @bq.api.tabledata.insert_all,
17
- body_object: {rows: rows},
18
- parameters: {
19
- datasetId: @dataset_id,
20
- projectId: @project_id,
21
- tableId: @table_id
22
- }
23
- )
24
- end
15
+ def insert_all(rows)
16
+ execute(
17
+ api_method: @bq.api.tabledata.insert_all,
18
+ body_object: {rows: rows},
19
+ parameters: {
20
+ datasetId: @dataset_id,
21
+ projectId: @project_id,
22
+ tableId: @table_id
23
+ }
24
+ )
25
+ end
25
26
 
26
- def list
27
- execute(
28
- api_method: @bq.api.tabledata.list,
29
- parameters: {
30
- datasetId: @dataset_id,
31
- projectId: @project_id,
32
- tableId: @table_id
33
- }
34
- )
27
+ def list
28
+ execute(
29
+ api_method: @bq.api.tabledata.list,
30
+ parameters: {
31
+ datasetId: @dataset_id,
32
+ projectId: @project_id,
33
+ tableId: @table_id
34
+ }
35
+ )
36
+ end
35
37
  end
36
38
  end
37
39
  end
@@ -1,90 +1,87 @@
1
- require_relative 'initializer'
2
- require_relative 'request_executor'
3
-
1
+ require_relative 'resource'
4
2
  require_relative 'table'
5
3
 
6
4
  module Yancya
7
- class BigQuery::Tables
8
- include Initializer
9
- include RequestExecutor
10
-
11
- def delete(project_id:, dataset_id:, table_id:)
12
- execute(
13
- api_method: @bq.api.tables.delete,
14
- parameters: {
15
- datasetId: dataset_id,
16
- projectId: project_id,
17
- tableId: table_id,
18
- }
19
- )
20
- end
5
+ class BigQuery
6
+ class Tables < Resource
7
+ def delete(project_id:, dataset_id:, table_id:)
8
+ execute(
9
+ api_method: @bq.api.tables.delete,
10
+ parameters: {
11
+ datasetId: dataset_id,
12
+ projectId: project_id,
13
+ tableId: table_id,
14
+ }
15
+ )
16
+ end
21
17
 
22
- def get(project_id:, dataset_id:, table_id:)
23
- resource = execute(
24
- api_method: @bq.api.tables.get,
25
- parameters: {
26
- datasetId: dataset_id,
27
- projectId: project_id,
28
- tableId: table_id,
29
- }
30
- )
18
+ def get(project_id:, dataset_id:, table_id:)
19
+ resource = execute(
20
+ api_method: @bq.api.tables.get,
21
+ parameters: {
22
+ datasetId: dataset_id,
23
+ projectId: project_id,
24
+ tableId: table_id,
25
+ }
26
+ )
31
27
 
32
- BigQuery::Table.new(resource: resource, tables: self)
33
- end
28
+ BigQuery::Table.new(resource: resource, tables: self)
29
+ end
34
30
 
35
- def insert(project_id:, dataset_id:, table:)
36
- resource = execute(
37
- api_method: @bq.api.tables.insert,
38
- parameters: {
39
- datasetId: dataset_id,
40
- projectId: project_id,
41
- },
42
- body_object: table
43
- )
31
+ def insert(project_id:, dataset_id:, table:)
32
+ resource = execute(
33
+ api_method: @bq.api.tables.insert,
34
+ parameters: {
35
+ datasetId: dataset_id,
36
+ projectId: project_id,
37
+ },
38
+ body_object: table
39
+ )
44
40
 
45
- BigQuery::Table.new(resource: resource, tables: self)
46
- end
41
+ BigQuery::Table.new(resource: resource, tables: self)
42
+ end
47
43
 
48
- def list(project_id:, dataset_id:)
49
- resources = execute(
50
- api_method: @bq.api.tables.list,
51
- parameters: {
52
- datasetId: dataset_id,
53
- projectId: project_id,
54
- }
55
- )
44
+ def list(project_id:, dataset_id:)
45
+ resources = execute(
46
+ api_method: @bq.api.tables.list,
47
+ parameters: {
48
+ datasetId: dataset_id,
49
+ projectId: project_id,
50
+ }
51
+ )
56
52
 
57
- (resources["tables"]||[]).map do |resource|
58
- BigQuery::Table.new(resource: resource, tables: self)
53
+ (resources["tables"]||[]).map do |resource|
54
+ BigQuery::Table.new(resource: resource, tables: self)
55
+ end
59
56
  end
60
- end
61
57
 
62
- def patch(project_id:, dataset_id:, table_id:, table:)
63
- resource = execute(
64
- api_method: @bq.api.tables.patch,
65
- parameters: {
66
- datasetId: dataset_id,
67
- projectId: project_id,
68
- tableId: table_id,
69
- },
70
- body_object: table
71
- )
58
+ def patch(project_id:, dataset_id:, table_id:, table:)
59
+ resource = execute(
60
+ api_method: @bq.api.tables.patch,
61
+ parameters: {
62
+ datasetId: dataset_id,
63
+ projectId: project_id,
64
+ tableId: table_id,
65
+ },
66
+ body_object: table
67
+ )
72
68
 
73
- BigQuery::Table.new(resource: resource, tables: self)
74
- end
69
+ BigQuery::Table.new(resource: resource, tables: self)
70
+ end
75
71
 
76
- def update(project_id:, dataset_id:, table_id:, table:)
77
- resource = execute(
78
- api_method: @bq.api.tables.update,
79
- parameters: {
80
- datasetId: dataset_id,
81
- projectId: project_id,
82
- tableId: table_id,
83
- },
84
- body_object: table
85
- )
72
+ def update(project_id:, dataset_id:, table_id:, table:)
73
+ resource = execute(
74
+ api_method: @bq.api.tables.update,
75
+ parameters: {
76
+ datasetId: dataset_id,
77
+ projectId: project_id,
78
+ tableId: table_id,
79
+ },
80
+ body_object: table
81
+ )
86
82
 
87
- BigQuery::Table.new(resource: resource, tables: self)
83
+ BigQuery::Table.new(resource: resource, tables: self)
84
+ end
88
85
  end
89
86
  end
90
87
  end
@@ -1,5 +1,5 @@
1
1
  module Yancya
2
2
  class BigQuery
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -147,13 +147,28 @@ class TestBigQuery < Test::Unit::TestCase
147
147
  dataset_id: TEST_DATASET_ID,
148
148
  table_id: TEST_TABLE_ID,
149
149
  table: {
150
- schema: schema.tap { |hash| hash["fields"] << { name: "hoge", type: "STRING" }; break hash }
150
+ schema: schema.tap { |hash| hash["fields"] << { name: "hoge", type: "STRING" } }
151
151
  }
152
152
  )
153
153
 
154
154
  assert { table.schema["fields"].map { |field| field["name"] }.include? "hoge" }
155
155
  end
156
156
 
157
+ test "all_query_results" do
158
+ job = @bq.jobs.query(project_id: @project_id, sql: <<-SQL)
159
+ SELECT 2 as a, 4 as b, 6 as c
160
+ SQL
161
+
162
+ begin
163
+ results = job.all_query_results
164
+ sleep(1)
165
+ end until results.first["jobComplete"]
166
+
167
+ assert do
168
+ "2,4,6" == results.first["rows"].map{|row| row["f"].map{|col| col["v"]}.join(",")}.first
169
+ end
170
+ end
171
+
157
172
  private
158
173
 
159
174
  def create_table
@@ -167,10 +182,14 @@ class TestBigQuery < Test::Unit::TestCase
167
182
  def execute_query(sql)
168
183
  job = @bq.jobs.query(project_id: @project_id, sql: sql)
169
184
 
170
- begin
185
+ loop.each_with_index do |_, index|
186
+ raise 'Job timeout' if index > 60
187
+
171
188
  result = job.query_results
172
- end until result["jobComplete"]
173
189
 
174
- result
190
+ break result if result["jobComplete"]
191
+
192
+ sleep(1)
193
+ end
175
194
  end
176
195
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yancya-big_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - yancya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-11 00:00:00.000000000 Z
11
+ date: 2015-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-api-client
@@ -86,12 +86,12 @@ files:
86
86
  - lib/yancya/big_query.rb
87
87
  - lib/yancya/big_query/dataset.rb
88
88
  - lib/yancya/big_query/datasets.rb
89
- - lib/yancya/big_query/initializer.rb
90
89
  - lib/yancya/big_query/job.rb
91
90
  - lib/yancya/big_query/jobs.rb
92
91
  - lib/yancya/big_query/project.rb
93
92
  - lib/yancya/big_query/projects.rb
94
93
  - lib/yancya/big_query/request_executor.rb
94
+ - lib/yancya/big_query/resource.rb
95
95
  - lib/yancya/big_query/table.rb
96
96
  - lib/yancya/big_query/tabledata.rb
97
97
  - lib/yancya/big_query/tables.rb
@@ -1,9 +0,0 @@
1
- module Yancya
2
- module Initializer
3
- def self.included(_)
4
- define_method(:initialize) do |bq:|
5
- @bq = bq
6
- end
7
- end
8
- end
9
- end