in generator/views/lookml_utils.py [0:0]
def _generate_dimensions(table: str, dryrun) -> List[Dict[str, Any]]:
"""Generate dimensions and dimension groups from a bigquery table.
When schema contains both submission_timestamp and submission_date, only produce
a dimension group for submission_timestamp.
Raise ClickException if schema results in duplicate dimensions.
"""
dimensions = {}
[project, dataset, table] = table.split(".")
table_schema = dryrun.create(
project=project,
dataset=dataset,
table=table,
).get_table_schema()
for dimension in _generate_dimensions_helper(table_schema):
name_key = dimension["name"]
# This prevents `time` dimension groups from overwriting other dimensions below
if dimension.get("type") == "time":
name_key += "_time"
# overwrite duplicate "submission", "end", "start" dimension group, thus picking the
# last value sorted by field name, which is submission_timestamp
# See also https://github.com/mozilla/lookml-generator/issues/471
if name_key in dimensions and not (
dimension.get("type") == "time"
and (
dimension["name"] == "submission"
or dimension["name"].endswith("end")
or dimension["name"].endswith("start")
)
):
raise click.ClickException(
f"duplicate dimension {name_key!r} for table {table!r}"
)
dimensions[name_key] = dimension
return list(dimensions.values())