chore: import upstream snapshot with attribution
Integration Tests - MySQL + Elasticsearch / Detect Changes (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / integration-tests-mysql-elasticsearch (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / integration-tests-postgres-elasticsearch-redis (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / integration-tests-postgres-opensearch (push) Has been cancelled
Java Checkstyle / java-checkstyle (push) Has been cancelled
Maven Collate Tests / maven-collate-ci (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests-status (push) Has been cancelled
Publish Package to Maven Central Repository / publish-maven-packages (push) Has been cancelled
OpenMetadata Service Unit Tests / Detect Changes (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests (push) Has been cancelled
OpenMetadata Service Unit Tests / k8s_operator-unit-tests (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / Detect Changes (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / integration-tests-mysql-elasticsearch (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / integration-tests-postgres-elasticsearch-redis (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / integration-tests-postgres-opensearch (push) Has been cancelled
Java Checkstyle / java-checkstyle (push) Has been cancelled
Maven Collate Tests / maven-collate-ci (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests-status (push) Has been cancelled
Publish Package to Maven Central Repository / publish-maven-packages (push) Has been cancelled
OpenMetadata Service Unit Tests / Detect Changes (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests (push) Has been cancelled
OpenMetadata Service Unit Tests / k8s_operator-unit-tests (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
-- Update widget description
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Aggregates platform activity including asset updates, comments, and task changes, keeping users informed.')
|
||||
WHERE name = 'ActivityFeed' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Allows admins to create customized lists of high-impact asset views by applying filters. Ideal for curating datasets relevant to specific user groups.')
|
||||
WHERE name = 'CuratedAssets' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Highlights data assets across the platform for quicker access to frequently used or high-value datasets.')
|
||||
WHERE name = 'DataAssets' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Lists data assets that the user is actively following and provides quick access.')
|
||||
WHERE name = 'Following' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Visualizes key performance metrics of data assets in an intuitive graph format.')
|
||||
WHERE name = 'KPI' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Shows recently viewed data assets for quick access and seamless continuation of work.')
|
||||
WHERE name = 'MyData' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Displays a real-time feed of assigned tasks to help users track and manage their workload efficiently.')
|
||||
WHERE name = 'MyTask' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Shows the total number of data assets that can be accessed, gives a quick view of what''s available in the system.')
|
||||
WHERE name = 'TotalAssets' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Displays all available domains to explore and access data grouped by specific data assets.')
|
||||
WHERE name = 'Domains' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Presents an overview of data quality test result status and links to access incidents.')
|
||||
WHERE name = 'DataQuality' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Quick access for recently viewed or edited articles, policies, and guidelines for team-wide clarity.')
|
||||
WHERE name = 'KnowledgeCenter' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = JSON_SET(json, '$.description',
|
||||
'Lists active or recent data pipeline executions with status and progress of data flows.')
|
||||
WHERE name = 'PipelineStatus' AND entityType = 'KnowledgePanel';
|
||||
@@ -0,0 +1,205 @@
|
||||
-- Drive Service Tables
|
||||
CREATE TABLE IF NOT EXISTS drive_service_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.id'))) STORED NOT NULL,
|
||||
nameHash VARCHAR(256) NOT NULL COLLATE ascii_bin,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.name'))) VIRTUAL NOT NULL,
|
||||
serviceType VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.serviceType'))) VIRTUAL NOT NULL,
|
||||
json JSON NOT NULL,
|
||||
updatedAt BIGINT UNSIGNED GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedAt'))) VIRTUAL NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedBy'))) VIRTUAL NOT NULL,
|
||||
deleted TINYINT(1) GENERATED ALWAYS AS (json_extract(json, '$.deleted')) VIRTUAL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY drive_service_entity_name_hash (nameHash)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
-- Directory Entity
|
||||
CREATE TABLE IF NOT EXISTS directory_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.id'))) STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.name'))) VIRTUAL NOT NULL,
|
||||
fqnHash VARCHAR(768) NOT NULL COLLATE ascii_bin,
|
||||
json JSON NOT NULL,
|
||||
updatedAt BIGINT UNSIGNED GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedAt'))) VIRTUAL NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedBy'))) VIRTUAL NOT NULL,
|
||||
deleted TINYINT(1) GENERATED ALWAYS AS (json_extract(json, '$.deleted')) VIRTUAL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY directory_entity_fqn_hash (fqnHash)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
-- Migrate domain to domains in all entity tables that had singular domain
|
||||
-- Using the correct table names from existing migrations
|
||||
UPDATE api_collection_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE api_endpoint_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE api_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE chart_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE dashboard_data_model_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE dashboard_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE dashboard_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE database_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE database_schema_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE dbservice_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE glossary_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE glossary_term_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE ingestion_pipeline_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE messaging_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE metadata_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE metric_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE ml_model_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE mlmodel_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE persona_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE pipeline_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE pipeline_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE query_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE report_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE search_index_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE search_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE storage_container_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE storage_service_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE stored_procedure_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE table_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
UPDATE topic_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
-- Note: user_entity and team_entity already had domains array, so they are not migrated
|
||||
|
||||
-- File Entity
|
||||
CREATE TABLE IF NOT EXISTS file_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.id'))) STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.name'))) VIRTUAL NOT NULL,
|
||||
fileType VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.fileType'))) VIRTUAL,
|
||||
directoryFqn VARCHAR(768) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.directory.fullyQualifiedName'))) VIRTUAL,
|
||||
fqnHash VARCHAR(768) NOT NULL COLLATE ascii_bin,
|
||||
json JSON NOT NULL,
|
||||
updatedAt BIGINT UNSIGNED GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedAt'))) VIRTUAL NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedBy'))) VIRTUAL NOT NULL,
|
||||
deleted TINYINT(1) GENERATED ALWAYS AS (json_extract(json, '$.deleted')) VIRTUAL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY file_entity_fqn_hash (fqnHash),
|
||||
KEY idx_file_filetype (fileType),
|
||||
KEY idx_file_directory_fqn (directoryFqn)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
-- Spreadsheet Entity
|
||||
CREATE TABLE IF NOT EXISTS spreadsheet_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.id'))) STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.name'))) VIRTUAL NOT NULL,
|
||||
directoryFqn VARCHAR(768) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.directory.fullyQualifiedName'))) VIRTUAL,
|
||||
fqnHash VARCHAR(768) NOT NULL COLLATE ascii_bin,
|
||||
json JSON NOT NULL,
|
||||
updatedAt BIGINT UNSIGNED GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedAt'))) VIRTUAL NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedBy'))) VIRTUAL NOT NULL,
|
||||
deleted TINYINT(1) GENERATED ALWAYS AS (json_extract(json, '$.deleted')) VIRTUAL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY spreadsheet_entity_fqn_hash (fqnHash),
|
||||
KEY idx_spreadsheet_directory_fqn (directoryFqn)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
-- Worksheet Entity
|
||||
CREATE TABLE IF NOT EXISTS worksheet_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.id'))) STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.name'))) VIRTUAL NOT NULL,
|
||||
spreadsheetFqn VARCHAR(768) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.spreadsheet.fullyQualifiedName'))) VIRTUAL,
|
||||
fqnHash VARCHAR(768) NOT NULL COLLATE ascii_bin,
|
||||
json JSON NOT NULL,
|
||||
updatedAt BIGINT UNSIGNED GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedAt'))) VIRTUAL NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json_unquote(json_extract(json, '$.updatedBy'))) VIRTUAL NOT NULL,
|
||||
deleted TINYINT(1) GENERATED ALWAYS AS (json_extract(json, '$.deleted')) VIRTUAL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY worksheet_entity_fqn_hash (fqnHash),
|
||||
KEY idx_worksheet_spreadsheet_fqn (spreadsheetFqn)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
-- Clean old test connections
|
||||
TRUNCATE automations_workflow;
|
||||
|
||||
-- Performance optimization indexes for entity_relationship table
|
||||
-- These indexes improve cascade deletion performance
|
||||
CREATE INDEX idx_entity_rel_from_delete
|
||||
ON entity_relationship(fromId, fromEntity, toId, toEntity, relation);
|
||||
|
||||
CREATE INDEX idx_entity_rel_to_delete
|
||||
ON entity_relationship(toId, toEntity, fromId, fromEntity, relation);
|
||||
|
||||
-- Index for cascade queries
|
||||
CREATE INDEX idx_entity_rel_cascade
|
||||
ON entity_relationship(fromId, relation, toEntity, toId);
|
||||
|
||||
-- Entity deletion lock table for preventing orphaned entities during cascade deletion
|
||||
CREATE TABLE IF NOT EXISTS entity_deletion_lock (
|
||||
id VARCHAR(36) NOT NULL DEFAULT (UUID()),
|
||||
entityId VARCHAR(36) NOT NULL,
|
||||
entityType VARCHAR(256) NOT NULL,
|
||||
entityFqn VARCHAR(2048) NOT NULL,
|
||||
lockType VARCHAR(50) NOT NULL, -- 'DELETE_IN_PROGRESS', 'DELETE_SCHEDULED'
|
||||
lockedBy VARCHAR(256) NOT NULL,
|
||||
lockedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
expectedCompletion TIMESTAMP NULL,
|
||||
deletionScope VARCHAR(50), -- 'ENTITY_ONLY', 'CASCADE'
|
||||
metadata JSON,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY entity_deletion_lock_unique (entityId, entityType),
|
||||
INDEX idx_deletion_lock_fqn (entityFqn(255)),
|
||||
INDEX idx_deletion_lock_time (lockedAt)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
-- Update columnValuesToBeInSet test definition to include BOOLEAN in supportedDataTypes and update parameterDefinition
|
||||
UPDATE test_definition
|
||||
SET json = JSON_SET(json, '$.supportedDataTypes', JSON_ARRAY('NUMBER', 'INT', 'FLOAT', 'DOUBLE', 'DECIMAL', 'TINYINT', 'SMALLINT', 'BIGINT', 'BYTEINT', 'BYTES', 'STRING', 'MEDIUMTEXT', 'TEXT', 'CHAR', 'VARCHAR', 'BOOLEAN'))
|
||||
WHERE name in ('columnValuesToBeInSet', 'columnValuesToBeNotInSet');
|
||||
|
||||
|
||||
-- 1. Add generated classificationHash column to support fast lookup and grouping by classification fqnHash
|
||||
ALTER TABLE tag
|
||||
ADD COLUMN classificationHash VARCHAR(255)
|
||||
GENERATED ALWAYS AS (SUBSTRING_INDEX(fqnhash, '.', 1)) STORED;
|
||||
|
||||
-- 2. Create index on classificationHash + deleted
|
||||
CREATE INDEX idx_tag_classification_hash_deleted
|
||||
ON tag (classificationHash, deleted);
|
||||
|
||||
-- 1. Migrate root-level domain to domains
|
||||
UPDATE thread_entity SET json = JSON_SET(JSON_REMOVE(json, '$.domain'), '$.domains', JSON_ARRAY(JSON_EXTRACT(json, '$.domain'))) WHERE JSON_EXTRACT(json, '$.domain') IS NOT NULL;
|
||||
|
||||
-- 2. Migrate nested feedInfo.entitySpecificInfo.entity.domain to domains
|
||||
UPDATE thread_entity
|
||||
SET json = JSON_SET(
|
||||
JSON_REMOVE(json, '$.feedInfo.entitySpecificInfo.entity.domain'),
|
||||
'$.feedInfo.entitySpecificInfo.entity.domains',
|
||||
JSON_ARRAY(
|
||||
IF(
|
||||
JSON_EXTRACT(json, '$.feedInfo.entitySpecificInfo.entity.domain') IS NOT NULL,
|
||||
JSON_EXTRACT(json, '$.feedInfo.entitySpecificInfo.entity.domain'),
|
||||
NULL
|
||||
)
|
||||
)
|
||||
)
|
||||
WHERE JSON_CONTAINS_PATH(json, 'one', '$.feedInfo.entitySpecificInfo.entity.domain')
|
||||
AND JSON_EXTRACT(json, '$.feedInfo.entitySpecificInfo.entity.domain') IS NOT NULL;
|
||||
|
||||
-- 3. Drop old single-domain column
|
||||
ALTER TABLE thread_entity DROP COLUMN domain;
|
||||
|
||||
-- 4. Add corrected generated column for multi-domains
|
||||
ALTER TABLE thread_entity
|
||||
ADD COLUMN domains TEXT
|
||||
GENERATED ALWAYS AS (
|
||||
CASE
|
||||
WHEN JSON_EXTRACT(json, '$.domains') IS NULL
|
||||
OR JSON_LENGTH(JSON_EXTRACT(json, '$.domains')) = 0
|
||||
THEN NULL
|
||||
ELSE JSON_UNQUOTE(JSON_EXTRACT(json, '$.domains'))
|
||||
END
|
||||
) STORED;
|
||||
|
||||
-- Update activity feed alert after domain changes
|
||||
DELETE FROM event_subscription_entity where name = 'ActivityFeedAlert';
|
||||
|
||||
-- Add timestamp indexes for improved performance of event ordering queries
|
||||
-- These indexes significantly improve performance of ORDER BY timestamp DESC queries
|
||||
-- used in listAllEventsWithStatuses method for alert event retrieval
|
||||
|
||||
-- Add descending timestamp index for consumers_dlq table
|
||||
-- This table stores failed event subscription events
|
||||
ALTER TABLE consumers_dlq ADD INDEX idx_consumers_dlq_timestamp_desc (timestamp DESC);
|
||||
|
||||
-- Add descending timestamp index for successful_sent_change_events table
|
||||
-- This table stores successfully sent event subscription events
|
||||
ALTER TABLE successful_sent_change_events ADD INDEX idx_successful_events_timestamp_desc (timestamp DESC);
|
||||
|
||||
-- Add composite index for better performance when filtering by subscription ID and ordering by timestamp
|
||||
ALTER TABLE successful_sent_change_events ADD INDEX idx_successful_events_subscription_timestamp (event_subscription_id, timestamp DESC);
|
||||
@@ -0,0 +1,60 @@
|
||||
-- Update widget description
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Aggregates platform activity including asset updates, comments, and task changes, keeping users informed."')
|
||||
WHERE name = 'ActivityFeed' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Allows admins to create customized lists of high-impact asset views by applying filters. Ideal for curating datasets relevant to specific user groups."')
|
||||
WHERE name = 'CuratedAssets' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Highlights data assets across the platform for quicker access to frequently used or high-value datasets."')
|
||||
WHERE name = 'DataAssets' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Lists data assets that the user is actively following and provides quick access."')
|
||||
WHERE name = 'Following' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Visualizes key performance metrics of data assets in an intuitive graph format."')
|
||||
WHERE name = 'KPI' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Shows recently viewed data assets for quick access and seamless continuation of work."')
|
||||
WHERE name = 'MyData' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Displays a real-time feed of assigned tasks to help users track and manage their workload efficiently."')
|
||||
WHERE name = 'MyTask' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Shows the total number of data assets that can be accessed, gives a quick view of what''s available in the system."')
|
||||
WHERE name = 'TotalAssets' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Displays all available domains to explore and access data grouped by specific data assets."')
|
||||
WHERE name = 'Domains' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Presents an overview of data quality test result status and links to access incidents."')
|
||||
WHERE name = 'DataQuality' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Quick access for recently viewed or edited articles, policies, and guidelines for team-wide clarity."')
|
||||
WHERE name = 'KnowledgeCenter' AND entityType = 'KnowledgePanel';
|
||||
|
||||
UPDATE doc_store
|
||||
SET json = jsonb_set(json, '{description}',
|
||||
'"Lists active or recent data pipeline executions with status and progress of data flows."')
|
||||
WHERE name = 'PipelineStatus' AND entityType = 'KnowledgePanel';
|
||||
@@ -0,0 +1,234 @@
|
||||
-- Create Drive Service entity table
|
||||
CREATE TABLE IF NOT EXISTS drive_service_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json ->> 'id') STORED NOT NULL,
|
||||
nameHash VARCHAR(256) NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json ->> 'name') STORED NOT NULL,
|
||||
serviceType VARCHAR(256) GENERATED ALWAYS AS (json ->> 'serviceType') STORED NOT NULL,
|
||||
json JSONB NOT NULL,
|
||||
updatedAt BIGINT GENERATED ALWAYS AS ((json ->> 'updatedAt')::bigint) STORED NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json ->> 'updatedBy') STORED NOT NULL,
|
||||
deleted BOOLEAN GENERATED ALWAYS AS ((json ->> 'deleted')::boolean) STORED,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (nameHash)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_drive_service_name ON drive_service_entity (name);
|
||||
-- Migrate domain to domains in all entity tables that had singular domain
|
||||
-- Using the correct table names from existing migrations and proper PostgreSQL JSON syntax
|
||||
UPDATE api_collection_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE api_endpoint_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE api_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE chart_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE dashboard_data_model_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE dashboard_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE dashboard_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE database_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE database_schema_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE dbservice_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE glossary_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE glossary_term_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE ingestion_pipeline_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE messaging_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE metadata_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE metric_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE ml_model_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE mlmodel_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE persona_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE pipeline_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE pipeline_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE query_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE report_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE search_index_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE search_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE storage_container_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE storage_service_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE stored_procedure_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE table_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
UPDATE topic_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
|
||||
-- Create Directory entity table
|
||||
CREATE TABLE IF NOT EXISTS directory_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json ->> 'id') STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json ->> 'name') STORED NOT NULL,
|
||||
fqnHash VARCHAR(768) NOT NULL,
|
||||
fullyQualifiedName VARCHAR(768) GENERATED ALWAYS AS (json ->> 'fullyQualifiedName') STORED NOT NULL,
|
||||
json JSONB NOT NULL,
|
||||
updatedAt BIGINT GENERATED ALWAYS AS ((json ->> 'updatedAt')::bigint) STORED NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json ->> 'updatedBy') STORED NOT NULL,
|
||||
deleted BOOLEAN GENERATED ALWAYS AS ((json ->> 'deleted')::boolean) STORED,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (fqnHash)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_directory_name ON directory_entity (name);
|
||||
CREATE INDEX IF NOT EXISTS idx_directory_fqn ON directory_entity (fullyQualifiedName);
|
||||
CREATE INDEX IF NOT EXISTS idx_directory_deleted ON directory_entity (deleted);
|
||||
|
||||
-- Create File entity table
|
||||
CREATE TABLE IF NOT EXISTS file_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json ->> 'id') STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json ->> 'name') STORED NOT NULL,
|
||||
fqnHash VARCHAR(768) NOT NULL,
|
||||
fullyQualifiedName VARCHAR(768) GENERATED ALWAYS AS (json ->> 'fullyQualifiedName') STORED NOT NULL,
|
||||
fileType VARCHAR(256) GENERATED ALWAYS AS (json ->> 'fileType') STORED,
|
||||
directoryFqn VARCHAR(768) GENERATED ALWAYS AS (json -> 'directory' ->> 'fullyQualifiedName') STORED,
|
||||
json JSONB NOT NULL,
|
||||
updatedAt BIGINT GENERATED ALWAYS AS ((json ->> 'updatedAt')::bigint) STORED NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json ->> 'updatedBy') STORED NOT NULL,
|
||||
deleted BOOLEAN GENERATED ALWAYS AS ((json ->> 'deleted')::boolean) STORED,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (fqnHash)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_file_name ON file_entity (name);
|
||||
CREATE INDEX IF NOT EXISTS idx_file_fqn ON file_entity (fullyQualifiedName);
|
||||
CREATE INDEX IF NOT EXISTS idx_file_deleted ON file_entity (deleted);
|
||||
CREATE INDEX IF NOT EXISTS idx_file_filetype ON file_entity (fileType);
|
||||
CREATE INDEX IF NOT EXISTS idx_file_directory_fqn ON file_entity (directoryFqn);
|
||||
|
||||
-- Create Spreadsheet entity table
|
||||
CREATE TABLE IF NOT EXISTS spreadsheet_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json ->> 'id') STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json ->> 'name') STORED NOT NULL,
|
||||
fqnHash VARCHAR(768) NOT NULL,
|
||||
fullyQualifiedName VARCHAR(768) GENERATED ALWAYS AS (json ->> 'fullyQualifiedName') STORED NOT NULL,
|
||||
directoryFqn VARCHAR(768) GENERATED ALWAYS AS (json -> 'directory' ->> 'fullyQualifiedName') STORED,
|
||||
json JSONB NOT NULL,
|
||||
updatedAt BIGINT GENERATED ALWAYS AS ((json ->> 'updatedAt')::bigint) STORED NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json ->> 'updatedBy') STORED NOT NULL,
|
||||
deleted BOOLEAN GENERATED ALWAYS AS ((json ->> 'deleted')::boolean) STORED,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (fqnHash)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_spreadsheet_name ON spreadsheet_entity (name);
|
||||
CREATE INDEX IF NOT EXISTS idx_spreadsheet_fqn ON spreadsheet_entity (fullyQualifiedName);
|
||||
CREATE INDEX IF NOT EXISTS idx_spreadsheet_deleted ON spreadsheet_entity (deleted);
|
||||
CREATE INDEX IF NOT EXISTS idx_spreadsheet_directory_fqn ON spreadsheet_entity (directoryFqn);
|
||||
|
||||
-- Create Worksheet entity table
|
||||
CREATE TABLE IF NOT EXISTS worksheet_entity (
|
||||
id VARCHAR(36) GENERATED ALWAYS AS (json ->> 'id') STORED NOT NULL,
|
||||
name VARCHAR(256) GENERATED ALWAYS AS (json ->> 'name') STORED NOT NULL,
|
||||
fqnHash VARCHAR(768) NOT NULL,
|
||||
fullyQualifiedName VARCHAR(768) GENERATED ALWAYS AS (json ->> 'fullyQualifiedName') STORED NOT NULL,
|
||||
spreadsheetFqn VARCHAR(768) GENERATED ALWAYS AS (json -> 'spreadsheet' ->> 'fullyQualifiedName') STORED,
|
||||
json JSONB NOT NULL,
|
||||
updatedAt BIGINT GENERATED ALWAYS AS ((json ->> 'updatedAt')::bigint) STORED NOT NULL,
|
||||
updatedBy VARCHAR(256) GENERATED ALWAYS AS (json ->> 'updatedBy') STORED NOT NULL,
|
||||
deleted BOOLEAN GENERATED ALWAYS AS ((json ->> 'deleted')::boolean) STORED,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (fqnHash)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_worksheet_name ON worksheet_entity (name);
|
||||
CREATE INDEX IF NOT EXISTS idx_worksheet_fqn ON worksheet_entity (fullyQualifiedName);
|
||||
CREATE INDEX IF NOT EXISTS idx_worksheet_deleted ON worksheet_entity (deleted);
|
||||
CREATE INDEX IF NOT EXISTS idx_worksheet_spreadsheet_fqn ON worksheet_entity (spreadsheetFqn);
|
||||
|
||||
-- Add performance indexes for common queries
|
||||
CREATE INDEX IF NOT EXISTS idx_directory_service ON directory_entity ((json -> 'service' ->> 'id'));
|
||||
CREATE INDEX IF NOT EXISTS idx_file_directory ON file_entity ((json -> 'directory' ->> 'id'));
|
||||
CREATE INDEX IF NOT EXISTS idx_spreadsheet_directory ON spreadsheet_entity ((json -> 'directory' ->> 'id'));
|
||||
CREATE INDEX IF NOT EXISTS idx_worksheet_spreadsheet ON worksheet_entity ((json -> 'spreadsheet' ->> 'id'));
|
||||
-- Note: user_entity and team_entity already had domains array, so they are not migrated
|
||||
|
||||
-- Clean old test connections
|
||||
TRUNCATE automations_workflow;
|
||||
|
||||
-- Performance optimization indexes for entity_relationship table
|
||||
-- These indexes improve cascade deletion performance
|
||||
CREATE INDEX IF NOT EXISTS idx_entity_rel_from_delete
|
||||
ON entity_relationship(fromid, fromentity, toid, toentity, relation);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_entity_rel_to_delete
|
||||
ON entity_relationship(toid, toentity, fromid, fromentity, relation);
|
||||
|
||||
-- Index for cascade queries (CONTAINS and PARENT_OF relationships only)
|
||||
-- PostgreSQL supports partial indexes
|
||||
CREATE INDEX IF NOT EXISTS idx_entity_rel_cascade
|
||||
ON entity_relationship(fromid, relation, toentity, toid)
|
||||
WHERE relation IN (0, 8);
|
||||
|
||||
-- Entity deletion lock table for preventing orphaned entities during cascade deletion
|
||||
CREATE TABLE IF NOT EXISTS entity_deletion_lock (
|
||||
id UUID NOT NULL DEFAULT gen_random_uuid(),
|
||||
entityId UUID NOT NULL,
|
||||
entityType VARCHAR(256) NOT NULL,
|
||||
entityFqn VARCHAR(2048) NOT NULL,
|
||||
lockType VARCHAR(50) NOT NULL, -- 'DELETE_IN_PROGRESS', 'DELETE_SCHEDULED'
|
||||
lockedBy VARCHAR(256) NOT NULL,
|
||||
lockedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
expectedCompletion TIMESTAMP NULL,
|
||||
deletionScope VARCHAR(50), -- 'ENTITY_ONLY', 'CASCADE'
|
||||
metadata JSONB,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (entityId, entityType)
|
||||
);
|
||||
|
||||
-- Create indexes for deletion lock table
|
||||
-- Use btree index for entityFqn prefix matching
|
||||
CREATE INDEX IF NOT EXISTS idx_deletion_lock_fqn ON entity_deletion_lock(entityFqn);
|
||||
CREATE INDEX IF NOT EXISTS idx_deletion_lock_time ON entity_deletion_lock(lockedAt);
|
||||
|
||||
-- Update columnValuesToBeInSet test definition to include BOOLEAN in supportedDataTypes and update parameterDefinition
|
||||
UPDATE test_definition
|
||||
SET json = jsonb_set(json, '{supportedDataTypes}', '["NUMBER", "INT", "FLOAT", "DOUBLE", "DECIMAL", "TINYINT", "SMALLINT", "BIGINT", "BYTEINT", "BYTES", "STRING", "MEDIUMTEXT", "TEXT", "CHAR", "VARCHAR", "BOOLEAN"]'::jsonb)
|
||||
WHERE name in ('columnValuesToBeInSet', 'columnValuesToBeNotInSet');
|
||||
|
||||
-- 1. Add classificationHash column to support fast lookup and grouping by classification fqnHash
|
||||
ALTER TABLE tag
|
||||
ADD COLUMN classificationHash TEXT
|
||||
GENERATED ALWAYS AS (SPLIT_PART(fqnhash, '.', 1)) STORED;
|
||||
|
||||
-- 2. Create index on classificationHash + deleted
|
||||
CREATE INDEX idx_tag_classification_hash_deleted
|
||||
ON tag (classificationHash, deleted);
|
||||
|
||||
|
||||
-- 1. Migrate root-level domain to domains
|
||||
UPDATE thread_entity SET json = jsonb_set(json::jsonb #- '{domain}', '{domains}', jsonb_build_array(json#>'{domain}')) WHERE json #> '{domain}' IS NOT NULL;
|
||||
|
||||
-- 2. Migrate nested feedInfo.entitySpecificInfo.entity.domain to domains
|
||||
UPDATE thread_entity
|
||||
SET json = jsonb_set(
|
||||
json #- '{feedInfo,entitySpecificInfo,entity,domain}',
|
||||
'{feedInfo,entitySpecificInfo,entity,domains}',
|
||||
to_jsonb(CASE
|
||||
WHEN json#>'{feedInfo,entitySpecificInfo,entity,domain}' IS NULL THEN ARRAY[]::jsonb[]
|
||||
ELSE ARRAY[json#>'{feedInfo,entitySpecificInfo,entity,domain}']
|
||||
END)
|
||||
)
|
||||
WHERE jsonb_path_exists(json, '$.feedInfo.entitySpecificInfo.entity.domain')
|
||||
AND json#>'{feedInfo,entitySpecificInfo,entity,domain}' IS NOT NULL;
|
||||
|
||||
-- 3. Drop old single-domain column
|
||||
ALTER TABLE thread_entity
|
||||
DROP COLUMN IF EXISTS domain;
|
||||
|
||||
-- 4. Add corrected generated column for multi-domains
|
||||
ALTER TABLE thread_entity
|
||||
ADD COLUMN domains TEXT GENERATED ALWAYS AS (
|
||||
CASE
|
||||
WHEN json -> 'domains' IS NULL OR jsonb_array_length(json -> 'domains') = 0 THEN NULL
|
||||
ELSE json ->> 'domains'
|
||||
END
|
||||
) STORED;
|
||||
|
||||
-- Update activity feed alert after domain changes
|
||||
DELETE FROM event_subscription_entity where name = 'ActivityFeedAlert';
|
||||
|
||||
-- Add timestamp indexes for improved performance of event ordering queries
|
||||
-- These indexes significantly improve performance of ORDER BY timestamp DESC queries
|
||||
-- used in listAllEventsWithStatuses method for alert event retrieval
|
||||
|
||||
-- Add descending timestamp index for consumers_dlq table
|
||||
-- This table stores failed event subscription events
|
||||
CREATE INDEX IF NOT EXISTS idx_consumers_dlq_timestamp_desc ON consumers_dlq (timestamp DESC);
|
||||
|
||||
-- Add descending timestamp index for successful_sent_change_events table
|
||||
-- This table stores successfully sent event subscription events
|
||||
CREATE INDEX IF NOT EXISTS idx_successful_events_timestamp_desc ON successful_sent_change_events (timestamp DESC);
|
||||
|
||||
-- Add composite index for better performance when filtering by subscription ID and ordering by timestamp
|
||||
CREATE INDEX IF NOT EXISTS idx_successful_events_subscription_timestamp ON successful_sent_change_events (event_subscription_id, timestamp DESC);
|
||||
Reference in New Issue
Block a user