in generator/views/glean_ping_view.py [0:0]
def to_lookml(self, v1_name: Optional[str], dryrun) -> Dict[str, Any]:
"""Generate LookML for this view.
The Glean views include a labeled metrics, which need to be joined
against the view in the explore.
"""
lookml = super().to_lookml(v1_name, dryrun=dryrun)
# ignore nested join views
lookml["views"] = [lookml["views"][0]]
# iterate over all of the glean metrics and generate views for unnested
# fields as necessary. Append them to the list of existing view
# definitions.
table = next(
(table for table in self.tables if table.get("channel") == "release"),
self.tables[0],
)["table"]
dimensions = self.get_dimensions(table, v1_name, dryrun=dryrun)
dimension_names = {dimension["name"] for dimension in dimensions}
client_id_field = self.get_client_id(dimensions, table)
view_definitions = []
metrics = self._get_glean_metrics(v1_name)
for metric in metrics:
looker_name = self._to_looker_name(metric)
if looker_name not in dimension_names:
continue # skip metrics with no matching dimension
if metric.type == "labeled_counter":
view_name = f"{self.name}__{looker_name}"
suggest_name = f"suggest__{view_name}"
category, name = [
slug_to_title(v) for v in self._get_category_and_name(metric)
]
view_label = f"{category} - {name}"
metric_hidden = "no" if metric.is_in_source() else "yes"
measures = [
{
"name": "count",
"type": "sum",
"sql": "${value}",
"hidden": metric_hidden,
}
]
if client_id_field is not None:
# client_id field is missing for pings with minimal Glean schema
measures.append(
{
"name": "client_count",
"type": "count_distinct",
"sql": f"case when ${{value}} > 0 then ${{{self.name}.{client_id_field}}} end",
"hidden": metric_hidden,
}
)
join_view: Dict[str, Any] = {
"name": view_name,
"label": view_label,
"dimensions": [
{
"name": "document_id",
"type": "string",
"sql": f"${{{self.name}.document_id}}",
"hidden": "yes",
},
# labeled counters need a primary key that incorporates
# their labels, otherwise we get jumbled results:
# https://github.com/mozilla/lookml-generator/issues/171
{
"name": "document_label_id",
"type": "string",
"sql": f"${{{self.name}.document_id}}-${{label}}",
"primary_key": "yes",
"hidden": "yes",
},
{
"name": "value",
"type": "number",
"sql": "${TABLE}.value",
"hidden": "yes",
},
],
"measures": measures,
}
if looker_name in SUGGESTS_FOR_LABELED_COUNTERS:
join_view["dimensions"].append(
{
"name": "label",
"type": "string",
"sql": "${TABLE}.key",
"suggest_explore": suggest_name,
"suggest_dimension": f"{suggest_name}.key",
"hidden": metric_hidden,
},
)
suggest_view = {
"name": suggest_name,
"derived_table": {
"sql": dedent(
f"""
select
m.key,
count(*) as n
from {table} as t,
unnest(metrics.{metric.type}.{metric.id.replace(".", "_")}) as m
where date(submission_timestamp) > date_sub(current_date, interval 30 day)
and sample_id = 0
group by key
order by n desc
"""
)
},
"dimensions": [
{"name": "key", "type": "string", "sql": "${TABLE}.key"}
],
}
view_definitions += [join_view, suggest_view]
else:
join_view["dimensions"].append(
{
"name": "label",
"type": "string",
"sql": "${TABLE}.key",
"hidden": metric_hidden,
},
)
view_definitions += [join_view]
# deduplicate view definitions, because somehow a few entries make it in
# twice e.g. metrics__metrics__labeled_counter__media_audio_init_failure
view_definitions = sorted(
{v["name"]: v for v in view_definitions}.values(), key=lambda x: x["name"] # type: ignore
)
[project, dataset, table] = table.split(".")
table_schema = dryrun.create(
project=project,
dataset=dataset,
table=table,
).get_table_schema()
nested_views = lookml_utils._generate_nested_dimension_views(
table_schema, self.name
)
lookml["views"] += view_definitions + nested_views
return lookml