samidare 0.0.8 → 0.0.9
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 +4 -4
- data/lib/samidare/bigquery_utility.rb +8 -1
- data/lib/samidare/embulk_utility.rb +4 -11
- data/lib/samidare/version.rb +1 -1
- data/samidare.gemspec +1 -0
- data/spec/samidare/bigquery_utility_spec.rb +42 -26
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec15b952226e1fe811ab80393aa6e23d078cbf0d
|
4
|
+
data.tar.gz: ea9f9a470b9c13b05891bc7c5672b36c1d1abf68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1cb9d8ffacf52b9673ca9f6f192650c7202e8593aca20b2474687867326f9dcc6e8e417ad6733a43cd0c34a155dd26874eba9da0e48ba251fcb5aa3bee0807c
|
7
|
+
data.tar.gz: e4c0e30a4e533f51d0a54cb8fc41f332b16a0dbf4868470d897967fb64a39e0cf93a698fc93ad64669880cc3953e05ccff5abff6ef6131b73ba58ac01f13d9f3
|
@@ -2,6 +2,7 @@ require 'json'
|
|
2
2
|
require 'erb'
|
3
3
|
require 'big_query'
|
4
4
|
require 'unindent'
|
5
|
+
require 'date'
|
5
6
|
|
6
7
|
module Samidare
|
7
8
|
class BigQueryUtility
|
@@ -35,6 +36,7 @@ module Samidare
|
|
35
36
|
|
36
37
|
def initialize(config)
|
37
38
|
@config = config.dup
|
39
|
+
@current_date = Date.today
|
38
40
|
end
|
39
41
|
|
40
42
|
def self.generate_schema(column_infos)
|
@@ -58,7 +60,7 @@ module Samidare
|
|
58
60
|
p12_keyfile_path = @config['key']
|
59
61
|
service_account_email = @config['service_email']
|
60
62
|
dataset = db_info['bq_dataset']
|
61
|
-
table_name = table_info.name
|
63
|
+
table_name = actual_table_name(table_info.name, db_info['daily_snapshot'] || table_info.daily_snapshot)
|
62
64
|
schema_path = "#{@config['schema_dir']}/#{db_name}/#{table_info.name}.json"
|
63
65
|
path_prefix = "/var/tmp/embulk_#{db_name}_#{table_info.name}"
|
64
66
|
|
@@ -71,5 +73,10 @@ module Samidare
|
|
71
73
|
bq = BigQuery::Client.new(@config)
|
72
74
|
bq.delete_table(table_name)
|
73
75
|
end
|
76
|
+
|
77
|
+
def actual_table_name(table_name, daily_snapshot)
|
78
|
+
return table_name unless daily_snapshot
|
79
|
+
table_name + @current_date.strftime('%Y%m%d')
|
80
|
+
end
|
74
81
|
end
|
75
82
|
end
|
@@ -76,17 +76,6 @@ module Samidare
|
|
76
76
|
end
|
77
77
|
|
78
78
|
class DBInfo
|
79
|
-
attr_reader :name, :host, :username, :password, :database, :bq_dataset
|
80
|
-
|
81
|
-
def initialize(config)
|
82
|
-
@name = config['name']
|
83
|
-
@host = config['host']
|
84
|
-
@username = config['username']
|
85
|
-
@password = config['password']
|
86
|
-
@database = config['database']
|
87
|
-
@bq_dataset = config['bq_dataset']
|
88
|
-
end
|
89
|
-
|
90
79
|
def self.generate_db_infos
|
91
80
|
configs = YAML.load_file('database.yml')
|
92
81
|
configs
|
@@ -109,6 +98,10 @@ module Samidare
|
|
109
98
|
def name
|
110
99
|
@config['name']
|
111
100
|
end
|
101
|
+
|
102
|
+
def daily_snapshot
|
103
|
+
@config['daily_snapshot'] || false
|
104
|
+
end
|
112
105
|
end
|
113
106
|
|
114
107
|
class ColumnInfo
|
data/lib/samidare/version.rb
CHANGED
data/samidare.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
22
22
|
spec.add_development_dependency 'rake', '~> 10.0'
|
23
23
|
spec.add_development_dependency 'rspec', '>= 2.0'
|
24
|
+
spec.add_development_dependency 'timecop', '0.8.0'
|
24
25
|
|
25
26
|
spec.add_dependency 'unindent', '1.0'
|
26
27
|
spec.add_dependency 'mysql2-cs-bind', '0.0.6'
|
@@ -1,41 +1,57 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'unindent'
|
3
|
+
require 'timecop'
|
3
4
|
|
4
5
|
describe Samidare::BigQueryUtility do
|
5
6
|
describe '.generate_schema' do
|
6
7
|
subject { Samidare::BigQueryUtility.generate_schema(column_infos) }
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
it { expect(subject).to eq schema_json }
|
24
|
-
end
|
9
|
+
let(:column_infos) { [
|
10
|
+
Samidare::EmbulkUtility::ColumnInfo.new('id', 'int'),
|
11
|
+
Samidare::EmbulkUtility::ColumnInfo.new('name', 'varchar'),
|
12
|
+
Samidare::EmbulkUtility::ColumnInfo.new('created_at', 'datetime')
|
13
|
+
] }
|
14
|
+
let(:schema_json) {
|
15
|
+
<<-JSON.unindent
|
16
|
+
[
|
17
|
+
{"name":"id","type":"integer"},
|
18
|
+
{"name":"name","type":"string"},
|
19
|
+
{"name":"created_at","type":"timestamp"}
|
20
|
+
]
|
21
|
+
JSON
|
22
|
+
}
|
23
|
+
it { expect(subject).to eq schema_json }
|
25
24
|
end
|
26
25
|
|
27
26
|
describe '.generate_sql' do
|
28
27
|
subject { Samidare::BigQueryUtility.generate_sql(table_name, column_infos) }
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
29
|
+
let(:table_name) { 'simple' }
|
30
|
+
let(:column_infos) { [
|
31
|
+
Samidare::EmbulkUtility::ColumnInfo.new('id', 'int'),
|
32
|
+
Samidare::EmbulkUtility::ColumnInfo.new('name', 'varchar'),
|
33
|
+
Samidare::EmbulkUtility::ColumnInfo.new('created_at', 'datetime')
|
34
|
+
] }
|
35
|
+
let(:sql) { "SELECT id,name,UNIX_TIMESTAMP(created_at) AS created_at FROM simple\n" }
|
36
|
+
it { expect(subject).to eq sql }
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#actual_table_name' do
|
40
|
+
before { Timecop.freeze(Time.now) }
|
41
|
+
|
42
|
+
after { Timecop.return }
|
43
|
+
|
44
|
+
subject { Samidare::BigQueryUtility.new({}).actual_table_name(table_name, daily_snapshot) }
|
45
|
+
let(:table_name) { 'users' }
|
46
|
+
let(:daily_snapshot) { false }
|
47
|
+
|
48
|
+
context 'do not use daily snapshot' do
|
49
|
+
it { expect(subject).to eq table_name }
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'use daily snapshot' do
|
53
|
+
let(:daily_snapshot) { true }
|
54
|
+
it { expect(subject).to eq table_name + Time.now.strftime('%Y%m%d') }
|
39
55
|
end
|
40
56
|
end
|
41
57
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: samidare
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryoji Kobori
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: timecop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: unindent
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|