timescaledb 0.2.9 → 0.3.0
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a20c2f12a3673694b39fd99aa005d743bbc027031d3abc7c25fda904f71ee33f
|
4
|
+
data.tar.gz: fd27816a15c114baa3d75a08bd083de5493efd7ce60ebe200d6543a3dcb266bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db6642dbdb2588359fc63fff080f34479725cef75d7972f081aa2a1beb680314cf1555ba7ec94956d16cceb3ac3b7724de131e010ba1d06361350f162ed3250c
|
7
|
+
data.tar.gz: df04ac079954e4b815d922d2a076929e6c4d5f5e9c11d46a54287138e8485fb171b276361a3bae43618c068709fa9f07c0ec34faa88c3afff18ac9d65d511766
|
@@ -14,6 +14,30 @@ module Timescaledb
|
|
14
14
|
total: count
|
15
15
|
}
|
16
16
|
end
|
17
|
+
|
18
|
+
scope :hierarchical, -> do
|
19
|
+
with_recursive = <<~SQL
|
20
|
+
WITH RECURSIVE caggs AS (
|
21
|
+
SELECT mat_hypertable_id, parent_mat_hypertable_id, user_view_name
|
22
|
+
FROM _timescaledb_catalog.continuous_agg
|
23
|
+
UNION ALL
|
24
|
+
SELECT continuous_agg.mat_hypertable_id, continuous_agg.parent_mat_hypertable_id, continuous_agg.user_view_name
|
25
|
+
FROM _timescaledb_catalog.continuous_agg
|
26
|
+
JOIN caggs ON caggs.parent_mat_hypertable_id = continuous_agg.mat_hypertable_id
|
27
|
+
)
|
28
|
+
SELECT * FROM caggs
|
29
|
+
ORDER BY mat_hypertable_id
|
30
|
+
SQL
|
31
|
+
views = unscoped
|
32
|
+
.select("distinct user_view_name")
|
33
|
+
.from("(#{with_recursive}) as caggs")
|
34
|
+
.pluck(:user_view_name)
|
35
|
+
.uniq
|
36
|
+
|
37
|
+
views.map do |view|
|
38
|
+
find_by(view_name: view)
|
39
|
+
end
|
40
|
+
end
|
17
41
|
end
|
18
42
|
ContinuousAggregates = ContinuousAggregate
|
19
43
|
end
|
@@ -49,7 +49,7 @@ module Timescaledb
|
|
49
49
|
original_logger = ActiveRecord::Base.logger
|
50
50
|
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
51
51
|
|
52
|
-
options = ["chunk_time_interval =>
|
52
|
+
options = ["chunk_time_interval => #{chunk_time_interval_clause(chunk_time_interval)}"]
|
53
53
|
options += hypertable_options.map { |k, v| "#{k} => #{quote(v)}" }
|
54
54
|
|
55
55
|
arguments = [
|
@@ -165,6 +165,14 @@ module Timescaledb
|
|
165
165
|
value = options[option_key] ? 'true' : 'false'
|
166
166
|
",timescaledb.#{option_key}=#{value}"
|
167
167
|
end
|
168
|
+
|
169
|
+
def chunk_time_interval_clause(chunk_time_interval)
|
170
|
+
if chunk_time_interval.is_a?(Numeric)
|
171
|
+
chunk_time_interval
|
172
|
+
else
|
173
|
+
"INTERVAL '#{chunk_time_interval}'"
|
174
|
+
end
|
175
|
+
end
|
168
176
|
end
|
169
177
|
end
|
170
178
|
|
@@ -78,7 +78,7 @@ module Timescaledb
|
|
78
78
|
|
79
79
|
options = {
|
80
80
|
time_column: time.column_name,
|
81
|
-
chunk_time_interval: time.time_interval.inspect,
|
81
|
+
chunk_time_interval: time.time_interval ? time.time_interval.inspect : time.integer_interval,
|
82
82
|
**timescale_compression_settings_for(hypertable),
|
83
83
|
**timescale_space_partition_for(hypertable),
|
84
84
|
**timescale_index_options_for(hypertable)
|
@@ -154,19 +154,19 @@ module Timescaledb
|
|
154
154
|
def timescale_continuous_aggregates(stream)
|
155
155
|
return unless Timescaledb::ContinuousAggregates.table_exists?
|
156
156
|
|
157
|
-
Timescaledb::ContinuousAggregates.
|
157
|
+
Timescaledb::ContinuousAggregates.hierarchical.each do |aggregate|
|
158
158
|
refresh_policies_opts = if (refresh_policy = aggregate.jobs.refresh_continuous_aggregate.first)
|
159
159
|
interval = timescale_interval(refresh_policy.schedule_interval)
|
160
160
|
end_offset = timescale_interval(refresh_policy.config["end_offset"])
|
161
161
|
start_offset = timescale_interval(refresh_policy.config["start_offset"])
|
162
|
-
%(refresh_policies: { start_offset: "#{start_offset}", end_offset: "#{end_offset}", schedule_interval: "#{interval}"})
|
162
|
+
%(refresh_policies: { start_offset: "#{start_offset}", end_offset: "#{end_offset}", schedule_interval: "#{interval}"}, )
|
163
163
|
else
|
164
164
|
""
|
165
165
|
end
|
166
166
|
|
167
167
|
with_clause_opts = "materialized_only: #{aggregate[:materialized_only]}, finalized: #{aggregate[:finalized]}"
|
168
168
|
stream.puts <<~AGG.indent(2)
|
169
|
-
create_continuous_aggregate("#{aggregate.view_name}", <<-SQL, #{refresh_policies_opts}
|
169
|
+
create_continuous_aggregate("#{aggregate.view_name}", <<-SQL, #{refresh_policies_opts}#{with_clause_opts})
|
170
170
|
#{aggregate.view_definition.strip.gsub(/;$/, '')}
|
171
171
|
SQL
|
172
172
|
AGG
|
data/lib/timescaledb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timescaledb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jônatas Davi Paganini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06
|
11
|
+
date: 2024-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|