in generator/views/lookml_utils.py [0:0]
def _generate_dimensions_from_query(query: str, dryrun) -> List[Dict[str, Any]]:
"""Generate dimensions and dimension groups from a SQL query."""
schema = dryrun.create(sql=query).get_schema()
dimensions = {}
for dimension in _generate_dimensions_helper(schema or []):
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} in query")
dimensions[name_key] = dimension
return list(dimensions.values())