Module: PartitionGardener::DateBucket
- Defined in:
- lib/partition_gardener/date_bucket.rb
Class Method Summary collapse
- .active_key(bucket) ⇒ Object
- .add_buckets(date, count, bucket) ⇒ Object
- .archive_bucket_from_partition_name(table_name, partition_name, bucket) ⇒ Object
- .beginning_of_bucket(date, bucket) ⇒ Object
- .date_trunc_unit(bucket) ⇒ Object
- .default_active_span(bucket) ⇒ Object
- .end_of_bucket(date, bucket) ⇒ Object
- .next_bucket(date, bucket) ⇒ Object
- .normalize(bucket) ⇒ Object
- .partition_definition_clause(date, bucket) ⇒ Object
- .partition_name(table_name, identifier, bucket) ⇒ Object
- .partition_name_suffix(identifier, bucket) ⇒ Object
Class Method Details
.active_key(bucket) ⇒ Object
9 10 11 12 13 14 15 16 17 |
# File 'lib/partition_gardener/date_bucket.rb', line 9 def active_key(bucket) case normalize(bucket) when :day then :active_days when :week then :active_weeks when :quarter then :active_quarters when :year then :active_years else :active_months end end |
.add_buckets(date, count, bucket) ⇒ Object
63 64 65 66 67 68 69 70 71 |
# File 'lib/partition_gardener/date_bucket.rb', line 63 def add_buckets(date, count, bucket) case normalize(bucket) when :day then DateCalendar.add_days(date, count) when :week then DateCalendar.add_weeks(date, count) when :quarter then DateCalendar.add_quarters(date, count) when :year then DateCalendar.add_years(date, count) else DateCalendar.add_months(date, count) end end |
.archive_bucket_from_partition_name(table_name, partition_name, bucket) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/partition_gardener/date_bucket.rb', line 89 def archive_bucket_from_partition_name(table_name, partition_name, bucket) case normalize(bucket) when :day match = partition_name.match(/^#{Regexp.escape(table_name)}_(\d{4})_(\d{2})_(\d{2})$/) return Date.new(match[1].to_i, match[2].to_i, match[3].to_i) if match when :week match = partition_name.match(/^#{Regexp.escape(table_name)}_(\d{4})_W(\d{2})$/) return DateCalendar.beginning_of_week(Date.strptime("#{match[1]}-W#{match[2]}-1", "%G-W%V-%u")) if match when :quarter match = partition_name.match(/^#{Regexp.escape(table_name)}_(\d{4})_Q([1-4])$/) return Date.new(match[1].to_i, ((match[2].to_i - 1) * 3) + 1, 1) if match when :year match = partition_name.match(/^#{Regexp.escape(table_name)}_(\d{4})$/) return Date.new(match[1].to_i, 1, 1) if match else match = partition_name.match(/^#{Regexp.escape(table_name)}_(\d{4})_(\d{2})$/) return Date.new(match[1].to_i, match[2].to_i, 1) if match end nil end |
.beginning_of_bucket(date, bucket) ⇒ Object
39 40 41 42 43 44 45 46 47 |
# File 'lib/partition_gardener/date_bucket.rb', line 39 def beginning_of_bucket(date, bucket) case normalize(bucket) when :day then DateCalendar.beginning_of_day(date) when :week then DateCalendar.beginning_of_week(date) when :quarter then DateCalendar.beginning_of_quarter(date) when :year then DateCalendar.beginning_of_year(date) else DateCalendar.beginning_of_month(date) end end |
.date_trunc_unit(bucket) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/partition_gardener/date_bucket.rb', line 29 def date_trunc_unit(bucket) case normalize(bucket) when :day then "day" when :week then "week" when :quarter then "quarter" when :year then "year" else "month" end end |
.default_active_span(bucket) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/partition_gardener/date_bucket.rb', line 19 def default_active_span(bucket) case normalize(bucket) when :day then 90 when :week then 52 when :quarter then 8 when :year then 2 else 12 end end |
.end_of_bucket(date, bucket) ⇒ Object
49 50 51 |
# File 'lib/partition_gardener/date_bucket.rb', line 49 def end_of_bucket(date, bucket) beginning_of_bucket(next_bucket(date, bucket), bucket) end |
.next_bucket(date, bucket) ⇒ Object
53 54 55 56 57 58 59 60 61 |
# File 'lib/partition_gardener/date_bucket.rb', line 53 def next_bucket(date, bucket) case normalize(bucket) when :day then DateCalendar.add_days(date, 1) when :week then DateCalendar.add_weeks(date, 1) when :quarter then DateCalendar.add_quarters(date, 1) when :year then DateCalendar.next_year(date) else DateCalendar.next_month(date) end end |
.normalize(bucket) ⇒ Object
5 6 7 |
# File 'lib/partition_gardener/date_bucket.rb', line 5 def normalize(bucket) bucket.to_sym end |
.partition_definition_clause(date, bucket) ⇒ Object
111 112 113 114 115 |
# File 'lib/partition_gardener/date_bucket.rb', line 111 def partition_definition_clause(date, bucket) start_range = beginning_of_bucket(date, bucket) end_range = end_of_bucket(date, bucket) "FROM ('#{start_range}') TO ('#{end_range}')" end |
.partition_name(table_name, identifier, bucket) ⇒ Object
85 86 87 |
# File 'lib/partition_gardener/date_bucket.rb', line 85 def partition_name(table_name, identifier, bucket) "#{table_name}_#{partition_name_suffix(identifier, bucket)}" end |
.partition_name_suffix(identifier, bucket) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/partition_gardener/date_bucket.rb', line 73 def partition_name_suffix(identifier, bucket) case normalize(bucket) when :day then identifier.strftime("%Y_%m_%d") when :week then identifier.strftime("%G_W%V") when :quarter quarter = ((identifier.month - 1) / 3) + 1 format("%d_Q%d", identifier.year, quarter) when :year then identifier.year.to_s else identifier.strftime("%Y_%m") end end |