beetle_etl 2.0.3 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 114b9229ba18051ff3bb5d606af695df0b58649c
4
- data.tar.gz: 869afc2743aa1c5a4028bc4d48b1fa7416c4bb43
3
+ metadata.gz: 13376260ac59a025f892af7ab4c47346ef7bd399
4
+ data.tar.gz: e5e0bcad031552006cc3e650725b245e121acc25
5
5
  SHA512:
6
- metadata.gz: 1c70a1b62aa9689174177d4021eb1499ad6afdbf688338affc682d99c21633f81a4f61a64b5db3f487b7cdeddef9511cf430cef743f3eb73eedcc1d8b11562f1
7
- data.tar.gz: d61a1b35342ec7a4cf4d78ffee9efaed6b4ce7f3c44954a0e77b1e03c81e10f4d7edc9f26acaf5635a128f1e008302a59ab81121273003ee556899d1d42bf904
6
+ metadata.gz: e06aa20a649cd4caf061dc9f847df5446c5d09b1f60b86ecc9c450cb1de3670deff56564e9636e86865748e6b2fcf1697832d6464fd6f5d07d16ad6af987d225
7
+ data.tar.gz: 68e3004d46baf5d6f1d9eaf9e88f79ff6617e00ce013bb0b7faad89e9b175bd7827f02f6cd82a45f64acf9a1e8e08bcb3f40bd8fe3c5811c5d52256a3df5fa5e
@@ -1,9 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
- - 2.1.0
5
4
  - 2.2.0
6
5
  - 2.3.0
6
+ - 2.4.0
7
7
  addons:
8
8
  postgresql: "9.3"
9
9
  before_install:
@@ -22,7 +22,7 @@ module BeetleETL
22
22
  require 'beetle_etl/steps/load'
23
23
  require 'beetle_etl/steps/drop_stage'
24
24
 
25
- require 'beetle_etl/step_runner/sequential_step_runner'
25
+ require 'beetle_etl/step_runner/step_runner'
26
26
  require 'beetle_etl/step_runner/async_step_runner'
27
27
 
28
28
  require 'beetle_etl/import'
@@ -27,7 +27,7 @@ module BeetleETL
27
27
  CreateStage.new(@config, t.table_name, t.relations, t.column_names)
28
28
  }
29
29
 
30
- @report.deep_merge SequentialStepRunner.new(@config, steps).run
30
+ @report.deep_merge StepRunner.new(@config, steps).run
31
31
  end
32
32
 
33
33
  def run_transform
@@ -48,7 +48,7 @@ module BeetleETL
48
48
  }
49
49
 
50
50
  result = @config.database.transaction do
51
- SequentialStepRunner.new(@config, steps).run
51
+ StepRunner.new(@config, steps).run
52
52
  end
53
53
 
54
54
  @report.deep_merge result
@@ -59,7 +59,7 @@ module BeetleETL
59
59
  DropStage.new(@config, t.table_name)
60
60
  }
61
61
 
62
- @report.deep_merge SequentialStepRunner.new(@config, steps).run
62
+ @report.deep_merge StepRunner.new(@config, steps).run
63
63
  end
64
64
 
65
65
  end
@@ -1,16 +1,10 @@
1
- require_relative './abstract_step_runner'
2
- require_relative './dependency_resolver'
3
-
4
1
  module BeetleETL
5
- class AsyncStepRunner < AbstractStepRunner
2
+ class AsyncStepRunner < StepRunner
6
3
 
7
4
  def initialize(config, steps)
8
5
  super(config, steps)
9
6
 
10
- @dependency_resolver = DependencyResolver.new(steps)
11
-
12
7
  @queue = Queue.new
13
- @completed = Set.new
14
8
  @started = Set.new
15
9
  end
16
10
 
@@ -45,9 +39,5 @@ module BeetleETL
45
39
  resolvables.reject { |r| @started.include? r.name }
46
40
  end
47
41
 
48
- def all_steps_complete?
49
- @steps.map(&:name).to_set == @completed.to_set
50
- end
51
-
52
42
  end
53
43
  end
@@ -1,15 +1,26 @@
1
- require 'active_support/core_ext/hash/slice'
1
+ require_relative './dependency_resolver'
2
2
 
3
3
  module BeetleETL
4
- class AbstractStepRunner
4
+ class StepRunner
5
5
 
6
6
  def initialize(config, steps)
7
7
  @config = config
8
8
  @steps = steps
9
+ @dependency_resolver = DependencyResolver.new(steps)
10
+ @completed = Set.new
9
11
  end
10
12
 
11
13
  def run
12
- raise NotImplementedError
14
+ results = {}
15
+
16
+ until all_steps_complete?
17
+ runnables.each do |step|
18
+ add_result!(results, run_step(step))
19
+ @completed.add(step.name)
20
+ end
21
+ end
22
+
23
+ results
13
24
  end
14
25
 
15
26
  private
@@ -35,6 +46,10 @@ module BeetleETL
35
46
  raise e
36
47
  end
37
48
 
49
+ def runnables
50
+ @dependency_resolver.resolvables(@completed)
51
+ end
52
+
38
53
  def add_result!(results, step_data)
39
54
  table_name = step_data[:table_name]
40
55
  step_name = step_data[:step_name]
@@ -43,5 +58,9 @@ module BeetleETL
43
58
  results[table_name][step_name] = step_data.slice(:started_at, :finished_at)
44
59
  end
45
60
 
61
+ def all_steps_complete?
62
+ @steps.map(&:name).to_set == @completed.to_set
63
+ end
64
+
46
65
  end
47
66
  end
@@ -18,16 +18,17 @@ module BeetleETL
18
18
 
19
19
  def transition_create
20
20
  database.execute <<-SQL
21
- UPDATE "#{target_schema}"."#{stage_table_name}" stage
21
+ UPDATE "#{target_schema}"."#{stage_table_name}" stage_update
22
22
  SET
23
23
  transition = 'CREATE',
24
24
  id = NEXTVAL('#{target_schema}.#{table_name}_id_seq')
25
- WHERE NOT EXISTS (
26
- SELECT 1
27
- FROM "#{target_schema}"."#{table_name}" target
28
- WHERE target.external_id = stage.external_id
25
+ FROM "#{target_schema}"."#{stage_table_name}" stage
26
+ LEFT JOIN "#{target_schema}"."#{table_name}" target ON (
27
+ target.external_id = stage.external_id
29
28
  AND target.external_source = '#{external_source}'
30
29
  )
30
+ WHERE stage_update.external_id = stage.external_id
31
+ AND target.external_id IS NULL
31
32
  SQL
32
33
  end
33
34
 
@@ -1,3 +1,3 @@
1
1
  module BeetleETL
2
- VERSION = "2.0.3"
2
+ VERSION = "2.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beetle_etl
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luciano Maiwald
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-11 00:00:00.000000000 Z
11
+ date: 2017-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -132,10 +132,9 @@ files:
132
132
  - lib/beetle_etl/import.rb
133
133
  - lib/beetle_etl/naming.rb
134
134
  - lib/beetle_etl/reporter.rb
135
- - lib/beetle_etl/step_runner/abstract_step_runner.rb
136
135
  - lib/beetle_etl/step_runner/async_step_runner.rb
137
136
  - lib/beetle_etl/step_runner/dependency_resolver.rb
138
- - lib/beetle_etl/step_runner/sequential_step_runner.rb
137
+ - lib/beetle_etl/step_runner/step_runner.rb
139
138
  - lib/beetle_etl/steps/create_stage.rb
140
139
  - lib/beetle_etl/steps/drop_stage.rb
141
140
  - lib/beetle_etl/steps/load.rb
@@ -191,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
190
  version: '0'
192
191
  requirements: []
193
192
  rubyforge_project:
194
- rubygems_version: 2.5.2
193
+ rubygems_version: 2.6.13
195
194
  signing_key:
196
195
  specification_version: 4
197
196
  summary: BeetleETL helps you with your recurring ETL imports.
@@ -1,13 +0,0 @@
1
- require_relative './abstract_step_runner'
2
-
3
- module BeetleETL
4
- class SequentialStepRunner < AbstractStepRunner
5
-
6
- def run
7
- @steps.reduce({}) do |results, step|
8
- add_result!(results, run_step(step))
9
- end
10
- end
11
-
12
- end
13
- end