BigQuery supports clustering for both partitioned and non-partitioned tables.

Reference: [https://cloud.google.com/bigquery/docs/clustered-tables](https://cloud.google.com/bigquery/docs/clustered-tables)
airflow/providers/google/cloud/hooks/bigquery.py
destination_dataset_table: Optional[str], time_partitioning_in: Optional[Dict]
) -> Dict:  # 
    if time_partitioning_in is None:
        time_partitioning_in = {}
    time_partitioning_out = {}
    if destination_dataset_table and '$' in destination_dataset_table:
        time_partitioning_out['type'] = 'DAY'
    time_partitioning_out.update(time_partitioning_in)
    return time_partitioning_out
def _validate_value(key: Any, value: Any, expected_type: Type) -> None:
    """Function to check expected type and raise error if type is not correct"""
    if not isinstance(value, expected_type):
        raise TypeError("{} argument must have a type {} not {}".format(key, expected_type, type(value)))
def _api_resource_configs_duplication_check(
    key: Any, value: Any, config_dict: dict, config_dict_name='api_resource_configs'
) -> None:
    if key in config_dict and value != config_dict[key]:
        raise ValueError(
            "Values of {param_name} param are duplicated. "
            "{dict_name} contained {param_name} param "
            "in `query` config and {param_name} was also provided "
            "with arg to run_query() method. Please remove duplicates.".format(
                param_name=key, dict_name=config_dict_name
            )
        )
def _validate_src_fmt_configs(