in src/common/py_libs/bq_materializer.py [0:0]
def validate_partition_details(partition_details):
partition_column = partition_details.get("column")
if not partition_column:
raise ValueError(
"Partition 'column' property missing from 'partition_details' "
"property.")
partition_type = partition_details.get("partition_type")
if not partition_type:
raise ValueError(
"'partition_type' property missing from 'partition_details' "
"property.")
if partition_type not in _PARTITION_TYPES:
raise ValueError("'partition_type' has to be one of the following: "
f"{_PARTITION_TYPES}.\n"
f"Specified 'partition_type' is '{partition_type}'.")
if partition_type == "time":
time_partition_grain = partition_details.get("time_grain")
if not time_partition_grain:
raise ValueError(
"'time_grain' property missing for 'time' based partition.")
if time_partition_grain not in _TIME_PARTITION_GRAIN_LIST:
raise ValueError(
"'time_grain' property has to be one of the following:"
f"{_TIME_PARTITION_GRAIN_LIST}.\n"
f"Specified 'time_grain' is '{time_partition_grain}'.")
if partition_type == "integer_range":
integer_range_bucket = partition_details.get("integer_range_bucket")
if not integer_range_bucket:
raise ValueError(
"'integer_range_bucket' property missing for 'integer_range' "
"based partition.")
bucket_start = integer_range_bucket.get("start")
bucket_end = integer_range_bucket.get("end")
bucket_interval = integer_range_bucket.get("interval")
if (bucket_start is None or bucket_end is None or
bucket_interval is None):
raise ValueError(
"Error: 'start', 'end' or 'interval' property missing for the "
"'integer_range_bucket' property.")