MINOR: Add support for cluster key information - bigquery (#19727)

(cherry picked from commit 155571f50a9b313a32be5c76ed1975f10341b519)
This commit is contained in:
Mayur Singal 2025-02-12 12:03:18 +05:30 committed by OpenMetadata Release Bot
parent 83f21e7407
commit 01c77d28a2
19 changed files with 68 additions and 5 deletions

View File

@ -34,9 +34,11 @@ from metadata.generated.schema.entity.data.database import Database
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
from metadata.generated.schema.entity.data.storedProcedure import StoredProcedureCode from metadata.generated.schema.entity.data.storedProcedure import StoredProcedureCode
from metadata.generated.schema.entity.data.table import ( from metadata.generated.schema.entity.data.table import (
ConstraintType,
PartitionColumnDetails, PartitionColumnDetails,
PartitionIntervalTypes, PartitionIntervalTypes,
Table, Table,
TableConstraint,
TablePartition, TablePartition,
TableType, TableType,
) )
@ -96,6 +98,7 @@ from metadata.ingestion.source.database.life_cycle_query_mixin import (
from metadata.ingestion.source.database.multi_db_source import MultiDBSource from metadata.ingestion.source.database.multi_db_source import MultiDBSource
from metadata.utils import fqn from metadata.utils import fqn
from metadata.utils.credentials import GOOGLE_CREDENTIALS from metadata.utils.credentials import GOOGLE_CREDENTIALS
from metadata.utils.execution_time_tracker import calculate_execution_time
from metadata.utils.filters import filter_by_database, filter_by_schema from metadata.utils.filters import filter_by_database, filter_by_schema
from metadata.utils.logger import ingestion_logger from metadata.utils.logger import ingestion_logger
from metadata.utils.sqlalchemy_utils import ( from metadata.utils.sqlalchemy_utils import (
@ -657,6 +660,42 @@ class BigquerySource(LifeCycleQueryMixin, CommonDbSourceService, MultiDBSource):
) )
return None return None
@calculate_execution_time()
def update_table_constraints(
self,
table_name,
schema_name,
db_name,
table_constraints,
foreign_columns,
columns,
) -> List[TableConstraint]:
"""
From topology.
process the table constraints of all tables
"""
table_constraints = super().update_table_constraints(
table_name,
schema_name,
db_name,
table_constraints,
foreign_columns,
columns,
)
try:
table = self.client.get_table(fqn._build(db_name, schema_name, table_name))
if hasattr(table, "clustering_fields") and table.clustering_fields:
table_constraints.append(
TableConstraint(
constraintType=ConstraintType.CLUSTER_KEY,
columns=table.clustering_fields,
)
)
except Exception as exc:
logger.warning(f"Error getting clustering fields for {table_name}: {exc}")
logger.debug(traceback.format_exc())
return table_constraints
def get_table_partition_details( def get_table_partition_details(
self, table_name: str, schema_name: str, inspector: Inspector self, table_name: str, schema_name: str, inspector: Inspector
) -> Tuple[bool, Optional[TablePartition]]: ) -> Tuple[bool, Optional[TablePartition]]:

View File

@ -193,7 +193,8 @@
"PRIMARY_KEY", "PRIMARY_KEY",
"FOREIGN_KEY", "FOREIGN_KEY",
"SORT_KEY", "SORT_KEY",
"DIST_KEY" "DIST_KEY",
"CLUSTER_KEY"
] ]
}, },
"columns": { "columns": {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2024 Collate. * Copyright 2025 Collate.
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
@ -10,9 +10,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/**
/**
* A `Table` entity organizes data in rows and columns and is defined in a `Database Schema`. * A `Table` entity organizes data in rows and columns and is defined in a `Database Schema`.
*/ */
export interface Table { export interface Table {
@ -1064,6 +1062,7 @@ export interface TableConstraint {
} }
export enum ConstraintType { export enum ConstraintType {
ClusterKey = "CLUSTER_KEY",
DistKey = "DIST_KEY", DistKey = "DIST_KEY",
ForeignKey = "FOREIGN_KEY", ForeignKey = "FOREIGN_KEY",
PrimaryKey = "PRIMARY_KEY", PrimaryKey = "PRIMARY_KEY",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Geschlossene Aufgaben", "closed-task-plural": "Geschlossene Aufgaben",
"closed-this-task-lowercase": "diese Aufgabe schließen", "closed-this-task-lowercase": "diese Aufgabe schließen",
"cloud-config-source": "Cloud-Konfigurationsquelle", "cloud-config-source": "Cloud-Konfigurationsquelle",
"cluster": "Cluster",
"code": "Code", "code": "Code",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Alle minimieren", "collapse-all": "Alle minimieren",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Closed Tasks", "closed-task-plural": "Closed Tasks",
"closed-this-task-lowercase": "closed this task", "closed-this-task-lowercase": "closed this task",
"cloud-config-source": "Cloud Config Source", "cloud-config-source": "Cloud Config Source",
"cluster": "Cluster",
"code": "Code", "code": "Code",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Collapse All", "collapse-all": "Collapse All",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Tareas cerradas", "closed-task-plural": "Tareas cerradas",
"closed-this-task-lowercase": "cerró esta tarea", "closed-this-task-lowercase": "cerró esta tarea",
"cloud-config-source": "Fuente de configuración en el cloud", "cloud-config-source": "Fuente de configuración en el cloud",
"cluster": "Cluster",
"code": "Código", "code": "Código",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Contraer todo", "collapse-all": "Contraer todo",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Tâches Clôturées", "closed-task-plural": "Tâches Clôturées",
"closed-this-task-lowercase": "fermer cette tâche", "closed-this-task-lowercase": "fermer cette tâche",
"cloud-config-source": "Source de Configuration Cloud", "cloud-config-source": "Source de Configuration Cloud",
"cluster": "Cluster",
"code": "Code", "code": "Code",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Tout Réduire", "collapse-all": "Tout Réduire",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Tarefas pechadas", "closed-task-plural": "Tarefas pechadas",
"closed-this-task-lowercase": "pechou esta tarefa", "closed-this-task-lowercase": "pechou esta tarefa",
"cloud-config-source": "Fonte de configuración na nube", "cloud-config-source": "Fonte de configuración na nube",
"cluster": "Cluster",
"code": "Código", "code": "Código",
"collapse": "Colapsar", "collapse": "Colapsar",
"collapse-all": "Colapsar todo", "collapse-all": "Colapsar todo",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "משימות סגורות", "closed-task-plural": "משימות סגורות",
"closed-this-task-lowercase": "סגר את המשימה הזו", "closed-this-task-lowercase": "סגר את המשימה הזו",
"cloud-config-source": "מקור תצורת ענן", "cloud-config-source": "מקור תצורת ענן",
"cluster": "Cluster",
"code": "קוד", "code": "קוד",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "קפיצה לתחתית", "collapse-all": "קפיצה לתחתית",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "終了したタスク", "closed-task-plural": "終了したタスク",
"closed-this-task-lowercase": "このタスクを終了する", "closed-this-task-lowercase": "このタスクを終了する",
"cloud-config-source": "Cloud Config Source", "cloud-config-source": "Cloud Config Source",
"cluster": "Cluster",
"code": "Code", "code": "Code",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "全て折り畳む", "collapse-all": "全て折り畳む",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "बंद केलेली कार्ये", "closed-task-plural": "बंद केलेली कार्ये",
"closed-this-task-lowercase": "हे कार्य बंद केले", "closed-this-task-lowercase": "हे कार्य बंद केले",
"cloud-config-source": "क्लाउड कॉन्फिग स्रोत", "cloud-config-source": "क्लाउड कॉन्फिग स्रोत",
"cluster": "Cluster",
"code": "कोड", "code": "कोड",
"collapse": "संकुचित करा", "collapse": "संकुचित करा",
"collapse-all": "सर्व संकुचित करा", "collapse-all": "सर्व संकुचित करा",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Gesloten taken", "closed-task-plural": "Gesloten taken",
"closed-this-task-lowercase": "deze taak gesloten", "closed-this-task-lowercase": "deze taak gesloten",
"cloud-config-source": "Cloud Config-bron", "cloud-config-source": "Cloud Config-bron",
"cluster": "Cluster",
"code": "Code", "code": "Code",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Alles inklappen", "collapse-all": "Alles inklappen",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "وظایف بسته شده", "closed-task-plural": "وظایف بسته شده",
"closed-this-task-lowercase": "این وظیفه بسته شد", "closed-this-task-lowercase": "این وظیفه بسته شد",
"cloud-config-source": "منبع پیکربندی ابری", "cloud-config-source": "منبع پیکربندی ابری",
"cluster": "Cluster",
"code": "کد", "code": "کد",
"collapse": "فروپاشی", "collapse": "فروپاشی",
"collapse-all": "فروپاشی همه", "collapse-all": "فروپاشی همه",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Tarefas Fechadas", "closed-task-plural": "Tarefas Fechadas",
"closed-this-task-lowercase": "fechou esta tarefa", "closed-this-task-lowercase": "fechou esta tarefa",
"cloud-config-source": "Fonte de Configuração na Nuvem", "cloud-config-source": "Fonte de Configuração na Nuvem",
"cluster": "Cluster",
"code": "Código", "code": "Código",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Recolher Tudo", "collapse-all": "Recolher Tudo",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Tarefas Fechadas", "closed-task-plural": "Tarefas Fechadas",
"closed-this-task-lowercase": "fechou esta tarefa", "closed-this-task-lowercase": "fechou esta tarefa",
"cloud-config-source": "Fonte de Configuração na Nuvem", "cloud-config-source": "Fonte de Configuração na Nuvem",
"cluster": "Cluster",
"code": "Código", "code": "Código",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Recolher Tudo", "collapse-all": "Recolher Tudo",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "Закрытые задачи", "closed-task-plural": "Закрытые задачи",
"closed-this-task-lowercase": "закрыть задачу", "closed-this-task-lowercase": "закрыть задачу",
"cloud-config-source": "Источник облачной конфигурации", "cloud-config-source": "Источник облачной конфигурации",
"cluster": "Cluster",
"code": "Code", "code": "Code",
"collapse": "Collapse", "collapse": "Collapse",
"collapse-all": "Свернуть все", "collapse-all": "Свернуть все",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "งานที่ปิดแล้ว", "closed-task-plural": "งานที่ปิดแล้ว",
"closed-this-task-lowercase": "ปิดงานนี้", "closed-this-task-lowercase": "ปิดงานนี้",
"cloud-config-source": "แหล่งที่มาของการกำหนดค่าบนคลาวด์", "cloud-config-source": "แหล่งที่มาของการกำหนดค่าบนคลาวด์",
"cluster": "Cluster",
"code": "รหัส", "code": "รหัส",
"collapse": "ย่อ", "collapse": "ย่อ",
"collapse-all": "ย่อทั้งหมด", "collapse-all": "ย่อทั้งหมด",

View File

@ -181,6 +181,7 @@
"closed-task-plural": "已关闭任务", "closed-task-plural": "已关闭任务",
"closed-this-task-lowercase": "关闭此任务", "closed-this-task-lowercase": "关闭此任务",
"cloud-config-source": "云配置源", "cloud-config-source": "云配置源",
"cluster": "Cluster",
"code": "Code", "code": "Code",
"collapse": "折叠", "collapse": "折叠",
"collapse-all": "全部折叠", "collapse-all": "全部折叠",

View File

@ -247,6 +247,15 @@ export const getConstraintIcon = ({
break; break;
} }
case ConstraintType.ClusterKey: {
title = t('label.entity-key', {
entity: t('label.cluster'),
});
icon = isConstraintDeleted ? IconDistLineThrough : IconDistKey;
dataTestId = 'cluster-key';
break;
}
default: default:
return null; return null;
} }