gd_bam 0.1.25 → 0.1.26
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.
- data/lib/bam/version.rb +1 -1
- data/lib/base/sink.rb +4 -0
- data/lib/cloud_connect/dsl/helpers.rb +8 -0
- data/lib/generators/etl.rb +13 -1
- metadata +2 -2
data/lib/bam/version.rb
CHANGED
data/lib/base/sink.rb
CHANGED
@@ -21,6 +21,10 @@ module GoodData
|
|
21
21
|
sink[:fields].find_all {|f| f[:type] == "date"}
|
22
22
|
end
|
23
23
|
|
24
|
+
def self.get_fact_fields(sink)
|
25
|
+
sink[:fields].find_all {|f| f[:type] == "fact"}
|
26
|
+
end
|
27
|
+
|
24
28
|
def self.add_target_type(sink)
|
25
29
|
target = sink[:target].to_s
|
26
30
|
path = Pathname(target)
|
@@ -82,6 +82,14 @@ module GoodData
|
|
82
82
|
metadata(builder, sf_description)
|
83
83
|
end
|
84
84
|
|
85
|
+
# prepares a sink for sinking into GD. This means dealing with stuff like scientific notation which is handled bu uploading as a decimal and not string
|
86
|
+
def self.sink_out_gd_metadata(metadata, sink)
|
87
|
+
metadata_fields = metadata[:fields]
|
88
|
+
sink_facts = GoodData::Bam::Sink.get_fact_fields(sink).map {|f| f[:meta]}
|
89
|
+
x = metadata_fields.map {|f| sink_facts.include?(f[:name]) ? f.merge({:type => "decimal"}) : f}
|
90
|
+
GoodData::Bam::Metadata.create(metadata.merge({:fields => x}))
|
91
|
+
end
|
92
|
+
|
85
93
|
def self.metadata(builder, description)
|
86
94
|
builder.Record({
|
87
95
|
:fieldDelimiter => description[:fieldDelimiter],
|
data/lib/generators/etl.rb
CHANGED
@@ -108,13 +108,17 @@ module GoodData
|
|
108
108
|
builder.Metadata({:id => "load_metadata"}) do |builder|
|
109
109
|
Helpers::csv_metadata(builder, state[:metadata][input_name])
|
110
110
|
end
|
111
|
+
builder.Metadata({:id => "gd_sink_metadata"}) do |builder|
|
112
|
+
Helpers::csv_metadata(builder, Helpers::sink_out_gd_metadata(state[:metadata][input_name], sink))
|
113
|
+
end
|
114
|
+
|
111
115
|
end
|
112
116
|
|
113
117
|
builder.Phase(:number => 0) do
|
114
118
|
gd_dataset = sink[:gd_name] || sink[:id]
|
115
119
|
to_svinstvo = GoodData::CloverGenerator::build_gd_dataset_loader_json(sink)
|
116
120
|
Core::build_node2(builder, Nodes.reader2({:name => "CSV Loader", :id => "loader", :fileURL => "${PROJECT}/data/#{input_name}.csv"}))
|
117
|
-
Core::build_node2(builder, Nodes.edge2({:toNode => "gd_load:0", :fromNode => "reformat:0", :metadata => "
|
121
|
+
Core::build_node2(builder, Nodes.edge2({:toNode => "gd_load:0", :fromNode => "reformat:0", :metadata => "gd_sink_metadata"}))
|
118
122
|
|
119
123
|
transform = <<HEREDOC
|
120
124
|
function string gd_date_compliance(string a_date) {
|
@@ -127,12 +131,20 @@ function string gd_date_compliance(string a_date) {
|
|
127
131
|
return a_date;
|
128
132
|
}
|
129
133
|
|
134
|
+
function decimal deal_with_scientific_notation(string a_number) {
|
135
|
+
return str2decimal(a_number);
|
136
|
+
}
|
137
|
+
|
130
138
|
function integer transform() {
|
131
139
|
$out.0.* = $in.0.*;
|
132
140
|
#{Sink.get_date_fields(sink).map do |f|
|
133
141
|
"$out.0.#{f[:meta]} = gd_date_compliance($in.0.#{f[:meta]});"
|
134
142
|
end.join("\n")}
|
135
143
|
|
144
|
+
#{Sink.get_fact_fields(sink).map do |f|
|
145
|
+
"$out.0.#{f[:meta]} = deal_with_scientific_notation($in.0.#{f[:meta]});"
|
146
|
+
end.join("\n")}
|
147
|
+
|
136
148
|
return ALL;
|
137
149
|
}
|
138
150
|
HEREDOC
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gd_bam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.26
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|