diff --git a/db/click_house/migrate/main/20250220182253_create_namespace_traversal_paths.rb b/db/click_house/migrate/main/20250220182253_create_namespace_traversal_paths.rb new file mode 100644 index 0000000000000000000000000000000000000000..54d73ce0ea452f0f07c6ecb248a908716b7a3757 --- /dev/null +++ b/db/click_house/migrate/main/20250220182253_create_namespace_traversal_paths.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class CreateNamespaceTraversalPaths < ClickHouse::Migration + def up + execute <<-SQL + CREATE TABLE namespace_traversal_paths ( + id Int64 DEFAULT 0, + traversal_path String DEFAULT '0/', + version DateTime64(6, 'UTC') DEFAULT NOW(), + deleted Boolean DEFAULT false + ) + ENGINE=ReplacingMergeTree(version, deleted) + PRIMARY KEY id + SETTINGS index_granularity = 512; -- lower granularity so id lookups use less I/O + SQL + end + + def down + execute <<-SQL + DROP TABLE IF EXISTS namespace_traversal_paths + SQL + end +end diff --git a/db/click_house/migrate/main/20250220192324_create_namespace_traversal_paths_mv.rb b/db/click_house/migrate/main/20250220192324_create_namespace_traversal_paths_mv.rb new file mode 100644 index 0000000000000000000000000000000000000000..8c1dd06b06a5b96274f58cf9468adcfdaaa21056 --- /dev/null +++ b/db/click_house/migrate/main/20250220192324_create_namespace_traversal_paths_mv.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class CreateNamespaceTraversalPathsMv < ClickHouse::Migration + def up + execute <<-SQL + CREATE MATERIALIZED VIEW namespace_traversal_paths_mv + TO namespace_traversal_paths + AS + SELECT + id, + if(length(traversal_ids) = 0, + toString(ifNull(organization_id, 0)) || '/', + toString(ifNull(organization_id, 0)) || '/' || arrayStringConcat(traversal_ids, '/') || '/') as traversal_path, + _siphon_replicated_at AS version, + _siphon_deleted AS deleted + FROM siphon_namespaces; + SQL + end + + def down + execute <<-SQL + DROP VIEW IF EXISTS namespace_traversal_paths_mv + SQL + end +end