yancya-big_query 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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