From c5c724887e9def3aebbd0a38b2c47d1139fcc2e8 Mon Sep 17 00:00:00 2001 From: Mayur Singal <39544459+ulixius9@users.noreply.github.com> Date: Thu, 13 Mar 2025 17:06:35 +0530 Subject: [PATCH] Capture BQ Query Cost (#20124) --- .../metadata/ingestion/source/database/bigquery/queries.py | 3 ++- .../ingestion/source/database/bigquery/query_parser.py | 1 + .../services/connections/database/bigQueryConnection.json | 6 ++++++ .../services/connections/database/bigQueryConnection.ts | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ingestion/src/metadata/ingestion/source/database/bigquery/queries.py b/ingestion/src/metadata/ingestion/source/database/bigquery/queries.py index 359d154e711..e45b9077223 100644 --- a/ingestion/src/metadata/ingestion/source/database/bigquery/queries.py +++ b/ingestion/src/metadata/ingestion/source/database/bigquery/queries.py @@ -32,7 +32,8 @@ BIGQUERY_STATEMENT = textwrap.dedent( end_time, query as query_text, null as schema_name, - total_slot_ms as duration + total_slot_ms as duration, + (total_bytes_billed / POWER(2, 40)) * {cost_per_tib} as cost FROM `region-{region}`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN "{start_time}" AND "{end_time}" {filters} diff --git a/ingestion/src/metadata/ingestion/source/database/bigquery/query_parser.py b/ingestion/src/metadata/ingestion/source/database/bigquery/query_parser.py index bde25627430..54de21211bc 100644 --- a/ingestion/src/metadata/ingestion/source/database/bigquery/query_parser.py +++ b/ingestion/src/metadata/ingestion/source/database/bigquery/query_parser.py @@ -66,6 +66,7 @@ class BigqueryQueryParserSource(QueryParserSource, ABC): region=self.service_connection.usageLocation, filters=self.get_filters(), result_limit=self.source_config.resultLimit, + cost_per_tib=self.service_connection.costPerTB, ) @staticmethod diff --git a/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/bigQueryConnection.json b/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/bigQueryConnection.json index e6a0f370aee..128ae5cf48f 100644 --- a/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/bigQueryConnection.json +++ b/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/bigQueryConnection.json @@ -116,6 +116,12 @@ "supportsDataDiff": { "title": "Supports Data Diff Extraction.", "$ref": "../connectionBasicType.json#/definitions/supportsDataDiff" + }, + "costPerTB": { + "title": "Cost Per TiB", + "description": "Cost per TiB for BigQuery usage", + "type": "number", + "default": 6.25 } }, "additionalProperties": false, diff --git a/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/connections/database/bigQueryConnection.ts b/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/connections/database/bigQueryConnection.ts index f92f979485b..5cde47847f4 100644 --- a/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/connections/database/bigQueryConnection.ts +++ b/openmetadata-ui/src/main/resources/ui/src/generated/entity/services/connections/database/bigQueryConnection.ts @@ -16,6 +16,10 @@ export interface BigQueryConnection { connectionArguments?: { [key: string]: any }; connectionOptions?: { [key: string]: string }; + /** + * Cost per TiB for BigQuery usage + */ + costPerTB?: number; /** * GCP Credentials */