Skip to content
This repository was archived by the owner on Jun 12, 2019. It is now read-only.

Commit bbe9605

Browse files
committed
Add datasets.list, datasets.insert and datasets.delete
1 parent 46ee29b commit bbe9605

4 files changed

Lines changed: 109 additions & 0 deletions

File tree

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Only service accounts are supported right now. https://developers.google.com/acc
1414

1515
* query
1616
* tables
17+
* datasets
1718
* load
1819
* tables_formatted
1920
* job
@@ -76,6 +77,24 @@ Describe table schema
7677

7778
bq.describe_table('table_name')
7879

80+
## Datasets
81+
82+
List datasets in dataset
83+
84+
bq.datasets
85+
86+
List dataset names
87+
88+
bq.datasets_formatted
89+
90+
Delete exiting dataset
91+
92+
bq.delete_dataset('test123')
93+
94+
Create dataset. First param is the dataset name
95+
96+
bq.create_dataset('test123')
97+
7998
## Querying
8099

81100
bq.query("SELECT * FROM [#{config['dataset']}.table_name] LIMIT 1")

lib/big_query/client.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
require 'big_query/client/query'
33
require 'big_query/client/jobs'
44
require 'big_query/client/tables'
5+
require 'big_query/client/datasets'
56
require 'big_query/client/load'
67

78
module BigQuery
@@ -10,6 +11,7 @@ class Client
1011
include BigQuery::Client::Query
1112
include BigQuery::Client::Jobs
1213
include BigQuery::Client::Tables
14+
include BigQuery::Client::Datasets
1315
include BigQuery::Client::Insert
1416

1517
attr_accessor :dataset, :project_id

lib/big_query/client/datasets.rb

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
module BigQuery
2+
class Client
3+
module Datasets
4+
5+
# Lists the datasets
6+
#
7+
# @return [Hash] json api response
8+
def datasets
9+
response = api({
10+
:api_method => @bq.datasets.list,
11+
})
12+
13+
response['datasets'] || []
14+
end
15+
16+
# Lists the datasets returnning only the tableId
17+
#
18+
# @return [Hash] json api response
19+
def datasets_formatted
20+
datasets.map { |t| t['datasetReference']['datasetId'] }
21+
end
22+
23+
# Creating a new dataset
24+
#
25+
# @param datasetId [String] dataset id to insert into
26+
# @return [Hash] json api response
27+
#
28+
# examples:
29+
#
30+
# @bq.create_dataset('new_dataset')
31+
def create_dataset(datasetId)
32+
api(
33+
api_method: @bq.datasets.insert,
34+
body_object: { "datasetReference" => {
35+
"datasetId" => datasetId,
36+
"projectId" => @project_id,
37+
}
38+
}
39+
)
40+
end
41+
42+
# Deletes the given datasetId
43+
#
44+
# @param datasetId [String] dataset id to insert into
45+
def delete_dataset(datasetId)
46+
api(api_method: @bq.datasets.delete,
47+
parameters: { 'datasetId' => datasetId }
48+
)
49+
end
50+
end
51+
end
52+
end

test/bigquery.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,40 @@ def test_for_insert_job
206206

207207
assert_equal result['kind'], "bigquery#job"
208208
end
209+
210+
def test_for_datasets
211+
dataset = @bq.datasets.select{|t| t['id'] == "#{config['project_id']}:#{config['dataset']}"}.first
212+
213+
assert_equal dataset['kind'], "bigquery#dataset"
214+
assert_equal dataset['datasetReference']['datasetId'], config['dataset']
215+
end
216+
217+
def test_for_datasets_formatted
218+
result = @bq.datasets_formatted
219+
220+
assert_includes result, config['dataset']
221+
end
222+
223+
def test_for_create_datasets
224+
if @bq.datasets_formatted.include? 'test123'
225+
@bq.delete_dataset('test123')
226+
end
227+
228+
result = @bq.create_dataset('test123')
229+
230+
assert_equal result['kind'], "bigquery#dataset"
231+
assert_equal result['datasetReference']['datasetId'], 'test123'
232+
end
233+
234+
def test_for_delete_datasets
235+
if !@bq.datasets_formatted.include? 'test123'
236+
@bq.create_dataset('test123')
237+
end
238+
239+
result = @bq.delete_dataset('test123')
240+
241+
datasets = @bq.datasets_formatted
242+
243+
refute_includes datasets, 'test123'
244+
end
209245
end

0 commit comments

Comments
 (0)