samidare 0.1.2 → 0.2.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 +4 -4
- data/.gitignore +15 -15
- data/README.md +179 -117
- data/Rakefile +7 -7
- data/lib/samidare.rb +42 -42
- data/lib/samidare/bigquery_utility.rb +85 -85
- data/lib/samidare/embulk.rb +60 -60
- data/lib/samidare/embulk_utility.rb +42 -42
- data/lib/samidare/mysql.rb +117 -117
- data/lib/samidare/version.rb +3 -3
- data/samidare.gemspec +3 -3
- data/spec/samidare/bigquery_utility_spec.rb +85 -85
- data/spec/samidare/embulk_spec.rb +23 -23
- data/spec/samidare/embulk_utility_spec.rb +119 -119
- data/spec/samidare/mysql_spec.rb +135 -135
- data/spec/samidare_spec.rb +7 -7
- data/spec/support/databe.yml +13 -13
- data/spec/support/table.yml +11 -11
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bc2846461bb56c026fab7855d4fa3bbb5d9a6fa
|
4
|
+
data.tar.gz: fec1ae897422431b75114117f89e4c442d3fa1ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77c2030170b64c5006f0d6a773bf58c365dd1b4f1261028ffe8171058f5101bf72c71934278def78147952aae7d4aff6eb7f88131eaca56c0de12aaafb1e9438
|
7
|
+
data.tar.gz: 0cd7332f0bf04d0f2d3373411b46c7c3495f9c31dc6464fb934abb154e31fa552b76612feadc62cdc8c431618a389d314400db586cff1fb94260698d88f57e6e
|
data/.gitignore
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
/.bundle/
|
2
|
-
/.yardoc
|
3
|
-
/Gemfile.lock
|
4
|
-
/_yardoc/
|
5
|
-
/coverage/
|
6
|
-
/doc/
|
7
|
-
/pkg/
|
8
|
-
/spec/reports/
|
9
|
-
/tmp/
|
10
|
-
*.bundle
|
11
|
-
*.so
|
12
|
-
*.o
|
13
|
-
*.a
|
14
|
-
.rspec
|
15
|
-
mkmf.log
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/Gemfile.lock
|
4
|
+
/_yardoc/
|
5
|
+
/coverage/
|
6
|
+
/doc/
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/tmp/
|
10
|
+
*.bundle
|
11
|
+
*.so
|
12
|
+
*.o
|
13
|
+
*.a
|
14
|
+
.rspec
|
15
|
+
mkmf.log
|
data/README.md
CHANGED
@@ -1,117 +1,179 @@
|
|
1
|
-
# Samidare
|
2
|
-
|
3
|
-
Generate Embulk config and BigQuery schema from MySQL schema and run Embulk.
|
4
|
-
|
5
|
-
## Installation
|
6
|
-
|
7
|
-
Add this line to your application's Gemfile:
|
8
|
-
|
9
|
-
```ruby
|
10
|
-
gem 'samidare'
|
11
|
-
```
|
12
|
-
|
13
|
-
And then execute:
|
14
|
-
|
15
|
-
$ bundle
|
16
|
-
|
17
|
-
Or install it yourself as:
|
18
|
-
|
19
|
-
$ gem install samidare
|
20
|
-
|
21
|
-
##
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
```
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
```
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
```
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
1
|
+
# Samidare
|
2
|
+
|
3
|
+
Generate Embulk config and BigQuery schema from MySQL schema and run Embulk.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'samidare'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install samidare
|
20
|
+
|
21
|
+
## Embulk setup
|
22
|
+
`Samidare` is utility for `Embulk` .
|
23
|
+
You need to install `Embulk` and install some gems like below.
|
24
|
+
|
25
|
+
```bash
|
26
|
+
embulk gem install embulk-input-mysql --version 0.8.2
|
27
|
+
embulk gem install embulk-output-bigquery --version 0.4.3
|
28
|
+
embulk gem install embulk-parser-jsonl --version 0.2.0
|
29
|
+
embulk gem install embulk-formatter-jsonl --version 0.1.4
|
30
|
+
```
|
31
|
+
|
32
|
+
## Usage
|
33
|
+
Require `database.yml` and `table.yml`.
|
34
|
+
Below is a sample config file.
|
35
|
+
|
36
|
+
### database.yml
|
37
|
+
```yml
|
38
|
+
db01:
|
39
|
+
host: localhost
|
40
|
+
username: root
|
41
|
+
password: pswd
|
42
|
+
database: production
|
43
|
+
bq_dataset: mysql_db01
|
44
|
+
|
45
|
+
db02:
|
46
|
+
host: localhost
|
47
|
+
username: root
|
48
|
+
password: pswd
|
49
|
+
database: production
|
50
|
+
bq_dataset: mysql_db02
|
51
|
+
|
52
|
+
```
|
53
|
+
|
54
|
+
**Caution: Embulk doesn't allow no password for MySQL**
|
55
|
+
|
56
|
+
### table.yml
|
57
|
+
```yml
|
58
|
+
db01:
|
59
|
+
tables:
|
60
|
+
- name: users
|
61
|
+
- name: events
|
62
|
+
- name: hobbies
|
63
|
+
|
64
|
+
db02:
|
65
|
+
tables:
|
66
|
+
- name: administrators
|
67
|
+
- name: configs
|
68
|
+
```
|
69
|
+
|
70
|
+
Samidare requires BigQuery parameters like below.
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
[sample.rb]
|
74
|
+
require 'samidare'
|
75
|
+
|
76
|
+
config = {
|
77
|
+
'project_id' => 'BIGQUERY_PROJECT_ID',
|
78
|
+
'service_email' => 'SERVICE_ACCOUNT_EMAIL',
|
79
|
+
'key' => '/etc/embulk/bigquery.p12',
|
80
|
+
'schema_dir' => '/var/tmp/embulk/schema',
|
81
|
+
'config_dir' => '/var/tmp/embulk/config',
|
82
|
+
'auth_method' => 'private_key'
|
83
|
+
}
|
84
|
+
|
85
|
+
client = Samidare::EmbulkClient.new
|
86
|
+
client.generate_config(config)
|
87
|
+
client.run(config)
|
88
|
+
```
|
89
|
+
|
90
|
+
```bash
|
91
|
+
ruby sample.rb
|
92
|
+
```
|
93
|
+
|
94
|
+
## Features
|
95
|
+
### process status
|
96
|
+
`Samidare` returns process status as boolean.
|
97
|
+
If all tables are succeed, then returns `true`, else `false` .
|
98
|
+
It is useful to control system flow.
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
process_status = Samidare::EmbulkClient.new.run(config)
|
102
|
+
exit 1 unless process_status
|
103
|
+
```
|
104
|
+
|
105
|
+
### narrow tables
|
106
|
+
You can narrow actual target tables from `table.yml` for test or to retry.
|
107
|
+
If no target tables is given, `Samidare` will execute all tables.
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
# in case, all tables are ['users', 'purchases', 'items']
|
111
|
+
target_tables = ['users', 'purchases']
|
112
|
+
Samidare::EmbulkClient.new.run(config, target_tables)
|
113
|
+
```
|
114
|
+
|
115
|
+
### retry
|
116
|
+
You can set retry count.
|
117
|
+
If any table failed, only failed table will be retried until retry count.
|
118
|
+
If no retry count is given, `Samidare` dosen't retry.
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
# 2 times retry will execute
|
122
|
+
Samidare::EmbulkClient.new.run(config, [], 2)
|
123
|
+
```
|
124
|
+
|
125
|
+
### SQL condition
|
126
|
+
If you set `condition` to a table in `table.yml` , SQL is generated like below.
|
127
|
+
It is useful for large size table.
|
128
|
+
|
129
|
+
```yml
|
130
|
+
[table.yml]
|
131
|
+
production:
|
132
|
+
tables:
|
133
|
+
- name: users
|
134
|
+
- name: events
|
135
|
+
conditon: created_at < CURRENT_DATE()
|
136
|
+
```
|
137
|
+
|
138
|
+
```sql
|
139
|
+
SELECT * FROM users
|
140
|
+
SELECT * FROM events WHERE created_at < CURRENT_DATE()
|
141
|
+
```
|
142
|
+
|
143
|
+
### daily snapshot
|
144
|
+
BigQuery supports table wildcard expression of a specific set of daily tables, for example, `sales20150701` .
|
145
|
+
If you need daily snapshot of a table for BigQuery, use `daily_snapshot` option to `database.yml` or `table.yml` like below.
|
146
|
+
`daily_snapshot` option effects all tables in case of `database.yml` .
|
147
|
+
On the other hand, only target table in `table.yml` .
|
148
|
+
**Daily part is determined by execute date.**
|
149
|
+
|
150
|
+
```yml
|
151
|
+
[database.yml]
|
152
|
+
production:
|
153
|
+
host: localhost
|
154
|
+
username: root
|
155
|
+
password: pswd
|
156
|
+
database: production
|
157
|
+
bq_dataset: mysql
|
158
|
+
daily_snapshot: true
|
159
|
+
```
|
160
|
+
|
161
|
+
```yml
|
162
|
+
[table.yml]
|
163
|
+
production:
|
164
|
+
tables:
|
165
|
+
- name: users
|
166
|
+
- name: events
|
167
|
+
daily_snapshot: true
|
168
|
+
- name: hobbies
|
169
|
+
|
170
|
+
Only `events` is renamed to `eventsYYYYMMDD` for BigQuery.
|
171
|
+
```
|
172
|
+
|
173
|
+
## Contributing
|
174
|
+
|
175
|
+
1. Fork it ( https://github.com/[my-github-username]/samidare/fork )
|
176
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
177
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
178
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
179
|
+
5. Create a new Pull Request
|
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require "rspec/core/rake_task"
|
3
|
-
|
4
|
-
RSpec::Core::RakeTask.new(:spec)
|
5
|
-
|
6
|
-
task :default => :spec
|
7
|
-
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
|
6
|
+
task :default => :spec
|
7
|
+
|
data/lib/samidare.rb
CHANGED
@@ -1,42 +1,42 @@
|
|
1
|
-
require 'samidare/version'
|
2
|
-
require 'samidare/embulk_utility'
|
3
|
-
require 'samidare/embulk'
|
4
|
-
require 'samidare/mysql'
|
5
|
-
|
6
|
-
module Samidare
|
7
|
-
class EmbulkClient
|
8
|
-
def generate_config(bq_config)
|
9
|
-
Samidare::EmbulkUtility::ConfigGenerator.new.generate_config(database_configs, bq_config)
|
10
|
-
end
|
11
|
-
|
12
|
-
def run(bq_config, target_table_names = [], retry_max = 0)
|
13
|
-
error_tables = run_and_retry(bq_config, target_table_names, retry_max, 0)
|
14
|
-
# return batch status(true: all tables success)
|
15
|
-
error_tables.size == 0
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
def run_and_retry(bq_config, target_table_names = [], retry_max, retry_count)
|
20
|
-
error_tables = Samidare::Embulk.new.run(
|
21
|
-
database_configs,
|
22
|
-
table_configs,
|
23
|
-
bq_config,
|
24
|
-
target_table_names)
|
25
|
-
if error_tables.size > 0 && retry_count < retry_max
|
26
|
-
puts "------------------------------------"
|
27
|
-
puts "retry start -> #{retry_count + 1} time"
|
28
|
-
puts "------------------------------------"
|
29
|
-
error_tables = run_and_retry(bq_config, error_tables, retry_max, retry_count + 1)
|
30
|
-
end
|
31
|
-
error_tables
|
32
|
-
end
|
33
|
-
|
34
|
-
def database_configs
|
35
|
-
@database_configs ||= YAML.load_file('database.yml')
|
36
|
-
end
|
37
|
-
|
38
|
-
def table_configs
|
39
|
-
@table_configs ||= Samidare::MySQL::TableConfig.generate_table_configs
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
1
|
+
require 'samidare/version'
|
2
|
+
require 'samidare/embulk_utility'
|
3
|
+
require 'samidare/embulk'
|
4
|
+
require 'samidare/mysql'
|
5
|
+
|
6
|
+
module Samidare
|
7
|
+
class EmbulkClient
|
8
|
+
def generate_config(bq_config)
|
9
|
+
Samidare::EmbulkUtility::ConfigGenerator.new.generate_config(database_configs, bq_config)
|
10
|
+
end
|
11
|
+
|
12
|
+
def run(bq_config, target_table_names = [], retry_max = 0)
|
13
|
+
error_tables = run_and_retry(bq_config, target_table_names, retry_max, 0)
|
14
|
+
# return batch status(true: all tables success)
|
15
|
+
error_tables.size == 0
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def run_and_retry(bq_config, target_table_names = [], retry_max, retry_count)
|
20
|
+
error_tables = Samidare::Embulk.new.run(
|
21
|
+
database_configs,
|
22
|
+
table_configs,
|
23
|
+
bq_config,
|
24
|
+
target_table_names)
|
25
|
+
if error_tables.size > 0 && retry_count < retry_max
|
26
|
+
puts "------------------------------------"
|
27
|
+
puts "retry start -> #{retry_count + 1} time"
|
28
|
+
puts "------------------------------------"
|
29
|
+
error_tables = run_and_retry(bq_config, error_tables, retry_max, retry_count + 1)
|
30
|
+
end
|
31
|
+
error_tables
|
32
|
+
end
|
33
|
+
|
34
|
+
def database_configs
|
35
|
+
@database_configs ||= YAML.load_file('database.yml')
|
36
|
+
end
|
37
|
+
|
38
|
+
def table_configs
|
39
|
+
@table_configs ||= Samidare::MySQL::TableConfig.generate_table_configs
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,85 +1,85 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'erb'
|
3
|
-
require 'big_query'
|
4
|
-
require 'unindent'
|
5
|
-
require 'date'
|
6
|
-
|
7
|
-
module Samidare
|
8
|
-
class BigQueryUtility
|
9
|
-
CONTENTS = <<-EOS.unindent
|
10
|
-
in:
|
11
|
-
type: mysql
|
12
|
-
user: <%= user %>
|
13
|
-
password: <%= password %>
|
14
|
-
database: <%= database %>
|
15
|
-
host: <%= host %>
|
16
|
-
query: |
|
17
|
-
<%= query %>
|
18
|
-
out:
|
19
|
-
type: bigquery
|
20
|
-
project: <%= project %>
|
21
|
-
|
22
|
-
service_account_email: <%= service_account_email %>
|
23
|
-
dataset: <%= dataset %>
|
24
|
-
table: <%= table_name %>
|
25
|
-
schema_path: <%= schema_path %>
|
26
|
-
auto_create_table: 1
|
27
|
-
path_prefix: <%= path_prefix %>
|
28
|
-
source_format: NEWLINE_DELIMITED_JSON
|
29
|
-
file_ext: .json.gz
|
30
|
-
delete_from_local_when_job_end: 1
|
31
|
-
formatter:
|
32
|
-
type: jsonl
|
33
|
-
encoders:
|
34
|
-
- {type: gzip}
|
35
|
-
EOS
|
36
|
-
|
37
|
-
def initialize(config)
|
38
|
-
@config = config.dup
|
39
|
-
@current_date = Date.today
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.generate_schema(columns)
|
43
|
-
json_body = columns.map { |column| column.to_json }.join(",\n")
|
44
|
-
"[\n" + json_body + "\n]\n"
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.generate_sql(table_config, columns)
|
48
|
-
columns = columns.map { |column| column.converted_value }
|
49
|
-
sql = "SELECT " + columns.join(",")
|
50
|
-
sql << " FROM #{table_config.name}"
|
51
|
-
sql << " WHERE #{table_config.condition}" if table_config.condition
|
52
|
-
sql << "\n"
|
53
|
-
sql
|
54
|
-
end
|
55
|
-
|
56
|
-
def generate_embulk_config(db_name, database_config, table_config, columns)
|
57
|
-
host = database_config['host']
|
58
|
-
user = database_config['username']
|
59
|
-
password = database_config['password']
|
60
|
-
database = database_config['database']
|
61
|
-
query = Samidare::BigQueryUtility.generate_sql(table_config, columns)
|
62
|
-
project = @config['project_id']
|
63
|
-
|
64
|
-
service_account_email = @config['service_email']
|
65
|
-
dataset = database_config['bq_dataset']
|
66
|
-
table_name = actual_table_name(table_config.name, database_config['daily_snapshot'] || table_config.daily_snapshot)
|
67
|
-
schema_path = "#{@config['schema_dir']}/#{db_name}/#{table_config.name}.json"
|
68
|
-
path_prefix = "/var/tmp/embulk_#{db_name}_#{table_config.name}"
|
69
|
-
|
70
|
-
ERB.new(CONTENTS).result(binding)
|
71
|
-
end
|
72
|
-
|
73
|
-
def delete_table(dataset, table_name)
|
74
|
-
@config['dataset'] = dataset
|
75
|
-
|
76
|
-
bq = BigQuery::Client.new(@config)
|
77
|
-
bq.delete_table(table_name)
|
78
|
-
end
|
79
|
-
|
80
|
-
def actual_table_name(table_name, daily_snapshot)
|
81
|
-
return table_name unless daily_snapshot
|
82
|
-
table_name + @current_date.strftime('%Y%m%d')
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
1
|
+
require 'json'
|
2
|
+
require 'erb'
|
3
|
+
require 'big_query'
|
4
|
+
require 'unindent'
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
module Samidare
|
8
|
+
class BigQueryUtility
|
9
|
+
CONTENTS = <<-EOS.unindent
|
10
|
+
in:
|
11
|
+
type: mysql
|
12
|
+
user: <%= user %>
|
13
|
+
password: <%= password %>
|
14
|
+
database: <%= database %>
|
15
|
+
host: <%= host %>
|
16
|
+
query: |
|
17
|
+
<%= query %>
|
18
|
+
out:
|
19
|
+
type: bigquery
|
20
|
+
project: <%= project %>
|
21
|
+
p12_keyfile: <%= p12_keyfile %>
|
22
|
+
service_account_email: <%= service_account_email %>
|
23
|
+
dataset: <%= dataset %>
|
24
|
+
table: <%= table_name %>
|
25
|
+
schema_path: <%= schema_path %>
|
26
|
+
auto_create_table: 1
|
27
|
+
path_prefix: <%= path_prefix %>
|
28
|
+
source_format: NEWLINE_DELIMITED_JSON
|
29
|
+
file_ext: .json.gz
|
30
|
+
delete_from_local_when_job_end: 1
|
31
|
+
formatter:
|
32
|
+
type: jsonl
|
33
|
+
encoders:
|
34
|
+
- {type: gzip}
|
35
|
+
EOS
|
36
|
+
|
37
|
+
def initialize(config)
|
38
|
+
@config = config.dup
|
39
|
+
@current_date = Date.today
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.generate_schema(columns)
|
43
|
+
json_body = columns.map { |column| column.to_json }.join(",\n")
|
44
|
+
"[\n" + json_body + "\n]\n"
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.generate_sql(table_config, columns)
|
48
|
+
columns = columns.map { |column| column.converted_value }
|
49
|
+
sql = "SELECT " + columns.join(",")
|
50
|
+
sql << " FROM #{table_config.name}"
|
51
|
+
sql << " WHERE #{table_config.condition}" if table_config.condition
|
52
|
+
sql << "\n"
|
53
|
+
sql
|
54
|
+
end
|
55
|
+
|
56
|
+
def generate_embulk_config(db_name, database_config, table_config, columns)
|
57
|
+
host = database_config['host']
|
58
|
+
user = database_config['username']
|
59
|
+
password = database_config['password']
|
60
|
+
database = database_config['database']
|
61
|
+
query = Samidare::BigQueryUtility.generate_sql(table_config, columns)
|
62
|
+
project = @config['project_id']
|
63
|
+
p12_keyfile = @config['key']
|
64
|
+
service_account_email = @config['service_email']
|
65
|
+
dataset = database_config['bq_dataset']
|
66
|
+
table_name = actual_table_name(table_config.name, database_config['daily_snapshot'] || table_config.daily_snapshot)
|
67
|
+
schema_path = "#{@config['schema_dir']}/#{db_name}/#{table_config.name}.json"
|
68
|
+
path_prefix = "/var/tmp/embulk_#{db_name}_#{table_config.name}"
|
69
|
+
|
70
|
+
ERB.new(CONTENTS).result(binding)
|
71
|
+
end
|
72
|
+
|
73
|
+
def delete_table(dataset, table_name)
|
74
|
+
@config['dataset'] = dataset
|
75
|
+
|
76
|
+
bq = BigQuery::Client.new(@config)
|
77
|
+
bq.delete_table(table_name)
|
78
|
+
end
|
79
|
+
|
80
|
+
def actual_table_name(table_name, daily_snapshot)
|
81
|
+
return table_name unless daily_snapshot
|
82
|
+
table_name + @current_date.strftime('%Y%m%d')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|