manifold-cli 0.0.12 → 0.0.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83355b0f1c47db5081d22f62151431820af4b24d1bc43df571c68acc24b747fe
4
- data.tar.gz: 8c6cb9cff9b68ca9001af2706b993fe0e81ebc54b0054d7f7452d81a87d8562f
3
+ metadata.gz: 38d11b038b09c8e1f83ef07ff4b238fcb07edaeeb1a36518a182a0963c5d5589
4
+ data.tar.gz: 8ad9000c2ed33ff8a8324ce202b2c15b367b894de756099417479e9354750864
5
5
  SHA512:
6
- metadata.gz: 8411214d613656f7a7d591cd463dd9e863aa84c0def4733f6f6d70273d8d1a6058545984b936db6f328dd2f77c69dbbc1d15a86e3bc953626523389d3f7b2a66
7
- data.tar.gz: 2d3aa8049dce5dc2e11b46cf61b25639b5017753b81515c7503c41da8c9f1b55d792e6d39572aac0305a4d6cb0eec14c6e04f76062d58bade315333c2749279d
6
+ metadata.gz: 79a51d73c4d63c7fc02e13336e1cdd51be4d93023eac402134e1f3be4ecf067d016813b9a533318f37708469ad001a568abdb436b96af3ccace25db0f50ce1d5
7
+ data.tar.gz: 4143c27f33fbe4b6a7bdc16282080a9c3cd9d5f507c0ded3db633b5a571bbb0a5a39659def1eb9342e8a711875a65c9daf000f15d6e54aaef53e38301de104b8
@@ -111,6 +111,7 @@ module Manifold
111
111
  vector_config = @vector_service.load_vector_config(vector)
112
112
  config.add_vector(vector_config)
113
113
  end
114
+ config.merge_config = manifold_yaml["dimensions"]&.fetch("merge", nil) if manifold_yaml["dimensions"]
114
115
  config.write(terraform_main_path)
115
116
  end
116
117
  end
@@ -32,16 +32,35 @@ module Manifold
32
32
  private
33
33
 
34
34
  def transform_attributes_to_schema(attributes)
35
- attributes.map do |name, type_str|
36
- type, mode = parse_type_and_mode(type_str)
37
- {
38
- "name" => name,
39
- "type" => type.upcase,
40
- "mode" => mode
41
- }
35
+ attributes.map { |name, type_def| transform_field(name, type_def) }
36
+ end
37
+
38
+ def transform_field(name, type_def)
39
+ if type_def.is_a?(Hash)
40
+ transform_record_field(name, type_def)
41
+ else
42
+ transform_scalar_field(name, type_def)
42
43
  end
43
44
  end
44
45
 
46
+ def transform_record_field(name, type_def)
47
+ {
48
+ "name" => name,
49
+ "type" => "RECORD",
50
+ "mode" => "NULLABLE",
51
+ "fields" => transform_attributes_to_schema(type_def)
52
+ }
53
+ end
54
+
55
+ def transform_scalar_field(name, type_def)
56
+ type, mode = parse_type_and_mode(type_def)
57
+ {
58
+ "name" => name,
59
+ "type" => type.upcase,
60
+ "mode" => mode
61
+ }
62
+ end
63
+
45
64
  def parse_type_and_mode(type_str)
46
65
  type, mode = type_str.split(":")
47
66
  mode = mode&.upcase || "NULLABLE"
@@ -6,7 +6,6 @@ attributes:
6
6
  # created_at: TIMESTAMP
7
7
  # status: STRING
8
8
  # names: STRING:REPEATED
9
-
10
- # Optionally, reference a view specifying how to select vector dimensions
11
- # merge:
12
- # source: lib/views/select_my_vector.sql
9
+ # key_values:
10
+ # first_key: STRING
11
+ # second_key: STRING:REQUIRED
@@ -3,6 +3,11 @@ vectors:
3
3
  # Example:
4
4
  # - User
5
5
 
6
+ dimensions:
7
+ # Reference a view specifying how to select vector dimensions
8
+ merge:
9
+ source: lib/views/select_my_vector.sql
10
+
6
11
  metrics:
7
12
  - name: # Add your metric name here, e.g. Pageviews
8
13
 
@@ -10,12 +10,15 @@ module Manifold
10
10
  super()
11
11
  @name = name
12
12
  @vectors = []
13
+ @merge_config = nil
13
14
  end
14
15
 
15
16
  def add_vector(vector_config)
16
17
  @vectors << vector_config
17
18
  end
18
19
 
20
+ attr_writer :merge_config
21
+
19
22
  def as_json
20
23
  {
21
24
  "variable" => variables_block,
@@ -61,40 +64,34 @@ module Manifold
61
64
  end
62
65
 
63
66
  def routine_config
64
- return nil if @vectors.empty?
65
-
66
- routines = @vectors.filter_map { |vector| build_routine(vector) }
67
- routines.empty? ? nil : routines.to_h
68
- end
67
+ return nil if @vectors.empty? || @merge_config.nil?
69
68
 
70
- def build_routine(vector)
71
- return nil unless vector["merge"]&.fetch("source", nil)
72
-
73
- routine_name = "merge_#{vector["name"].downcase}_dimensions"
74
- [routine_name, routine_attributes(routine_name, vector)]
69
+ {
70
+ "merge_dimensions" => routine_attributes
71
+ }
75
72
  end
76
73
 
77
- def routine_attributes(routine_name, vector)
74
+ def routine_attributes
78
75
  {
79
76
  "dataset_id" => name,
80
77
  "project" => "${var.project_id}",
81
- "routine_id" => routine_name,
78
+ "routine_id" => "merge_dimensions",
82
79
  "routine_type" => "PROCEDURE",
83
80
  "language" => "SQL",
84
- "definition_body" => merge_routine_definition(vector),
81
+ "definition_body" => merge_routine_definition,
85
82
  "depends_on" => ["google_bigquery_dataset.#{name}"]
86
83
  }
87
84
  end
88
85
 
89
- def merge_routine_definition(vector)
90
- source_sql = read_source_sql(vector["merge"]["source"])
86
+ def merge_routine_definition
87
+ source_sql = read_source_sql(@merge_config["source"])
91
88
  <<~SQL
92
89
  MERGE #{name}.Dimensions AS TARGET
93
90
  USING (
94
91
  #{source_sql}
95
92
  ) AS source
96
93
  ON source.id = target.id
97
- WHEN MATCHED THEN UPDATE SET target.#{vector["name"].downcase} = source.dimensions
94
+ WHEN MATCHED THEN UPDATE SET target.dimensions = source.dimensions
98
95
  WHEN NOT MATCHED THEN INSERT ROW;
99
96
  SQL
100
97
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Manifold
4
- VERSION = "0.0.12"
4
+ VERSION = "0.0.14"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manifold-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - claytongentry