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
table_input: str, default_project_id: str, var_name: Optional[str] = None
) -> Tuple[str, str, str]:
    if '.' not in table_input:
        raise ValueError(
            'Expected target table name in the format of ' '<dataset>.<table>. Got: {}'.format(table_input)
        )
    if not default_project_id:
        raise ValueError("INTERNAL: No default project is specified")
    def var_print(var_name):
        if var_name is None:
            return ""
        else:
            return "Format exception for {var}: ".format(var=var_name)
    if table_input.count('.') + table_input.count(':') > 3:
        raise Exception(
            '{var}Use either : or . to specify project '
            'got {input}'.format(var=var_print(var_name), input=table_input)
        )
    cmpt = table_input.rsplit(':', 1)
    project_id = None
    rest = table_input
    if len(cmpt) == 1:
        project_id = None
        rest = cmpt[0]
    elif len(cmpt) == 2 and cmpt[0].count(':') <= 1:
        if cmpt[-1].count('.') != 2:
            project_id = cmpt[0]
            rest = cmpt[1]
    else: