Skip to content

Commit 0220ed8

Browse files
author
migtorres
committed
trade_permits populate and join task refactor
1 parent d364e43 commit 0220ed8

File tree

3 files changed

+96
-190
lines changed

3 files changed

+96
-190
lines changed

doc/shipments/problems_with_shipments_data.md

Lines changed: 0 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -53,124 +53,3 @@ XF
5353
9567
5454

5555

56-
###Don't have taxon_concept_id for the following species_plus_ids with rank = 0
57-
58-
30142
59-
30027
60-
29667
61-
29973
62-
29683
63-
29892
64-
30014
65-
30122
66-
29819
67-
30503
68-
29671
69-
29766
70-
30007
71-
30088
72-
29822
73-
29886
74-
30002
75-
29832
76-
30072
77-
30136
78-
30449
79-
29982
80-
29765
81-
30468
82-
29910
83-
30222
84-
29858
85-
30311
86-
30110
87-
30459
88-
30431
89-
30305
90-
30235
91-
30259
92-
29872
93-
29995
94-
29937
95-
30480
96-
29929
97-
30372
98-
29867
99-
30356
100-
30145
101-
29695
102-
30128
103-
30215
104-
30092
105-
30171
106-
30018
107-
30176
108-
29877
109-
30223
110-
29921
111-
29870
112-
30062
113-
30460
114-
30350
115-
30331
116-
30472
117-
30065
118-
29748
119-
30369
120-
30466
121-
29806
122-
29718
123-
29943
124-
29701
125-
30187
126-
29727
127-
30499
128-
29737
129-
29879
130-
30172
131-
30177
132-
30477
133-
30322
134-
29945
135-
29773
136-
30011
137-
29836
138-
29759
139-
30075
140-
30240
141-
30462
142-
30425
143-
29851
144-
30324
145-
30310
146-
30272
147-
30492
148-
30114
149-
30209
150-
30353
151-
32515
152-
30020
153-
29696
154-
54320
155-
30195
156-
29729
157-
30490
158-
29707
159-
30381
160-
30127
161-
29745
162-
30253
163-
30137
164-
30082
165-
30474
166-
30412
167-
29824
168-
30032
169-
29948
170-
171-
172-
173-
174-
175-
176-

lib/modules/sapi/indexes.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def self.drop_indexes_on_shipments
7575
DROP INDEX IF EXISTS index_trade_shipments_on_unit_id;
7676
DROP INDEX IF EXISTS index_trade_shipments_on_year;
7777
DROP INDEX IF EXISTS index_trade_shipments_on_permits_ids;
78-
DROP INDEX IF EXISTS index_trade_shipments_on_legacy_id;
78+
DROP INDEX IF EXISTS index_trade_shipments_on_legacy_shipment_number;
7979
SQL
8080
ActiveRecord::Base.connection.execute(sql)
8181
end
@@ -138,10 +138,6 @@ def self.create_indexes_on_shipments
138138
ON trade_shipments
139139
USING btree
140140
(legacy_shipment_number);
141-
CREATE INDEX index_trade_shipments_on_permits_ids
142-
ON trade_shipments
143-
USING GIN
144-
(permits_ids);
145141
SQL
146142
ActiveRecord::Base.connection.execute(sql)
147143
end
Lines changed: 95 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,104 @@
1-
namespace :import do
2-
desc "Import trade permits from csv file"
3-
task :trade_permits => [:environment] do
4-
#TMP_TABLE = "permits_import"
5-
#file = "lib/files/permit_details.csv"
6-
#drop_table(TMP_TABLE)
7-
#create_table_from_csv_headers(file, TMP_TABLE)
8-
#copy_data(file, TMP_TABLE)
1+
namespace :import do
2+
desc "Import trade permits from csv file"
3+
task :trade_permits => [:environment] do
4+
TMP_TABLE = "permits_import"
5+
file = "lib/files/permit_details.csv"
6+
permits_import_to_index = {"permits_import" => ["permit_number", "shipment_number", "permit_reporter_type"]}
7+
trade_permits_to_index = {"trade_permits" => ["shipment_number", "legacy_reporter_type"]}
98

10-
sql = <<-SQL
11-
ALTER TABlE trade_permits ADD COLUMN shipment_number int;
12-
INSERT INTO trade_permits (number, shipment_number, legacy_reporter_type, created_At, updated_at)
13-
SELECT permit_number,
14-
shipment_number,
15-
legacy_reporter_type,
16-
now()::date AS created_at,
17-
now()::date AS updated_at
18-
FROM permits_import;
19-
SQL
20-
ActiveRecord::Base.connection.execute(sql)
9+
delete_shipment_number_tmp_column
10+
drop_indices(trade_permits_to_index)
11+
drop_indices(permits_import_to_index)
12+
drop_table(TMP_TABLE)
13+
create_table_from_csv_headers(file, TMP_TABLE)
14+
copy_data(file, TMP_TABLE)
15+
drop_indices(trade_permits_to_index)
16+
add_shipment_number_tmp_column
17+
create_indices(trade_permits_to_index)
18+
populate_trade_permits
19+
create_indices(trade_permits_to_index)
20+
insert_into_trade_shipments
21+
drop_indices(permits_import_to_index)
22+
drop_indices(trade_permits_to_index)
23+
delete_shipment_number_tmp_column
24+
end
25+
end
2126

22-
sql = <<-SQL
23-
CREATE INDEX index_permits_import_on_permit_number
24-
ON permits_import
25-
USING btree
26-
(permit_number);
27-
CREATE INDEX index_permits_import_on_shipment_number
28-
ON permits_import
29-
USING btree
30-
(shipment_number);
31-
CREATE INDEX index_permits_import_on_legacy_reporter_type
32-
ON permits_import
33-
USING btree
34-
(legacy_reporter_type);
35-
SQL
27+
def populate_trade_permits
28+
sql = <<-SQL
29+
INSERT INTO trade_permits (number, shipment_number, legacy_reporter_type, created_At, updated_at)
30+
SELECT permit_number,
31+
shipment_number,
32+
permit_reporter_type,
33+
now()::date AS created_at,
34+
now()::date AS updated_at
35+
FROM permits_import;
36+
SQL
37+
puts "Inserting into trade_permits"
38+
execute_query(sql)
39+
end
3640

37-
permits_entity = {"import" => "I", "export" => 'E', "origin" => 'O'}
38-
permits_entity.each do |k,v|
3941

40-
sql = <<-SQL
41-
UPDATE trade_shipments
42-
SET #{k}_permit_number = array
43-
FROM (SELECT array_agg(number) array,
44-
shipment_number
45-
from trade_permits
46-
where type = #{v})
47-
group by shipment_number) a
48-
where legacy_shipment_number = a.shipment_number
49-
SQL
50-
ActiveRecord::Base.connection.execute(sql)
51-
52-
end
42+
def insert_into_trade_shipments
43+
permits_entity = {"import" => "I", "export" => 'E', "origin" => 'O'}
44+
permits_entity.each do |k,v|
45+
sql = <<-SQL
46+
UPDATE trade_shipments
47+
SET #{k}_permit_number = permit_number
48+
FROM (SELECT array_agg(id) id,
49+
shipment_number
50+
from trade_permits
51+
where type = '#{v}'
52+
group by shipment_number) a
53+
where legacy_shipment_number = a.shipment_number
54+
SQL
55+
puts "Inserting into trade_shipments"
56+
execute_query(sql)
57+
end
58+
end
5359

54-
sql = <<-SQL
55-
ALTER TABlE trade_permits DROP COLUMN shipment_number;
56-
SQL
57-
ActiveRecord::Base.connection.execute(sql)
60+
5861

62+
def execute_query(sql)
63+
ActiveRecord::Base.connection.execute(sql)
64+
end
5965

60-
66+
def drop_indices(index)
67+
index.each do |table, columns|
68+
columns.each do |column|
69+
sql = <<-SQL
70+
DROP INDEX IF EXISTS index_#{table}_on_#{column};
71+
SQL
72+
puts "Dropping index #{index}"
73+
execute_query(sql)
74+
end
75+
end
76+
end
6177

62-
#Trade::Permi.select(:legacy_shipment_number).joins("INNER JOIN permits_import ON legacy_shipment_number = shipment_number limit 10").each do |number|
63-
#sql = <<-SQL
64-
# UPDATE trade_shipments SET export_permits_ids = s.array FROM
65-
# (SELECT #{number.legacy_shipment_number} as number, ARRAY(SELECT permit_number
66-
# FROM trade_permits inner join permits_import WHERE shipment_number = #{number.legacy_shipment_number} and permits_import.permit_type = 'E')) s
67-
# WHERE legacy_shipment_number = s.number
68-
#SQL
69-
#puts ActiveRecord::Base.connection.execute(sql).first
70-
71-
end
78+
def create_indices(table_columns)
79+
table_columns.each do |table,columns|
80+
columns.each do |column|
81+
sql = <<-SQL
82+
CREATE INDEX index_#{table}_on_#{column}
83+
ON #{table}
84+
USING btree
85+
(#{column});
86+
SQL
87+
puts "Creating index for #{column}"
88+
execute_query(sql)
89+
end
7290
end
73-
end
91+
end
92+
93+
def add_shipment_number_tmp_column
94+
sql = <<-SQL
95+
ALTER TABlE trade_permits ADD COLUMN shipment_number int;
96+
SQL
97+
execute_query(sql)
98+
end
99+
def delete_shipment_number_tmp_column
100+
sql = <<-SQL
101+
ALTER TABlE trade_permits DROP COLUMN shipment_number;
102+
SQL
103+
execute_query(sql)
104+
end

0 commit comments

Comments
 (0)