bigqueryid 0.4.0
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 +7 -0
- data/README.md +69 -0
- data/lib/bigqueryid/attributes.rb +70 -0
- data/lib/bigqueryid/base/initializable.rb +20 -0
- data/lib/bigqueryid/base.rb +59 -0
- data/lib/bigqueryid/criteria/queryable.rb +25 -0
- data/lib/bigqueryid/criteria.rb +8 -0
- data/lib/bigqueryid/errors/bigquery_error.rb +6 -0
- data/lib/bigqueryid/timestamps.rb +10 -0
- data/lib/bigqueryid/version.rb +5 -0
- data/lib/bigqueryid.rb +14 -0
- metadata +95 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ebd0bdb293a7eb11391a3da70f46f3b084301088
|
4
|
+
data.tar.gz: 0c7664612aa35d696e37bc303b257b8ed260df08
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6fc71e931b932fb59d56a9c73c48d7ca0b86b9cb73a59d5d87942d02e2578ecd7214b04f11723c709b493e8468e722720f4956163a61fd2c09886ad8f55e3e53
|
7
|
+
data.tar.gz: 8573c4e24e1bdad7b1a177dfc534e7f8199821577bc60fb73cb154de5ba9c5d18464675bf07ba2a30452a04f610157cb0758de9bd50447432c3d9ca58db7162c
|
data/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# BigQueryID
|
2
|
+
|
3
|
+
BigQueryID is an ORM (Object-Relational-Mapper) framework for Google BigQuery in Ruby.
|
4
|
+
|
5
|
+
Install
|
6
|
+
-------
|
7
|
+
```sh
|
8
|
+
gem build bigqueryid.gem
|
9
|
+
gem install bigqueryid-<version>.gem
|
10
|
+
```
|
11
|
+
or
|
12
|
+
```ruby
|
13
|
+
gem 'bigqueryid', :git => 'git://github.com/fabiotomio/bigqueryid.git'
|
14
|
+
```
|
15
|
+
|
16
|
+
Configure
|
17
|
+
---------
|
18
|
+
```sh
|
19
|
+
export GCLOUD_PROJECT=my-todo-project-id
|
20
|
+
export GCLOUD_KEYFILE_JSON=/path/to/keyfile.json
|
21
|
+
```
|
22
|
+
|
23
|
+
Use
|
24
|
+
-------
|
25
|
+
```ruby
|
26
|
+
# Define product model product.rb
|
27
|
+
class Product
|
28
|
+
|
29
|
+
include Bigquery::Base
|
30
|
+
|
31
|
+
dataset 'core'
|
32
|
+
table 'products'
|
33
|
+
|
34
|
+
def self.create_table
|
35
|
+
bigquery.dataset(self.dataset_name).create_table self.table_name do |schema|
|
36
|
+
schema.string 'barcode'
|
37
|
+
schema.timestamp 'created_at'
|
38
|
+
schema.integer 'id'
|
39
|
+
schema.string 'name'
|
40
|
+
schema.float 'price'
|
41
|
+
schema.timestamp 'updated_at'
|
42
|
+
end unless table_exist?
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.fetch_all
|
46
|
+
sql = <<-SQL.squish
|
47
|
+
SELECT
|
48
|
+
*
|
49
|
+
FROM core.products
|
50
|
+
ORDER BY
|
51
|
+
P.name
|
52
|
+
SQL
|
53
|
+
fetch sql
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Return if table exists
|
58
|
+
Product.table_exist?
|
59
|
+
|
60
|
+
# Delete table
|
61
|
+
Product.delete_table
|
62
|
+
|
63
|
+
# Delete and create table
|
64
|
+
Product.flush
|
65
|
+
|
66
|
+
# Fetch all rows
|
67
|
+
Product.fetch_all
|
68
|
+
|
69
|
+
```
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Bigqueryid
|
2
|
+
# Define behaviour to attributes of entity.
|
3
|
+
module Attributes
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
class_attribute :attributes
|
8
|
+
|
9
|
+
self.attributes = {}
|
10
|
+
|
11
|
+
field :id
|
12
|
+
|
13
|
+
def attributes=(attributes)
|
14
|
+
if attributes.is_a? ::Hash
|
15
|
+
attributes.each_pair { |key, value| send("#{key}=", value) }
|
16
|
+
else
|
17
|
+
raise Bigqueryid::Errors::BigqueryError.new 'Attributes params need is Hash'
|
18
|
+
end
|
19
|
+
rescue
|
20
|
+
raise Bigqueryid::Errors::BigqueryError.new 'Attribute invalid'
|
21
|
+
end
|
22
|
+
|
23
|
+
def properties_names
|
24
|
+
attributes.keys
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_default_values
|
28
|
+
attributes.each_pair do |name, options|
|
29
|
+
next unless options.key? :default
|
30
|
+
|
31
|
+
default = options[:default]
|
32
|
+
# Default might be a lambda
|
33
|
+
value = default.respond_to?(:call) ? default.call : default
|
34
|
+
send("#{name}=", value)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_hash
|
39
|
+
hash = {}
|
40
|
+
properties_names.each do |property|
|
41
|
+
hash[property] = send(property)
|
42
|
+
end
|
43
|
+
hash.sort.to_h
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class_methods do
|
48
|
+
protected
|
49
|
+
|
50
|
+
def field(name, options = {})
|
51
|
+
add_field(name.to_s, options)
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_field(name, options)
|
55
|
+
attributes[name] = options
|
56
|
+
create_accessors(name)
|
57
|
+
end
|
58
|
+
|
59
|
+
# https://www.leighhalliday.com/ruby-metaprogramming-creating-methods
|
60
|
+
def create_accessors(name)
|
61
|
+
define_method(name) do # Define get method
|
62
|
+
instance_variable_get("@#{name}")
|
63
|
+
end
|
64
|
+
define_method("#{name}=") do |value| # Define set method
|
65
|
+
instance_variable_set("@#{name}", value)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Bigqueryid
|
2
|
+
module Base
|
3
|
+
# Define behaviour for initialization of Base.
|
4
|
+
module Initializable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
def initialize(options = nil)
|
9
|
+
set_default_values
|
10
|
+
if options.is_a? Google::Cloud::Bigquery::Data
|
11
|
+
properties_names.each { |a| send("#{a}=", options[a.to_s]) }
|
12
|
+
send('id=', options.key.id)
|
13
|
+
elsif options.is_a? ::Hash
|
14
|
+
options.each_pair { |key, value| send("#{key}=", value) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
# BigQuery DSL
|
3
|
+
module Bigqueryid
|
4
|
+
# Inject class methods in BigQuery Model
|
5
|
+
module Base
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
include Attributes
|
9
|
+
include Criteria
|
10
|
+
|
11
|
+
include Base::Initializable
|
12
|
+
|
13
|
+
included do
|
14
|
+
class_attribute :dataset_name
|
15
|
+
class_attribute :table_name
|
16
|
+
|
17
|
+
def self.dataset(name)
|
18
|
+
self.dataset_name = name
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.table(name)
|
22
|
+
self.table_name = name
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.gcloud
|
26
|
+
Google::Cloud.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.bigquery
|
30
|
+
@bigquery_connection ||= gcloud.bigquery
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.gcloud_table
|
34
|
+
bigquery.dataset(dataset_name).table(table_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.table_exist?
|
38
|
+
gcloud_table ? true : false
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.delete_table
|
42
|
+
gcloud_table.delete if table_exist?
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.flush
|
46
|
+
delete_table
|
47
|
+
create_table
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.load_data_from_csv(gs_url)
|
51
|
+
job = gcloud_table.load gs_url
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.run(query_string)
|
55
|
+
bigquery.query query_string
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Bigqueryid
|
2
|
+
module Criteria
|
3
|
+
# Defines behaviour for query operations.
|
4
|
+
module Queryable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
class_methods do
|
8
|
+
|
9
|
+
def run(query)
|
10
|
+
result = bigquery.query query
|
11
|
+
new(result.first) if result.count == 1
|
12
|
+
end
|
13
|
+
|
14
|
+
def fetch(query)
|
15
|
+
result = bigquery.query query
|
16
|
+
if result.count > 0
|
17
|
+
result.map { |element| new(element) }
|
18
|
+
else
|
19
|
+
[]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/bigqueryid.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Bigqueryid
|
2
|
+
require 'google/cloud/bigquery'
|
3
|
+
require 'active_support/concern'
|
4
|
+
require 'active_model'
|
5
|
+
|
6
|
+
require 'bigqueryid/errors/bigquery_error'
|
7
|
+
require 'bigqueryid/attributes'
|
8
|
+
require 'bigqueryid/criteria/queryable'
|
9
|
+
require 'bigqueryid/criteria'
|
10
|
+
require 'bigqueryid/base/initializable'
|
11
|
+
require 'bigqueryid/base'
|
12
|
+
require 'bigqueryid/timestamps'
|
13
|
+
require 'bigqueryid/version'
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bigqueryid
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fabio Tomio
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: google-cloud-bigquery
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.20'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.20'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activemodel
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4.2'
|
55
|
+
description: Simple ORM to Google BigQuery
|
56
|
+
email: fabiotomio@gmail.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- README.md
|
62
|
+
- lib/bigqueryid.rb
|
63
|
+
- lib/bigqueryid/attributes.rb
|
64
|
+
- lib/bigqueryid/base.rb
|
65
|
+
- lib/bigqueryid/base/initializable.rb
|
66
|
+
- lib/bigqueryid/criteria.rb
|
67
|
+
- lib/bigqueryid/criteria/queryable.rb
|
68
|
+
- lib/bigqueryid/errors/bigquery_error.rb
|
69
|
+
- lib/bigqueryid/timestamps.rb
|
70
|
+
- lib/bigqueryid/version.rb
|
71
|
+
homepage: http://github.com/fabiotomio/bigqueryid
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.3.0
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 2.6.7
|
92
|
+
signing_key:
|
93
|
+
specification_version: 4
|
94
|
+
summary: Google BigQuery ORM
|
95
|
+
test_files: []
|