class BeetleETL::TableDiff
Constants
- IMPORTER_COLUMNS
Public Instance Methods
dependencies()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 9 def dependencies [MapRelations.step_name(table_name)].to_set end
run()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 13 def run %w(create update delete reinstate keep).each do |transition| public_send(:"transition_#{transition}") end end
transition_create()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 19 def transition_create database.execute <<-SQL UPDATE "#{target_schema}"."#{stage_table_name}" stage_update SET transition = 'CREATE', id = NEXTVAL('#{target_schema}.#{table_name}_id_seq') FROM "#{target_schema}"."#{stage_table_name}" stage LEFT JOIN "#{target_schema}"."#{table_name}" target ON ( target.external_id = stage.external_id AND target.external_source = '#{external_source}' ) WHERE stage_update.external_id = stage.external_id AND target.external_id IS NULL SQL end
transition_delete()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 55 def transition_delete database.execute <<-SQL INSERT INTO "#{target_schema}"."#{stage_table_name}" (transition, id) SELECT 'DELETE', target.id FROM "#{target_schema}"."#{table_name}" target LEFT OUTER JOIN "#{target_schema}"."#{stage_table_name}" stage ON (stage.external_id = target.external_id) WHERE stage.external_id IS NULL AND target.external_source = '#{external_source}' AND target.deleted_at IS NULL SQL end
transition_keep()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 87 def transition_keep database.execute <<-SQL UPDATE "#{target_schema}"."#{stage_table_name}" stage_update SET transition = 'KEEP', id = target.id FROM "#{target_schema}"."#{stage_table_name}" stage JOIN "#{target_schema}"."#{table_name}" target ON ( target.external_id = stage.external_id AND target.external_source = '#{external_source}' AND target.deleted_at IS NULL AND (#{target_record_columns.join(', ')}) IS NOT DISTINCT FROM (#{stage_record_columns.join(', ')}) ) WHERE stage_update.external_id = stage.external_id SQL end
transition_reinstate()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 71 def transition_reinstate database.execute <<-SQL UPDATE "#{target_schema}"."#{stage_table_name}" stage_update SET transition = 'REINSTATE', id = target.id FROM "#{target_schema}"."#{stage_table_name}" stage JOIN "#{target_schema}"."#{table_name}" target ON ( target.external_id = stage.external_id AND target.external_source = '#{external_source}' AND target.deleted_at IS NOT NULL ) WHERE stage_update.external_id = stage.external_id SQL end
transition_update()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 35 def transition_update database.execute <<-SQL UPDATE "#{target_schema}"."#{stage_table_name}" stage_update SET transition = 'UPDATE', id = target.id FROM "#{target_schema}"."#{stage_table_name}" stage JOIN "#{target_schema}"."#{table_name}" target ON ( target.external_id = stage.external_id AND target.external_source = '#{external_source}' AND target.deleted_at IS NULL AND (#{target_record_columns.join(', ')}) IS DISTINCT FROM (#{stage_record_columns.join(', ')}) ) WHERE stage_update.external_id = stage.external_id SQL end
Private Instance Methods
data_columns()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 117 def data_columns table_columns - ignored_columns end
ignored_columns()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 125 def ignored_columns importer_columns + [:id] + table_columns.select do |column_name| column_name.to_s.index(/^external_.+_id$/) end end
importer_columns()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 131 def importer_columns IMPORTER_COLUMNS end
prefixed_columns(columns, prefix)
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 135 def prefixed_columns(columns, prefix) columns.map { |column| %Q("#{prefix}"."#{column}") } end
stage_record_columns()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 113 def stage_record_columns prefixed_columns(data_columns, 'stage') end
table_columns()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 121 def table_columns @table_columns ||= database.column_names(target_schema, stage_table_name) end
target_record_columns()
click to toggle source
# File lib/beetle_etl/steps/table_diff.rb, line 109 def target_record_columns prefixed_columns(data_columns, 'target') end