Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[COST-5141] vaccum expired trino partitions #5171

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions koku/masu/api/expired_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,23 @@
if simulate:
response_key = response_key + " (simulated)"
return Response({response_key: str(async_delete_results)})


@never_cache
@api_view(http_method_names=["GET", "DELETE"])
@permission_classes((AllowAny,))
@renderer_classes(tuple(api_settings.DEFAULT_RENDERER_CLASSES))
def expired_trino_partitions(request):
"""Return expired data."""
simulate = True

Check warning on line 47 in koku/masu/api/expired_data.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/api/expired_data.py#L47

Added line #L47 was not covered by tests
if request.method == "DELETE" and Config.DEBUG:
simulate = False
LOG.info("Simulate Flag: %s", simulate)

Check warning on line 50 in koku/masu/api/expired_data.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/api/expired_data.py#L49-L50

Added lines #L49 - L50 were not covered by tests

orchestrator = Orchestrator()
async_delete_results = orchestrator.remove_expired_trino_partitions(simulate=simulate)

Check warning on line 53 in koku/masu/api/expired_data.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/api/expired_data.py#L52-L53

Added lines #L52 - L53 were not covered by tests

response_key = "Async jobs for expired data removal"

Check warning on line 55 in koku/masu/api/expired_data.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/api/expired_data.py#L55

Added line #L55 was not covered by tests
if simulate:
response_key = response_key + " (simulated)"
return Response({response_key: str(async_delete_results)})

Check warning on line 58 in koku/masu/api/expired_data.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/api/expired_data.py#L57-L58

Added lines #L57 - L58 were not covered by tests
2 changes: 2 additions & 0 deletions koku/masu/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from masu.api.views import download_report
from masu.api.views import EnabledTagView
from masu.api.views import expired_data
from masu.api.views import expired_trino_partitions
from masu.api.views import explain_query
from masu.api.views import fix_parquet
from masu.api.views import get_status
Expand Down Expand Up @@ -58,6 +59,7 @@
path("update_exchange_rates/", update_exchange_rates, name="update_exchange_rates"),
path("update_azure_storage_capacity/", update_azure_storage_capacity, name="update_azure_storage_capacity"),
path("enabled_tags/", EnabledTagView.as_view(), name="enabled_tags"),
path("expired_trino_partitions/", expired_trino_partitions, name="expired_trino_partitions"),
path("expired_data/", expired_data, name="expired_data"),
path("hcs_report_data/", hcs_report_data, name="hcs_report_data"),
path("hcs_report_finalization/", hcs_report_finalization, name="hcs_report_finalization"),
Expand Down
1 change: 1 addition & 0 deletions koku/masu/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from masu.api.download import download_report
from masu.api.enabled_tags import EnabledTagView
from masu.api.expired_data import expired_data
from masu.api.expired_data import expired_trino_partitions
from masu.api.hcs_report_data import hcs_report_data
from masu.api.hcs_report_finalization import hcs_report_finalization
from masu.api.ingest_ocp_payload import ingest_ocp_payload
Expand Down
8 changes: 2 additions & 6 deletions koku/masu/database/aws_report_db_accessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from masu.processor import is_feature_cost_3592_tag_mapping_enabled
from reporting.models import OCP_ON_ALL_PERSPECTIVES
from reporting.models import OCP_ON_AWS_PERSPECTIVES
from reporting.models import OCP_ON_AWS_TEMP_MANAGED_TABLES
from reporting.models import OCPAllCostLineItemDailySummaryP
from reporting.models import OCPAllCostLineItemProjectDailySummaryP
from reporting.models import OCPAWSCostLineItemProjectDailySummaryP
Expand Down Expand Up @@ -243,12 +244,7 @@ def populate_ocp_on_aws_cost_daily_summary_trino(
days = self.date_helper.list_days(start_date, end_date)
days_tup = tuple(str(day.day) for day in days)
self.delete_ocp_on_aws_hive_partition_by_day(days_tup, aws_provider_uuid, openshift_provider_uuid, year, month)
tables = [
"reporting_ocpawscostlineitem_project_daily_summary_temp",
"aws_openshift_daily_resource_matched_temp",
"aws_openshift_daily_tag_matched_temp",
]
for table in tables:
for table in OCP_ON_AWS_TEMP_MANAGED_TABLES:
self.delete_hive_partition_by_month(table, openshift_provider_uuid, year, month)

pod_column = "pod_effective_usage_cpu_core_hours"
Expand Down
8 changes: 2 additions & 6 deletions koku/masu/database/azure_report_db_accessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from masu.processor import is_feature_cost_3592_tag_mapping_enabled
from reporting.models import OCP_ON_ALL_PERSPECTIVES
from reporting.models import OCP_ON_AZURE_PERSPECTIVES
from reporting.models import OCP_ON_AZURE_TEMP_MANAGED_TABLES
from reporting.models import OCPAllCostLineItemDailySummaryP
from reporting.models import OCPAllCostLineItemProjectDailySummaryP
from reporting.models import OCPAzureCostLineItemProjectDailySummaryP
Expand Down Expand Up @@ -296,12 +297,7 @@ def populate_ocp_on_azure_cost_daily_summary_trino(
"""Populate the daily cost aggregated summary for OCP on Azure."""
year = start_date.strftime("%Y")
month = start_date.strftime("%m")
tables = [
"reporting_ocpazurecostlineitem_project_daily_summary_temp",
"azure_openshift_daily_resource_matched_temp",
"azure_openshift_daily_tag_matched_temp",
]
for table in tables:
for table in OCP_ON_AZURE_TEMP_MANAGED_TABLES:
self.delete_hive_partition_by_month(table, openshift_provider_uuid, year, month)
days = self.date_helper.list_days(start_date, end_date)
days_tup = tuple(str(day.day) for day in days)
Expand Down
8 changes: 2 additions & 6 deletions koku/masu/database/gcp_report_db_accessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from masu.processor import is_feature_cost_3592_tag_mapping_enabled
from masu.util.gcp.common import check_resource_level
from masu.util.ocp.common import get_cluster_alias_from_cluster_id
from reporting.models import OCP_ON_GCP_TEMP_MANAGED_TABLES
from reporting.provider.all.models import TagMapping
from reporting.provider.gcp.models import GCPCostEntryBill
from reporting.provider.gcp.models import GCPCostEntryLineItemDailySummary
Expand Down Expand Up @@ -322,12 +323,7 @@ def populate_ocp_on_gcp_cost_daily_summary_trino(

year = start_date.strftime("%Y")
month = start_date.strftime("%m")
tables = [
"reporting_ocpgcpcostlineitem_project_daily_summary_temp",
"gcp_openshift_daily_resource_matched_temp",
"gcp_openshift_daily_tag_matched_temp",
]
for table in tables:
for table in OCP_ON_GCP_TEMP_MANAGED_TABLES:
self.delete_hive_partition_by_month(table, openshift_provider_uuid, year, month)

days = self.date_helper.list_days(start_date, end_date)
Expand Down
20 changes: 20 additions & 0 deletions koku/masu/database/ocp_report_db_accessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,26 @@
LOG.info(log_json(msg="successfully deleted Hive partitions", context=ctx))
return True

def find_expired_trino_partitions(self, table, source_column, date_str):
"""Queries Trino for partitions less than the parition date."""
if not self.table_exists_trino(table):
LOG.info("Could not find table.")
return False
sql = f"""

Check warning on line 291 in koku/masu/database/ocp_report_db_accessor.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/database/ocp_report_db_accessor.py#L289-L291

Added lines #L289 - L291 were not covered by tests
SELECT partitions.year, partitions.month, partitions.source
FROM (
SELECT year as year,
month as month,
day as day,
cast(date_parse(concat(year, '-', month, '-', day), '%Y-%m-%d') as date) as partition_date,
{source_column} as source
FROM "{table}$partitions"
) as partitions
WHERE partitions.partition_date < DATE '{date_str}'
GROUP BY partitions.year, partitions.month, partitions.source
"""
return self._execute_trino_raw_sql_query(sql, log_ref="finding expired partitions")

Check warning on line 304 in koku/masu/database/ocp_report_db_accessor.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/database/ocp_report_db_accessor.py#L304

Added line #L304 was not covered by tests

def populate_line_item_daily_summary_table_trino(
self, start_date, end_date, report_period_id, cluster_id, cluster_alias, source
):
Expand Down
4 changes: 2 additions & 2 deletions koku/masu/database/report_db_accessor_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ def schema_exists_trino(self):
check_sql = f"SHOW SCHEMAS LIKE '{self.schema}'"
return bool(self._execute_trino_raw_sql_query(check_sql, log_ref="schema_exists_trino"))

def delete_hive_partition_by_month(self, table, source, year, month):
def delete_hive_partition_by_month(self, table, source, year, month, source_column="ocp_source"):
"""Deletes partitions individually by month."""
retries = settings.HIVE_PARTITION_DELETE_RETRIES
if self.schema_exists_trino() and self.table_exists_trino(table):
Expand All @@ -238,7 +238,7 @@ def delete_hive_partition_by_month(self, table, source, year, month):
try:
sql = f"""
DELETE FROM hive.{self.schema}.{table}
WHERE ocp_source = '{source}'
WHERE {source_column} = '{source}'
AND year = '{year}'
AND (month = replace(ltrim(replace('{month}', '0', ' ')),' ', '0') OR month = '{month}')
"""
Expand Down
36 changes: 36 additions & 0 deletions koku/masu/processor/_tasks/remove_expired.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from api.common import log_json
from masu.processor.expired_data_remover import ExpiredDataRemover
from masu.processor.expired_data_remover import ExpiredDataRemoverError

LOG = logging.getLogger(__name__)

Expand Down Expand Up @@ -34,3 +35,38 @@
if removed_data:
status_msg = "Expired Data" if simulate else "Removed Data"
LOG.info(log_json(msg=status_msg, removed_data=removed_data, context=context))
# We could extend the logic below here, or keep it as a separate celery task


def _remove_expired_trino_partitions(schema_name, provider_type, simulate, provider_uuid=None):
"""
Task to remove expired data.

Args:
schema_name (String) db schema name
provider (String) provider type
simulate (Boolean) Simulate report data removal

Returns:
None

"""
log_statement = (

Check warning on line 54 in koku/masu/processor/_tasks/remove_expired.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/_tasks/remove_expired.py#L54

Added line #L54 was not covered by tests
f"Remove expired data:\n"
f" schema_name: {schema_name}\n"
f" provider_type: {provider_type}\n"
f" simulate: {simulate}\n"
)
LOG.info(log_statement)

Check warning on line 60 in koku/masu/processor/_tasks/remove_expired.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/_tasks/remove_expired.py#L60

Added line #L60 was not covered by tests

try:
remover = ExpiredDataRemover(schema_name, provider_type)
except ExpiredDataRemoverError:
return

Check warning on line 65 in koku/masu/processor/_tasks/remove_expired.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/_tasks/remove_expired.py#L62-L65

Added lines #L62 - L65 were not covered by tests

removed_trino_partitions = remover.remove_expired_trino_partitions(simulate=simulate, provider_uuid=provider_uuid)

Check warning on line 67 in koku/masu/processor/_tasks/remove_expired.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/_tasks/remove_expired.py#L67

Added line #L67 was not covered by tests
if removed_trino_partitions:
# TODO: Fix this log message
status_msg = "Expired Partitions" if simulate else "Removed Partitions"
result_msg = f"{status_msg}:\n {str(removed_trino_partitions)}"
LOG.info(result_msg)

Check warning on line 72 in koku/masu/processor/_tasks/remove_expired.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/_tasks/remove_expired.py#L70-L72

Added lines #L70 - L72 were not covered by tests
15 changes: 14 additions & 1 deletion koku/masu/processor/expired_data_remover.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,5 +157,18 @@
msg="Removed CostUsageReportManifest", provider=self._provider, expiration_date=expiration_date
)
)

return removed_data

def remove_expired_trino_partitions(self, simulate=False, provider_uuid=None):
"""
Removes expired trino partitions based on the retention policy.
"""
if self._provider != Provider.PROVIDER_OCP:
LOG.info(f"{Provider.PROVIDER_OCP} is the only supported type for removing trino partitions.")
return
removed_partitions = []
expiration_date = self._calculate_expiration_date()
removed_partitions = self._cleaner.purge_expired_trino_partitions(

Check warning on line 171 in koku/masu/processor/expired_data_remover.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/expired_data_remover.py#L167-L171

Added lines #L167 - L171 were not covered by tests
expired_date=expiration_date, simulate=simulate, provider_uuid=provider_uuid
)
return removed_partitions

Check warning on line 174 in koku/masu/processor/expired_data_remover.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/expired_data_remover.py#L174

Added line #L174 was not covered by tests
26 changes: 26 additions & 0 deletions koku/masu/processor/ocp/ocp_report_db_cleaner.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from koku.database import cascade_delete
from koku.database import execute_delete_sql
from masu.database.ocp_report_db_accessor import OCPReportDBAccessor
from reporting.models import EXPIRE_MANAGED_TABLES
from reporting.models import PartitionedTable
from reporting.provider.ocp.models import UI_SUMMARY_TABLES

Expand Down Expand Up @@ -147,3 +148,28 @@
LOG.info(log_json(msg="deleted table partitions", count=del_count, schema=self._schema))

return removed_items

def purge_expired_trino_partitions(self, expired_date, provider_uuid=None, simulate=False):
"""Removes expired trino partitions."""
LOG.debug(f"purge_expired_trino_partitions: {expired_date}, {provider_uuid}, {simulate}")

Check warning on line 154 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L154

Added line #L154 was not covered by tests
if expired_date is None and provider_uuid is None:
err = "This method must be called with expired_date or provider_uuid"
raise OCPReportDBCleanerError(err)

Check warning on line 157 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L156-L157

Added lines #L156 - L157 were not covered by tests

with OCPReportDBAccessor(self._schema) as accessor:
LOG.info(EXPIRE_MANAGED_TABLES.items())

Check warning on line 160 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L160

Added line #L160 was not covered by tests
for table, source_column in EXPIRE_MANAGED_TABLES.items():
LOG.debug(f"{table}, {source_column}")
results = accessor.find_expired_trino_partitions(table, source_column, str(expired_date.date()))

Check warning on line 163 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L162-L163

Added lines #L162 - L163 were not covered by tests
if results:
LOG.info(f"Discovered {len(results)} expired partitions")

Check warning on line 165 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L165

Added line #L165 was not covered by tests
else:
LOG.info("No expired partitions")
return

Check warning on line 168 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L167-L168

Added lines #L167 - L168 were not covered by tests
if simulate:
for partition in results:
LOG.info(f"partition_info: {partition}")

Check warning on line 171 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L171

Added line #L171 was not covered by tests
else:
for result in results:
year, month, source_value = result
accessor.delete_hive_partition_by_month(table, source_value, year, month, source_column)

Check warning on line 175 in koku/masu/processor/ocp/ocp_report_db_cleaner.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/ocp/ocp_report_db_cleaner.py#L174-L175

Added lines #L174 - L175 were not covered by tests
29 changes: 29 additions & 0 deletions koku/masu/processor/orchestrator.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from masu.processor.tasks import record_all_manifest_files
from masu.processor.tasks import record_report_status
from masu.processor.tasks import remove_expired_data
from masu.processor.tasks import remove_expired_trino_partitions
from masu.processor.tasks import summarize_reports
from masu.processor.worker_cache import WorkerCache
from masu.util.aws.common import update_account_aliases
Expand Down Expand Up @@ -542,3 +543,31 @@
)
async_results.append({"customer": account.get("customer_name"), "async_id": str(async_result)})
return async_results

def remove_expired_trino_partitions(self, simulate=False):
"""
Removes expired trino partitions for each account.
"""
async_results = []
schemas = set(

Check warning on line 552 in koku/masu/processor/orchestrator.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/orchestrator.py#L551-L552

Added lines #L551 - L552 were not covered by tests
Provider.objects.filter(type=Provider.PROVIDER_OCP)
.values_list("customer__schema_name", flat=True)
.distinct()
)
# <QuerySet ['org1234567', 'org1234567', 'org1234567', 'org1234567']>
# distinct is not removing duplicates from this list, so using a set to reduce instead

for schema in schemas:
LOG.info("Calling remove_expired_trino_partitions with account: %s", schema)
async_result = remove_expired_trino_partitions.delay(

Check warning on line 562 in koku/masu/processor/orchestrator.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/orchestrator.py#L561-L562

Added lines #L561 - L562 were not covered by tests
schema_name=schema,
provider_type=Provider.PROVIDER_OCP,
simulate=simulate,
)

LOG.info(

Check warning on line 568 in koku/masu/processor/orchestrator.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/orchestrator.py#L568

Added line #L568 was not covered by tests
"Expired partition removal queued - schema_name: %s, Task ID: %s",
schema,
str(async_result),
)
return async_results

Check warning on line 573 in koku/masu/processor/orchestrator.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/orchestrator.py#L573

Added line #L573 was not covered by tests
26 changes: 26 additions & 0 deletions koku/masu/processor/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
from masu.processor._tasks.download import _get_report_files
from masu.processor._tasks.process import _process_report_file
from masu.processor._tasks.remove_expired import _remove_expired_data
from masu.processor._tasks.remove_expired import _remove_expired_trino_partitions
from masu.processor.cost_model_cost_updater import CostModelCostUpdater
from masu.processor.ocp.ocp_cloud_parquet_summary_updater import DELETE_TABLE
from masu.processor.ocp.ocp_cloud_parquet_summary_updater import TRUNCATE_TABLE
Expand Down Expand Up @@ -310,6 +311,31 @@
_remove_expired_data(schema_name, provider, simulate, provider_uuid)


@celery_app.task(name="masu.processor.tasks.remove_expired_trino_partitions", queue=DEFAULT)
def remove_expired_trino_partitions(schema_name, provider_type, simulate, provider_uuid=None, queue_name=None):
"""
Remove expired report data.

Args:
schema_name (String) db schema name
provider (String) provider type
simulate (Boolean) Simulate report data removal

Returns:
None

"""

context = {

Check warning on line 329 in koku/masu/processor/tasks.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/tasks.py#L329

Added line #L329 was not covered by tests
"schema": schema_name,
"provider_type": provider_type,
"provider_uuid": provider_uuid,
}
LOG.info(log_json("remove_expired_data", msg="removing expired partitions", context=context))
_remove_expired_trino_partitions(schema_name, provider_type, simulate, provider_uuid)

Check warning on line 335 in koku/masu/processor/tasks.py

View check run for this annotation

Codecov / codecov/patch

koku/masu/processor/tasks.py#L334-L335

Added lines #L334 - L335 were not covered by tests



@celery_app.task(name="masu.processor.tasks.summarize_reports", queue=SummaryQueue.DEFAULT) # noqa: C901
def summarize_reports( # noqa: C901
reports_to_summarize, queue_name=None, manifest_list=None, ingress_report_uuid=None
Expand Down
28 changes: 28 additions & 0 deletions koku/reporting/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@
OCPAzureDatabaseSummaryP,
)

# These are cleaned during source delete
TRINO_MANAGED_TABLES = {
"reporting_ocpusagelineitem_daily_summary": "source",
"reporting_ocpawscostlineitem_project_daily_summary": "ocp_source",
Expand All @@ -176,3 +177,30 @@
"gcp_openshift_daily_resource_matched_temp": "ocp_source",
"gcp_openshift_daily_tag_matched_temp": "ocp_source",
}

# These are cleaned during expired_data flow
EXPIRE_MANAGED_TABLES = {
"reporting_ocpusagelineitem_daily_summary": "source",
"reporting_ocpawscostlineitem_project_daily_summary": "ocp_source",
"reporting_ocpgcpcostlineitem_project_daily_summary": "ocp_source",
"reporting_ocpazurecostlineitem_project_daily_summary": "ocp_source",
}

# TEMP tables are cleaned during day to day processing
OCP_ON_AWS_TEMP_MANAGED_TABLES = {
"reporting_ocpawscostlineitem_project_daily_summary_temp",
"aws_openshift_daily_resource_matched_temp",
"aws_openshift_daily_tag_matched_temp",
}

OCP_ON_AZURE_TEMP_MANAGED_TABLES = {
"reporting_ocpazurecostlineitem_project_daily_summary_temp",
"azure_openshift_daily_resource_matched_temp",
"azure_openshift_daily_tag_matched_temp",
}

OCP_ON_GCP_TEMP_MANAGED_TABLES = {
"reporting_ocpgcpcostlineitem_project_daily_summary_temp",
"gcp_openshift_daily_resource_matched_temp",
"gcp_openshift_daily_tag_matched_temp",
}
Loading