Skip to content

Conversation

kik-kik
Copy link
Contributor

@kik-kik kik-kik commented Aug 19, 2025

feat(DENG-9250): update firefox app store territory report to include new connector data

@kik-kik kik-kik self-assigned this Aug 19, 2025
@kik-kik kik-kik force-pushed the feat/DENG-9250/update-firefox-app-store-territory-report-to-include-new-connector-data branch 2 times, most recently from 75fd8cf to 6e89135 Compare August 19, 2025 16:01
@kik-kik kik-kik requested a review from SuYoungHong August 19, 2025 16:01
@dataops-ci-bot

This comment has been minimized.

@kik-kik kik-kik marked this pull request as ready for review August 19, 2025 17:28
@dataops-ci-bot

This comment has been minimized.

Copy link

@SuYoungHong SuYoungHong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, I think I see what's happening between :

  • sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/view.sql
  • sql/moz-fx-data-shared-prod/firefox_ios_derived/app_store_funnel_v1/query.sql

So before, firefox_app_store_territory_source_type_report used to only report impressions, but firefox_downloads_territory_source_type_report would separately include downloads.

Now, the new format is, both download and impression metrics are reported in firefox_app_store_territory_source_type_report.

We used to combine them separately under a query in app_store_funnel_v1, but things have changed.

I think it's good to be thoughtful how we encode the logic for easy interpretation in the future. I think there's two, equally good options:

  1. update the firefox_app_store_territory_source_type_report view logic to include pulling download numbers from firefox_downloads_territory_source_type_report before the cutoff date, and then keep app_store_funnel_v1 logic simple (just pull directly from the view, no before/after logic)
  2. keep the before/after logic in the app_store_funnel_v1, but version the firefox_app_store_territory_source_type_report views, so they're separate tables pre-cutoff and post cutoff.

I just don't want to logic to be split across multiple places.

Let me know what you think.

page_views,
page_views_unique_device,
-- These fields did not exist in the previous version.
CAST(NULL AS INTEGER) AS first_time_downloads,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @kik-kik , so these metrics exist in the last format, they just were split out in a different table:

  • moz-fx-data-shared-prod.app_store.firefox_downloads_territory_source_type_report

Let's source it from here, instead of casting as null so we don't lose data

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't review the data in moz-fx-data-bq-fivetran.firefox_app_store_v2_apple_store.apple_store__territory_report because I don't have access. But is that data available and complete pre-"2024-01-01"?

Copy link
Contributor Author

@kik-kik kik-kik Aug 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @SuYoungHong, firefox_app_store_v2_apple_store only contains data as far back as 2024-01-01.

Regarding this:

Let's source it from here, instead of casting as null so we don't lose data

We are not losing any data here with the casting, these fields simply do not exist in the source referenced here.

But also seeing that this only gets referenced inside the app_store_funnel_v1 query I'd probably just delete this view entirely keep the view unmodified.

@@ -1,75 +1,128 @@
-- TODO: should we run this job with 7 day delay to make sure all data landed (a wider window to be on the safe side).
WITH views_data AS (
WITH historical_store_data AS (

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey, I'm not sure why the historical data subquery is required here... because the split logic for how we define things (pull downloads and impressions separately from separate tables under old format, and from one table from new format) should be encoded in the firefox_app_store_territory_source_type_report view above, no?

It's a bit confusing seeing that logic twice, maybe better to just keep that logic in one place?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we require the historical in case we want to run the query for past data prior to 2024-01-01. historical_store_data basically should contain the old logic which required us to combine two different data sources to get impression and downloads information. The new connector based dataset already has all of this data in a single dataset so we do not need to do any additional joins.

WHERE
DATE(`date`) = DATE_SUB(@submission_date, INTERVAL 7 DAY)
AND source_type <> 'Institutional Purchase'
AND app_id = 989804926 -- Filter to only include the Firefox app

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thikn we only filter for institutional purchase in the downloads section in the old query... I'm totally okay with changing it (might prefer it in fact), but I'd like to check if it affects the numbers at all (I'll need access to moz-fx-data-shared-prod.app_store.firefox_downloads_territory_source_type_report to check though).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ditto for the app_id filter (I'm assuming it won't affect numbers and is good defensive coding, but want to validate directly)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could create a temp table for you which include app_id dimension

@dataops-ci-bot

This comment has been minimized.

Copy link

@SuYoungHong SuYoungHong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, this looks good to me.

Just 2 things I'd like noted (for documentation purposes)

  1. we're explicitly filtering by app_id = 989804926, which we weren't before
  2. we're explicitly filtering out source_type <> 'Institutional Purchase' for both views and installs (previously we only filtered for installs).

Both of these changes are probably appropriate, but good to note it will be different from the past

Also, we're defining new profiles via moz-fx-data-shared-prod.firefox_ios.new_profiles.

Before we were moz-fx-data-shared-prod.firefox_ios.firefox_ios_clients.

Just want to confirm that firefox_ios.new_profiles is the preferred / recommended method for counting new profiles instead of firefox_ios.firefox_ios_clients. Would the numbers change due to this, or would they be reporting essentially the same thing?

Other then that, looks good. I know we discussed getting access to the moz-fx-data-bq-fivetran.firefox_app_store_v2_apple_store.apple_store__territory_report to do some validation, which I think we should still do, but I don't think that should block approval.

Thank you!

Copy link

@SuYoungHong SuYoungHong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

requesting one addition due to an issue i discovered in the data.

SELECT
DATE(`date`) AS `date`,
territory AS country_name,
SUM(impressions_unique_device) AS impressions,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi,

So I reviewed this, and this looks good to me.

However, I found a data issue in the new data that Apple is sending back, that I think we should address within this query / PR.

So in the v1 of the data Apple was sending back, visits from source_type:

  • App Referrer
  • Unavailable
  • Web Referrer

Were generating an impression as well as a pageview.

In the new data Apple is sending back (v2), it seems to only generate a pageview. I think this probably makes sense, and is an improvement on their part.

Can we add the following logic to the query?

SUM(case when source_type in ('App Referrer', 'Unavailable', 'Web Referrer') THEN 0 ELSE impressions_unique_device END) 
-- add comment: apple used to count pageviews from these sources as impressions as well but no longer do in the new data they're sending back

This way, the logic for what is in impression is consistent for data from v1 data and v2 data in this aggregation.

Thanks!

Other then that, I think we're good to go with this query.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added the impression logic to the query to the historical data.

@kik-kik kik-kik force-pushed the feat/DENG-9250/update-firefox-app-store-territory-report-to-include-new-connector-data branch from 2ba973c to fd99637 Compare September 10, 2025 11:13
@dataops-ci-bot

This comment has been minimized.

…rsion of the data to match the new report data
@dataops-ci-bot
Copy link

Integration report for "feat: limit which source types count toward impressions in the old version of the data to match the new report data"

sql.diff

Click to expand!
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/dags/bqetl_firefox_ios.py /tmp/workspace/generated-sql/dags/bqetl_firefox_ios.py
--- /tmp/workspace/main-generated-sql/dags/bqetl_firefox_ios.py	2025-09-10 12:30:26.000000000 +0000
+++ /tmp/workspace/generated-sql/dags/bqetl_firefox_ios.py	2025-09-10 12:57:18.000000000 +0000
@@ -90,6 +90,19 @@
     catchup=False,
 ) as dag:
 
+    wait_for_bigeye__firefox_ios_derived__new_profiles__v1 = ExternalTaskSensor(
+        task_id="wait_for_bigeye__firefox_ios_derived__new_profiles__v1",
+        external_dag_id="bqetl_mobile_kpi_metrics",
+        external_task_id="firefox_ios.bigeye__firefox_ios_derived__new_profiles__v1",
+        execution_delta=datetime.timedelta(days=-1, seconds=57600),
+        check_existence=True,
+        mode="reschedule",
+        poke_interval=datetime.timedelta(minutes=5),
+        allowed_states=ALLOWED_STATES,
+        failed_states=FAILED_STATES,
+        pool="DATA_ENG_EXTERNALTASKSENSOR",
+    )
+
     wait_for_copy_deduplicate_all = ExternalTaskSensor(
         task_id="wait_for_copy_deduplicate_all",
         external_dag_id="copy_deduplicate",
@@ -194,17 +207,15 @@
         pool="DATA_ENG_EXTERNALTASKSENSOR",
     )
 
-    checks__fail_firefox_ios_derived__app_store_funnel__v1 = bigquery_dq_check(
-        task_id="checks__fail_firefox_ios_derived__app_store_funnel__v1",
-        source_table="app_store_funnel_v1",
-        dataset_id="firefox_ios_derived",
-        project_id="moz-fx-data-shared-prod",
-        is_dq_check_fail=True,
+    bigeye__firefox_ios_derived__app_store_funnel__v1 = bigquery_bigeye_check(
+        task_id="bigeye__firefox_ios_derived__app_store_funnel__v1",
+        table_id="moz-fx-data-shared-prod.firefox_ios_derived.app_store_funnel_v1",
+        warehouse_id="1939",
         owner="[email protected]",
         email=["[email protected]", "[email protected]", "[email protected]"],
         depends_on_past=False,
-        parameters=["submission_date:DATE:{{ds}}"],
-        retries=0,
+        execution_timeout=datetime.timedelta(hours=1),
+        retries=1,
     )
 
     checks__fail_firefox_ios_derived__baseline_clients_yearly__v1 = bigquery_dq_check(
@@ -327,19 +338,6 @@
         retries=0,
     )
 
-    checks__warn_firefox_ios_derived__app_store_funnel__v1 = bigquery_dq_check(
-        task_id="checks__warn_firefox_ios_derived__app_store_funnel__v1",
-        source_table="app_store_funnel_v1",
-        dataset_id="firefox_ios_derived",
-        project_id="moz-fx-data-shared-prod",
-        is_dq_check_fail=False,
-        owner="[email protected]",
-        email=["[email protected]", "[email protected]", "[email protected]"],
-        depends_on_past=False,
-        parameters=["submission_date:DATE:{{ds}}"],
-        retries=0,
-    )
-
     checks__warn_firefox_ios_derived__firefox_ios_clients__v1 = bigquery_dq_check(
         task_id="checks__warn_firefox_ios_derived__firefox_ios_clients__v1",
         source_table="firefox_ios_clients_v1",
@@ -540,18 +538,10 @@
         depends_on_past=True,
     )
 
-    checks__fail_firefox_ios_derived__app_store_funnel__v1.set_upstream(
-        checks__fail_firefox_ios_derived__firefox_ios_clients__v1
-    )
-
-    checks__fail_firefox_ios_derived__app_store_funnel__v1.set_upstream(
+    bigeye__firefox_ios_derived__app_store_funnel__v1.set_upstream(
         firefox_ios_derived__app_store_funnel__v1
     )
 
-    checks__fail_firefox_ios_derived__app_store_funnel__v1.set_upstream(
-        firefox_ios_derived__clients_activation__v1
-    )
-
     checks__fail_firefox_ios_derived__baseline_clients_yearly__v1.set_upstream(
         firefox_ios_derived__baseline_clients_yearly__v1
     )
@@ -568,18 +558,6 @@
         firefox_ios_derived__new_profile_activation__v2
     )
 
-    checks__warn_firefox_ios_derived__app_store_funnel__v1.set_upstream(
-        checks__fail_firefox_ios_derived__firefox_ios_clients__v1
-    )
-
-    checks__warn_firefox_ios_derived__app_store_funnel__v1.set_upstream(
-        firefox_ios_derived__app_store_funnel__v1
-    )
-
-    checks__warn_firefox_ios_derived__app_store_funnel__v1.set_upstream(
-        firefox_ios_derived__clients_activation__v1
-    )
-
     checks__warn_firefox_ios_derived__firefox_ios_clients__v1.set_upstream(
         firefox_ios_derived__firefox_ios_clients__v1
     )
@@ -589,11 +567,7 @@
     )
 
     firefox_ios_derived__app_store_funnel__v1.set_upstream(
-        checks__fail_firefox_ios_derived__firefox_ios_clients__v1
-    )
-
-    firefox_ios_derived__app_store_funnel__v1.set_upstream(
-        firefox_ios_derived__clients_activation__v1
+        wait_for_bigeye__firefox_ios_derived__new_profiles__v1
     )
 
     firefox_ios_derived__attributable_clients__v1.set_upstream(
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/dags/bqetl_mobile_kpi_metrics.py /tmp/workspace/generated-sql/dags/bqetl_mobile_kpi_metrics.py
--- /tmp/workspace/main-generated-sql/dags/bqetl_mobile_kpi_metrics.py	2025-09-10 12:30:30.000000000 +0000
+++ /tmp/workspace/generated-sql/dags/bqetl_mobile_kpi_metrics.py	2025-09-10 12:57:27.000000000 +0000
@@ -742,6 +742,21 @@
         task_group=task_group_firefox_ios,
     )
 
+    with TaskGroup(
+        "bigeye__firefox_ios_derived__new_profiles__v1_external",
+        parent_group=task_group_firefox_ios,
+    ) as bigeye__firefox_ios_derived__new_profiles__v1_external:
+        ExternalTaskMarker(
+            task_id="bqetl_firefox_ios__wait_for_bigeye__firefox_ios_derived__new_profiles__v1",
+            external_dag_id="bqetl_firefox_ios",
+            external_task_id="wait_for_bigeye__firefox_ios_derived__new_profiles__v1",
+            execution_date="{{ (execution_date - macros.timedelta(seconds=28800)).isoformat() }}",
+        )
+
+        bigeye__firefox_ios_derived__new_profiles__v1_external.set_upstream(
+            bigeye__firefox_ios_derived__new_profiles__v1
+        )
+
     bigeye__firefox_ios_derived__retention__v1 = bigquery_bigeye_check(
         task_id="bigeye__firefox_ios_derived__retention__v1",
         table_id="moz-fx-data-shared-prod.firefox_ios_derived.retention_v1",
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop_background_update: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_ios_derived/app_store_funnel_v1: bigconfig.yml
Only in /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_ios_derived/app_store_funnel_v1: checks.sql
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/focus_android: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/klar_android: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_fenix/metrics: schema.yaml
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_fenix: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_fenix_nightly: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_fennec_aurora: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_firefox: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_firefox_beta: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_focus: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_focus_beta: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_focus_nightly: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/org_mozilla_klar: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/pine: traces
Only in /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/thunderbird_desktop: traces
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/accounts_backend_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/accounts_backend_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/accounts_backend_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/accounts_backend_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:41.000000000 +0000
@@ -60,7 +60,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/accounts_cirrus_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/accounts_cirrus_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/accounts_cirrus_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/accounts_cirrus_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:41.000000000 +0000
@@ -60,7 +60,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/accounts_frontend_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/accounts_frontend_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/accounts_frontend_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/accounts_frontend_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:41.000000000 +0000
@@ -60,7 +60,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/schema.yaml	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/schema.yaml	2025-09-10 12:36:20.000000000 +0000
@@ -29,6 +29,3 @@
 - name: page_views_unique_device
   type: INTEGER
   mode: NULLABLE
-- name: date_pst
-  type: TIMESTAMP
-  mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/app_store/firefox_app_store_territory_source_type_report/view.sql	2025-09-10 12:21:30.000000000 +0000
@@ -5,7 +5,9 @@
   -- https://developer.apple.com/help/app-store-connect/view-sales-and-trends/download-and-view-reports
   -- "Time zone: Reports are based on Pacific Time (PT). A day includes transactions that happened from 12:00 a.m. to 11:59 p.m. PT."
   -- Date conversion in the query is required to unify the dates to UTC timezone which is what we use.
-  * REPLACE (TIMESTAMP(DATETIME(`date`, "America/Los_Angeles")) AS `date`),
-  `date` AS date_pst,
+  -- However, the `date` timestamp field appear to always show midnight meaning if we do timezone conversion
+  -- we will end up moving all results 1 day back if we attempt conversion to UTC.
+  -- This is why we are not doing timezone converstions here.
+  *,
 FROM
   `moz-fx-data-shared-prod.app_store_syndicate.app_store_territory_source_type_report`
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/bedrock_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/bedrock_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/bedrock_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/bedrock_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:42.000000000 +0000
@@ -126,7 +126,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/burnham_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/burnham_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/burnham_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/burnham_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:42.000000000 +0000
@@ -60,7 +60,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates/schema.yaml	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates/schema.yaml	2025-09-10 12:37:05.000000000 +0000
@@ -1,49 +1,49 @@
 fields:
-- mode: NULLABLE
-  name: submission_date
+- name: submission_date
   type: DATE
-- mode: NULLABLE
-  name: source
+  mode: NULLABLE
+- name: source
   type: STRING
-- mode: NULLABLE
-  name: event_type
+  mode: NULLABLE
+- name: event_type
   type: STRING
-- mode: NULLABLE
-  name: form_factor
+  mode: NULLABLE
+- name: form_factor
   type: STRING
-- mode: NULLABLE
-  name: country
+  mode: NULLABLE
+- name: country
   type: STRING
-- mode: NULLABLE
-  name: subdivision1
+  mode: NULLABLE
+- name: subdivision1
   type: STRING
-- mode: NULLABLE
-  name: advertiser
+  mode: NULLABLE
+- name: advertiser
   type: STRING
-- mode: NULLABLE
-  name: release_channel
+  mode: NULLABLE
+- name: release_channel
   type: STRING
-- mode: NULLABLE
-  name: position
+  mode: NULLABLE
+- name: position
   type: INTEGER
-- mode: NULLABLE
-  name: provider
+  mode: NULLABLE
+- name: provider
   type: STRING
-- mode: NULLABLE
-  name: match_type
+  mode: NULLABLE
+- name: match_type
   type: STRING
-- mode: NULLABLE
-  name: normalized_os
+  mode: NULLABLE
+- name: normalized_os
   type: STRING
-- mode: NULLABLE
-  name: suggest_data_sharing_enabled
+  mode: NULLABLE
+- name: suggest_data_sharing_enabled
   type: BOOLEAN
-- mode: NULLABLE
-  name: event_count
+  mode: NULLABLE
+- name: event_count
   type: INTEGER
-- mode: NULLABLE
-  name: user_count
+  mode: NULLABLE
+- name: user_count
   type: INTEGER
-- mode: NULLABLE
-  name: query_type
+  mode: NULLABLE
+- name: query_type
   type: STRING
+  mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates_suggest/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates_suggest/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates_suggest/schema.yaml	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/contextual_services/event_aggregates_suggest/schema.yaml	2025-09-10 12:37:13.000000000 +0000
@@ -1,40 +1,40 @@
 fields:
-- mode: NULLABLE
-  name: submission_date
+- name: submission_date
   type: DATE
-- mode: NULLABLE
-  name: form_factor
+  mode: NULLABLE
+- name: form_factor
   type: STRING
-- mode: NULLABLE
-  name: country
+  mode: NULLABLE
+- name: country
   type: STRING
-- mode: NULLABLE
-  name: advertiser
+  mode: NULLABLE
+- name: advertiser
   type: STRING
-- mode: NULLABLE
-  name: normalized_os
+  mode: NULLABLE
+- name: normalized_os
   type: STRING
-- mode: NULLABLE
-  name: release_channel
+  mode: NULLABLE
+- name: release_channel
   type: STRING
-- mode: NULLABLE
-  name: position
+  mode: NULLABLE
+- name: position
   type: INTEGER
-- mode: NULLABLE
-  name: provider
+  mode: NULLABLE
+- name: provider
   type: STRING
-- mode: NULLABLE
-  name: match_type
+  mode: NULLABLE
+- name: match_type
   type: STRING
-- mode: NULLABLE
-  name: suggest_data_sharing_enabled
+  mode: NULLABLE
+- name: suggest_data_sharing_enabled
   type: BOOLEAN
-- mode: NULLABLE
-  name: impression_count
+  mode: NULLABLE
+- name: impression_count
   type: INTEGER
-- mode: NULLABLE
-  name: click_count
+  mode: NULLABLE
+- name: click_count
   type: INTEGER
-- mode: NULLABLE
-  name: query_type
+  mode: NULLABLE
+- name: query_type
   type: STRING
+  mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/debug_ping_view_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/debug_ping_view_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/debug_ping_view_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/debug_ping_view_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:42.000000000 +0000
@@ -60,7 +60,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/experimenter_cirrus_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/experimenter_cirrus_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/experimenter_cirrus_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/experimenter_cirrus_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:42.000000000 +0000
@@ -60,7 +60,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/broken_site_report/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/broken_site_report/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/broken_site_report/metadata.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/broken_site_report/metadata.yaml	2025-09-10 12:48:58.000000000 +0000
@@ -1,6 +1,10 @@
-friendly_name: Broken Site Report
+friendly_name: App-specific view for Glean ping "broken-site-report"
 description: |-
-  Please provide a description for the query
+  This a view that UNIONs the stable ping tables
+  across all channels of the Glean application "Firefox for Android"
+  (org_mozilla_firefox.broken_site_report, org_mozilla_firefox_beta.broken_site_report, org_mozilla_fenix.broken_site_report, org_mozilla_fenix_nightly.broken_site_report, org_mozilla_fennec_aurora.broken_site_report).
+
+  It is used by Looker.
 owners: []
 labels: {}
 bigquery: null
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/crash/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/crash/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/crash/metadata.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/crash/metadata.yaml	2025-09-10 12:48:58.000000000 +0000
@@ -1,6 +1,10 @@
-friendly_name: Crash
+friendly_name: App-specific view for Glean ping "crash"
 description: |-
-  Please provide a description for the query
+  This a view that UNIONs the stable ping tables
+  across all channels of the Glean application "Firefox for Android"
+  (org_mozilla_firefox.crash, org_mozilla_firefox_beta.crash, org_mozilla_fenix.crash, org_mozilla_fenix_nightly.crash, org_mozilla_fennec_aurora.crash).
+
+  It is used by Looker.
 owners: []
 labels: {}
 bigquery: null
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_clients/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_clients/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_clients/schema.yaml	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_clients/schema.yaml	2025-09-10 12:36:49.000000000 +0000
@@ -26,6 +26,9 @@
 - name: adjust_network
   type: STRING
   mode: NULLABLE
+- name: install_source
+  type: STRING
+  mode: NULLABLE
 - name: retained_week_2
   type: BOOLEAN
   mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_week_4/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_week_4/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_week_4/schema.yaml	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/funnel_retention_week_4/schema.yaml	2025-09-10 12:36:58.000000000 +0000
@@ -48,6 +48,9 @@
   description: 'The type of source of a client installation.
 
     '
+- name: install_source
+  type: STRING
+  mode: NULLABLE
 - name: new_profiles
   type: INTEGER
   mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/schema.yaml	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/schema.yaml	2025-09-10 12:43:45.000000000 +0000
@@ -539,6 +539,12 @@
     - name: preferences_isolated_content_processes_enabled
       type: BOOLEAN
       mode: NULLABLE
+    - name: preferences_show_non_sponsor_suggestions_enabled
+      type: BOOLEAN
+      mode: NULLABLE
+    - name: preferences_show_sponsor_suggestions_enabled
+      type: BOOLEAN
+      mode: NULLABLE
   - name: counter
     type: RECORD
     mode: NULLABLE
@@ -11431,6 +11437,16 @@
       type: RECORD
       mode: REPEATED
       fields:
+      - name: key
+        type: STRING
+        mode: NULLABLE
+      - name: value
+        type: INTEGER
+        mode: NULLABLE
+    - name: media_mkv_codec_type
+      type: RECORD
+      mode: REPEATED
+      fields:
       - name: key
         type: STRING
         mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/metrics/view.sql	2025-09-10 12:35:11.000000000 +0000
@@ -119,7 +119,9 @@
       metrics.boolean.update_settings_enabled,
       metrics.boolean.contentblocking_tp_allowlist_baseline_enabled,
       metrics.boolean.contentblocking_tp_allowlist_convenience_enabled,
-      metrics.boolean.preferences_isolated_content_processes_enabled
+      metrics.boolean.preferences_isolated_content_processes_enabled,
+      metrics.boolean.preferences_show_non_sponsor_suggestions_enabled,
+      metrics.boolean.preferences_show_sponsor_suggestions_enabled
     ) AS `boolean`,
     STRUCT(
       metrics.counter.events_total_uri_count,
@@ -1057,7 +1059,8 @@
       metrics.labeled_counter.network_retried_system_channel_update_status,
       metrics.labeled_counter.devtools_console_javascript_error_displayed,
       metrics.labeled_counter.fog_subdir_entry_err,
-      metrics.labeled_counter.fog_subdir_entry_metadata_err
+      metrics.labeled_counter.fog_subdir_entry_metadata_err,
+      metrics.labeled_counter.media_mkv_codec_type
     ) AS `labeled_counter`,
     STRUCT(
       metrics.quantity.gfx_adapter_primary_ram,
@@ -2128,7 +2131,9 @@
       metrics.boolean.update_settings_enabled,
       metrics.boolean.contentblocking_tp_allowlist_baseline_enabled,
       metrics.boolean.contentblocking_tp_allowlist_convenience_enabled,
-      metrics.boolean.preferences_isolated_content_processes_enabled
+      metrics.boolean.preferences_isolated_content_processes_enabled,
+      metrics.boolean.preferences_show_non_sponsor_suggestions_enabled,
+      metrics.boolean.preferences_show_sponsor_suggestions_enabled
     ) AS `boolean`,
     STRUCT(
       metrics.counter.events_total_uri_count,
@@ -3066,7 +3071,8 @@
       metrics.labeled_counter.network_retried_system_channel_update_status,
       metrics.labeled_counter.devtools_console_javascript_error_displayed,
       metrics.labeled_counter.fog_subdir_entry_err,
-      metrics.labeled_counter.fog_subdir_entry_metadata_err
+      metrics.labeled_counter.fog_subdir_entry_metadata_err,
+      metrics.labeled_counter.media_mkv_codec_type
     ) AS `labeled_counter`,
     STRUCT(
       metrics.quantity.gfx_adapter_primary_ram,
@@ -4157,7 +4163,9 @@
       metrics.boolean.update_settings_enabled,
       metrics.boolean.contentblocking_tp_allowlist_baseline_enabled,
       metrics.boolean.contentblocking_tp_allowlist_convenience_enabled,
-      metrics.boolean.preferences_isolated_content_processes_enabled
+      metrics.boolean.preferences_isolated_content_processes_enabled,
+      metrics.boolean.preferences_show_non_sponsor_suggestions_enabled,
+      metrics.boolean.preferences_show_sponsor_suggestions_enabled
     ) AS `boolean`,
     STRUCT(
       metrics.counter.events_total_uri_count,
@@ -5095,7 +5103,8 @@
       metrics.labeled_counter.network_retried_system_channel_update_status,
       metrics.labeled_counter.devtools_console_javascript_error_displayed,
       metrics.labeled_counter.fog_subdir_entry_err,
-      metrics.labeled_counter.fog_subdir_entry_metadata_err
+      metrics.labeled_counter.fog_subdir_entry_metadata_err,
+      metrics.labeled_counter.media_mkv_codec_type
     ) AS `labeled_counter`,
     STRUCT(
       metrics.quantity.gfx_adapter_primary_ram,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/metadata.yaml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/metadata.yaml	2025-09-10 12:48:58.000000000 +0000
@@ -0,0 +1,22 @@
+friendly_name: App-specific view for Glean ping "traces"
+description: |-
+  This a view that UNIONs the stable ping tables
+  across all channels of the Glean application "Firefox for Android"
+  (org_mozilla_firefox.traces, org_mozilla_firefox_beta.traces, org_mozilla_fenix.traces, org_mozilla_fenix_nightly.traces, org_mozilla_fennec_aurora.traces).
+
+  It is used by Looker.
+owners: []
+labels: {}
+bigquery: null
+workgroup_access:
+- role: roles/bigquery.dataViewer
+  members:
+  - workgroup:mozilla-confidential
+references:
+  view.sql:
+  - moz-fx-data-shared-prod.org_mozilla_fenix.traces
+  - moz-fx-data-shared-prod.org_mozilla_fenix_nightly.traces
+  - moz-fx-data-shared-prod.org_mozilla_fennec_aurora.traces
+  - moz-fx-data-shared-prod.org_mozilla_firefox.traces
+  - moz-fx-data-shared-prod.org_mozilla_firefox_beta.traces
+require_column_descriptions: false
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/schema.yaml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/schema.yaml	2025-09-10 12:37:20.000000000 +0000
@@ -0,0 +1,366 @@
+fields:
+- name: normalized_app_id
+  type: STRING
+  mode: NULLABLE
+  description: App ID of the channel data was received from
+- name: normalized_channel
+  type: STRING
+  mode: NULLABLE
+  description: Normalized channel name
+- name: additional_properties
+  type: STRING
+  mode: NULLABLE
+- name: client_info
+  type: RECORD
+  mode: NULLABLE
+  fields:
+  - name: android_sdk_version
+    type: STRING
+    mode: NULLABLE
+  - name: app_build
+    type: STRING
+    mode: NULLABLE
+  - name: app_channel
+    type: STRING
+    mode: NULLABLE
+  - name: app_display_version
+    type: STRING
+    mode: NULLABLE
+  - name: architecture
+    type: STRING
+    mode: NULLABLE
+  - name: attribution
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: campaign
+      type: STRING
+      mode: NULLABLE
+    - name: content
+      type: STRING
+      mode: NULLABLE
+    - name: medium
+      type: STRING
+      mode: NULLABLE
+    - name: source
+      type: STRING
+      mode: NULLABLE
+    - name: term
+      type: STRING
+      mode: NULLABLE
+    - name: ext
+      type: JSON
+      mode: NULLABLE
+  - name: build_date
+    type: STRING
+    mode: NULLABLE
+  - name: client_id
+    type: STRING
+    mode: NULLABLE
+  - name: device_manufacturer
+    type: STRING
+    mode: NULLABLE
+  - name: device_model
+    type: STRING
+    mode: NULLABLE
+  - name: distribution
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: name
+      type: STRING
+      mode: NULLABLE
+    - name: ext
+      type: JSON
+      mode: NULLABLE
+  - name: first_run_date
+    type: STRING
+    mode: NULLABLE
+  - name: locale
+    type: STRING
+    mode: NULLABLE
+  - name: os
+    type: STRING
+    mode: NULLABLE
+  - name: os_version
+    type: STRING
+    mode: NULLABLE
+  - name: session_count
+    type: INTEGER
+    mode: NULLABLE
+  - name: session_id
+    type: STRING
+    mode: NULLABLE
+  - name: telemetry_sdk_build
+    type: STRING
+    mode: NULLABLE
+  - name: windows_build_number
+    type: INTEGER
+    mode: NULLABLE
+- name: document_id
+  type: STRING
+  mode: NULLABLE
+- name: events
+  type: RECORD
+  mode: REPEATED
+  fields:
+  - name: category
+    type: STRING
+    mode: NULLABLE
+  - name: extra
+    type: RECORD
+    mode: REPEATED
+    fields:
+    - name: key
+      type: STRING
+      mode: NULLABLE
+    - name: value
+      type: STRING
+      mode: NULLABLE
+  - name: name
+    type: STRING
+    mode: NULLABLE
+  - name: timestamp
+    type: INTEGER
+    mode: NULLABLE
+- name: metadata
+  type: RECORD
+  mode: NULLABLE
+  fields:
+  - name: geo
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: city
+      type: STRING
+      mode: NULLABLE
+    - name: country
+      type: STRING
+      mode: NULLABLE
+    - name: db_version
+      type: STRING
+      mode: NULLABLE
+    - name: subdivision1
+      type: STRING
+      mode: NULLABLE
+    - name: subdivision2
+      type: STRING
+      mode: NULLABLE
+  - name: header
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: date
+      type: STRING
+      mode: NULLABLE
+    - name: dnt
+      type: STRING
+      mode: NULLABLE
+    - name: x_debug_id
+      type: STRING
+      mode: NULLABLE
+    - name: x_foxsec_ip_reputation
+      type: STRING
+      mode: NULLABLE
+    - name: x_lb_tags
+      type: STRING
+      mode: NULLABLE
+    - name: x_pingsender_version
+      type: STRING
+      mode: NULLABLE
+    - name: x_source_tags
+      type: STRING
+      mode: NULLABLE
+    - name: x_telemetry_agent
+      type: STRING
+      mode: NULLABLE
+    - name: parsed_date
+      type: TIMESTAMP
+      mode: NULLABLE
+    - name: parsed_x_source_tags
+      type: STRING
+      mode: REPEATED
+    - name: parsed_x_lb_tags
+      type: RECORD
+      mode: NULLABLE
+      fields:
+      - name: tls_version
+        type: STRING
+        mode: NULLABLE
+      - name: tls_cipher_hex
+        type: STRING
+        mode: NULLABLE
+  - name: isp
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: db_version
+      type: STRING
+      mode: NULLABLE
+    - name: name
+      type: STRING
+      mode: NULLABLE
+    - name: organization
+      type: STRING
+      mode: NULLABLE
+  - name: user_agent
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: browser
+      type: STRING
+      mode: NULLABLE
+    - name: os
+      type: STRING
+      mode: NULLABLE
+    - name: version
+      type: STRING
+      mode: NULLABLE
+- name: metrics
+  type: RECORD
+  mode: NULLABLE
+  fields:
+  - name: labeled_counter
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: glean_error_invalid_label
+      type: RECORD
+      mode: REPEATED
+      fields:
+      - name: key
+        type: STRING
+        mode: NULLABLE
+      - name: value
+        type: INTEGER
+        mode: NULLABLE
+    - name: glean_error_invalid_overflow
+      type: RECORD
+      mode: REPEATED
+      fields:
+      - name: key
+        type: STRING
+        mode: NULLABLE
+      - name: value
+        type: INTEGER
+        mode: NULLABLE
+    - name: glean_error_invalid_state
+      type: RECORD
+      mode: REPEATED
+      fields:
+      - name: key
+        type: STRING
+        mode: NULLABLE
+      - name: value
+        type: INTEGER
+        mode: NULLABLE
+    - name: glean_error_invalid_value
+      type: RECORD
+      mode: REPEATED
+      fields:
+      - name: key
+        type: STRING
+        mode: NULLABLE
+      - name: value
+        type: INTEGER
+        mode: NULLABLE
+  - name: object
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: gecko_trace_traces
+      type: JSON
+      mode: NULLABLE
+  - name: string
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: glean_client_annotation_experimentation_id
+      type: STRING
+      mode: NULLABLE
+  - name: string_list
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: glean_ping_uploader_capabilities
+      type: STRING
+      mode: REPEATED
+- name: normalized_app_name
+  type: STRING
+  mode: NULLABLE
+- name: normalized_country_code
+  type: STRING
+  mode: NULLABLE
+- name: normalized_os
+  type: STRING
+  mode: NULLABLE
+- name: normalized_os_version
+  type: STRING
+  mode: NULLABLE
+- name: ping_info
+  type: RECORD
+  mode: NULLABLE
+  fields:
+  - name: end_time
+    type: STRING
+    mode: NULLABLE
+  - name: experiments
+    type: RECORD
+    mode: REPEATED
+    fields:
+    - name: key
+      type: STRING
+      mode: NULLABLE
+    - name: value
+      type: RECORD
+      mode: NULLABLE
+      fields:
+      - name: branch
+        type: STRING
+        mode: NULLABLE
+      - name: extra
+        type: RECORD
+        mode: NULLABLE
+        fields:
+        - name: enrollment_id
+          type: STRING
+          mode: NULLABLE
+        - name: type
+          type: STRING
+          mode: NULLABLE
+  - name: ping_type
+    type: STRING
+    mode: NULLABLE
+  - name: reason
+    type: STRING
+    mode: NULLABLE
+  - name: seq
+    type: INTEGER
+    mode: NULLABLE
+  - name: start_time
+    type: STRING
+    mode: NULLABLE
+  - name: parsed_start_time
+    type: TIMESTAMP
+    mode: NULLABLE
+  - name: parsed_end_time
+    type: TIMESTAMP
+    mode: NULLABLE
+- name: sample_id
+  type: INTEGER
+  mode: NULLABLE
+- name: submission_timestamp
+  type: TIMESTAMP
+  mode: NULLABLE
+- name: app_version_major
+  type: NUMERIC
+  mode: NULLABLE
+- name: app_version_minor
+  type: NUMERIC
+  mode: NULLABLE
+- name: app_version_patch
+  type: NUMERIC
+  mode: NULLABLE
+- name: is_bot_generated
+  type: BOOLEAN
+  mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/view.sql	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/traces/view.sql	2025-09-10 12:30:03.000000000 +0000
@@ -0,0 +1,183 @@
+-- Generated via ./bqetl generate glean_usage
+CREATE OR REPLACE VIEW
+  `moz-fx-data-shared-prod.fenix.traces`
+AS
+SELECT
+  "org_mozilla_firefox" AS normalized_app_id,
+  mozfun.norm.fenix_app_info(
+    "org_mozilla_firefox",
+    client_info.app_build
+  ).channel AS normalized_channel,
+  additional_properties,
+  client_info,
+  document_id,
+  events,
+  metadata,
+  STRUCT(
+    STRUCT(
+      metrics.labeled_counter.glean_error_invalid_label,
+      metrics.labeled_counter.glean_error_invalid_overflow,
+      metrics.labeled_counter.glean_error_invalid_state,
+      metrics.labeled_counter.glean_error_invalid_value
+    ) AS `labeled_counter`,
+    STRUCT(metrics.object.gecko_trace_traces) AS `object`,
+    STRUCT(metrics.string.glean_client_annotation_experimentation_id) AS `string`,
+    STRUCT(metrics.string_list.glean_ping_uploader_capabilities) AS `string_list`
+  ) AS `metrics`,
+  normalized_app_name,
+  normalized_country_code,
+  normalized_os,
+  normalized_os_version,
+  ping_info,
+  sample_id,
+  submission_timestamp,
+  app_version_major,
+  app_version_minor,
+  app_version_patch,
+  is_bot_generated
+FROM
+  `moz-fx-data-shared-prod.org_mozilla_firefox.traces`
+UNION ALL
+SELECT
+  "org_mozilla_firefox_beta" AS normalized_app_id,
+  mozfun.norm.fenix_app_info(
+    "org_mozilla_firefox_beta",
+    client_info.app_build
+  ).channel AS normalized_channel,
+  additional_properties,
+  client_info,
+  document_id,
+  events,
+  metadata,
+  STRUCT(
+    STRUCT(
+      metrics.labeled_counter.glean_error_invalid_label,
+      metrics.labeled_counter.glean_error_invalid_overflow,
+      metrics.labeled_counter.glean_error_invalid_state,
+      metrics.labeled_counter.glean_error_invalid_value
+    ) AS `labeled_counter`,
+    STRUCT(metrics.object.gecko_trace_traces) AS `object`,
+    STRUCT(metrics.string.glean_client_annotation_experimentation_id) AS `string`,
+    STRUCT(metrics.string_list.glean_ping_uploader_capabilities) AS `string_list`
+  ) AS `metrics`,
+  normalized_app_name,
+  normalized_country_code,
+  normalized_os,
+  normalized_os_version,
+  ping_info,
+  sample_id,
+  submission_timestamp,
+  app_version_major,
+  app_version_minor,
+  app_version_patch,
+  is_bot_generated
+FROM
+  `moz-fx-data-shared-prod.org_mozilla_firefox_beta.traces`
+UNION ALL
+SELECT
+  "org_mozilla_fenix" AS normalized_app_id,
+  mozfun.norm.fenix_app_info(
+    "org_mozilla_fenix",
+    client_info.app_build
+  ).channel AS normalized_channel,
+  additional_properties,
+  client_info,
+  document_id,
+  events,
+  metadata,
+  STRUCT(
+    STRUCT(
+      metrics.labeled_counter.glean_error_invalid_label,
+      metrics.labeled_counter.glean_error_invalid_overflow,
+      metrics.labeled_counter.glean_error_invalid_state,
+      metrics.labeled_counter.glean_error_invalid_value
+    ) AS `labeled_counter`,
+    STRUCT(metrics.object.gecko_trace_traces) AS `object`,
+    STRUCT(metrics.string.glean_client_annotation_experimentation_id) AS `string`,
+    STRUCT(metrics.string_list.glean_ping_uploader_capabilities) AS `string_list`
+  ) AS `metrics`,
+  normalized_app_name,
+  normalized_country_code,
+  normalized_os,
+  normalized_os_version,
+  ping_info,
+  sample_id,
+  submission_timestamp,
+  app_version_major,
+  app_version_minor,
+  app_version_patch,
+  is_bot_generated
+FROM
+  `moz-fx-data-shared-prod.org_mozilla_fenix.traces`
+UNION ALL
+SELECT
+  "org_mozilla_fenix_nightly" AS normalized_app_id,
+  mozfun.norm.fenix_app_info(
+    "org_mozilla_fenix_nightly",
+    client_info.app_build
+  ).channel AS normalized_channel,
+  additional_properties,
+  client_info,
+  document_id,
+  events,
+  metadata,
+  STRUCT(
+    STRUCT(
+      metrics.labeled_counter.glean_error_invalid_label,
+      metrics.labeled_counter.glean_error_invalid_overflow,
+      metrics.labeled_counter.glean_error_invalid_state,
+      metrics.labeled_counter.glean_error_invalid_value
+    ) AS `labeled_counter`,
+    STRUCT(metrics.object.gecko_trace_traces) AS `object`,
+    STRUCT(metrics.string.glean_client_annotation_experimentation_id) AS `string`,
+    STRUCT(metrics.string_list.glean_ping_uploader_capabilities) AS `string_list`
+  ) AS `metrics`,
+  normalized_app_name,
+  normalized_country_code,
+  normalized_os,
+  normalized_os_version,
+  ping_info,
+  sample_id,
+  submission_timestamp,
+  app_version_major,
+  app_version_minor,
+  app_version_patch,
+  is_bot_generated
+FROM
+  `moz-fx-data-shared-prod.org_mozilla_fenix_nightly.traces`
+UNION ALL
+SELECT
+  "org_mozilla_fennec_aurora" AS normalized_app_id,
+  mozfun.norm.fenix_app_info(
+    "org_mozilla_fennec_aurora",
+    client_info.app_build
+  ).channel AS normalized_channel,
+  additional_properties,
+  client_info,
+  document_id,
+  events,
+  metadata,
+  STRUCT(
+    STRUCT(
+      metrics.labeled_counter.glean_error_invalid_label,
+      metrics.labeled_counter.glean_error_invalid_overflow,
+      metrics.labeled_counter.glean_error_invalid_state,
+      metrics.labeled_counter.glean_error_invalid_value
+    ) AS `labeled_counter`,
+    STRUCT(metrics.object.gecko_trace_traces) AS `object`,
+    STRUCT(metrics.string.glean_client_annotation_experimentation_id) AS `string`,
+    STRUCT(metrics.string_list.glean_ping_uploader_capabilities) AS `string_list`
+  ) AS `metrics`,
+  normalized_app_name,
+  normalized_country_code,
+  normalized_os,
+  normalized_os_version,
+  ping_info,
+  sample_id,
+  submission_timestamp,
+  app_version_major,
+  app_version_minor,
+  app_version_patch,
+  is_bot_generated
+FROM
+  `moz-fx-data-shared-prod.org_mozilla_fennec_aurora.traces`
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/use_counters/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/use_counters/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/fenix/use_counters/schema.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/fenix/use_counters/schema.yaml	2025-09-10 12:39:59.000000000 +0000
@@ -1,11 +1,11 @@
 fields:
 - name: normalized_app_id
-  mode: NULLABLE
   type: STRING
+  mode: NULLABLE
   description: App ID of the channel data was received from
 - name: normalized_channel
-  mode: NULLABLE
   type: STRING
+  mode: NULLABLE
   description: Normalized channel name
 - name: additional_properties
   type: STRING
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter/crash/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter/crash/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter/crash/metadata.yaml	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter/crash/metadata.yaml	2025-09-10 12:48:59.000000000 +0000
@@ -1,6 +1,14 @@
-friendly_name: Crash
+friendly_name: Historical Pings for `firefox-crashreporter/crash`
 description: |-
-  Please provide a description for the query
+  A historical view of pings sent for the
+  `firefox-crashreporter/crash`
+  document type.
+
+  This view is guaranteed to contain only complete days
+  (per `submission_timestamp`)
+  and to contain only one row per distinct `document_id` within a given date.
+
+  Clustering fields: `normalized_channel`, `sample_id`
 owners: []
 labels:
   authorized: true
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter_derived/event_monitoring_live_v1/materialized_view.sql /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter_derived/event_monitoring_live_v1/materialized_view.sql
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:26:03.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_crashreporter_derived/event_monitoring_live_v1/materialized_view.sql	2025-09-10 12:28:41.000000000 +0000
@@ -60,7 +60,7 @@
 FROM
   combined
 WHERE
-  DATE(submission_timestamp) >= "2025-09-09"
+  DATE(submission_timestamp) >= "2025-09-10"
 GROUP BY
   submission_date,
   window_start,
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/broken_site_report/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/broken_site_report/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/broken_site_report/metadata.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/broken_site_report/metadata.yaml	2025-09-10 12:48:48.000000000 +0000
@@ -1,6 +1,14 @@
-friendly_name: Broken Site Report
+friendly_name: Historical Pings for `firefox-desktop/broken-site-report`
 description: |-
-  Please provide a description for the query
+  A historical view of pings sent for the
+  `firefox-desktop/broken-site-report`
+  document type.
+
+  This view is guaranteed to contain only complete days
+  (per `submission_timestamp`)
+  and to contain only one row per distinct `document_id` within a given date.
+
+  Clustering fields: `normalized_channel`, `sample_id`
 owners: []
 labels:
   authorized: true
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/clients_last_seen_joined/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/clients_last_seen_joined/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/clients_last_seen_joined/schema.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/clients_last_seen_joined/schema.yaml	2025-09-10 12:36:13.000000000 +0000
@@ -184,6 +184,3 @@
 - name: active_hours_sum
   type: FLOAT
   mode: NULLABLE
-- name: days_interacted_bits
-  type: INTEGER
-  mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/crash/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/crash/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/crash/metadata.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/crash/metadata.yaml	2025-09-10 12:48:48.000000000 +0000
@@ -1,6 +1,14 @@
-friendly_name: Crash
+friendly_name: Historical Pings for `firefox-desktop/crash`
 description: |-
-  Please provide a description for the query
+  A historical view of pings sent for the
+  `firefox-desktop/crash`
+  document type.
+
+  This view is guaranteed to contain only complete days
+  (per `submission_timestamp`)
+  and to contain only one row per distinct `document_id` within a given date.
+
+  Clustering fields: `normalized_channel`, `sample_id`
 owners: []
 labels:
   authorized: true
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/ltv_states/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/ltv_states/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/ltv_states/schema.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/ltv_states/schema.yaml	2025-09-10 12:37:01.000000000 +0000
@@ -1,64 +1,66 @@
 fields:
-- description: Unique ID for the client installation.
-  mode: NULLABLE
-  name: client_id
+- name: client_id
   type: STRING
-- description: Sample ID - A number ranging from 0 - 99 based on client ID; used to pull a small sample of data related to a subset of clients over time
   mode: NULLABLE
-  name: sample_id
-  type: INT64
-- description: Submission Date
+  description: Unique ID for the client installation.
+- name: sample_id
+  type: INTEGER
   mode: NULLABLE
-  name: submission_date
+  description: Sample ID - A number ranging from 0 - 99 based on client ID; used to
+    pull a small sample of data related to a subset of clients over time
+- name: submission_date
   type: DATE
-- description: First Seen Date - The date this client was first seen
   mode: NULLABLE
-  name: first_seen_date
+  description: Submission Date
+- name: first_seen_date
   type: DATE
-- description: Days Since First Seen - The number of days since the client was first seen
   mode: NULLABLE
-  name: days_since_first_seen
-  type: INT64
-- description: Days Since Active
+  description: First Seen Date - The date this client was first seen
+- name: days_since_first_seen
+  type: INTEGER
   mode: NULLABLE
-  name: days_since_active
-  type: INT64
-- description: First Reported Country - The country this client ID was first reported from
+  description: Days Since First Seen - The number of days since the client was first
+    seen
+- name: days_since_active
+  type: INTEGER
   mode: NULLABLE
-  name: first_reported_country
+  description: Days Since Active
+- name: first_reported_country
   type: STRING
-- description: Attribution
   mode: NULLABLE
-  name: attribution
+  description: First Reported Country - The country this client ID was first reported
+    from
+- name: attribution
   type: RECORD
+  mode: NULLABLE
   fields:
-  - mode: NULLABLE
-    name: source
+  - name: source
     type: STRING
+    mode: NULLABLE
     description: Attribution Source
-  - mode: NULLABLE
-    name: medium
+  - name: medium
     type: STRING
+    mode: NULLABLE
     description: Attribution Medium
-  - mode: NULLABLE
-    name: campaign
+  - name: campaign
     type: STRING
+    mode: NULLABLE
     description: Attribution Campaign
-  - mode: NULLABLE
-    name: content
+  - name: content
     type: STRING
+    mode: NULLABLE
     description: Attribution Content
-  - mode: NULLABLE
-    name: experiment
+  - name: experiment
     type: STRING
+    mode: NULLABLE
     description: Attribution Experiment
-  - mode: NULLABLE
-    name: variation
+  - name: variation
     type: STRING
+    mode: NULLABLE
     description: Attribution Variation
-  - mode: NULLABLE
-    name: dltoken
+  - name: dltoken
     type: STRING
+    mode: NULLABLE
     description: Attribution Download Token
   - name: dlsource
     type: STRING
@@ -68,40 +70,43 @@
     type: STRING
     mode: NULLABLE
     description: Attribution UA
-- description: Active
-  mode: NULLABLE
-  name: active
-  type: INT64
-- description: Ad Clicks - The number of ad clicks from this client on the submission date
+  description: Attribution
+- name: active
+  type: INTEGER
   mode: NULLABLE
-  name: ad_clicks
-  type: INT64
-- description: Total Historic Ad Clicks - The number of ad clicks from this client on or before the submission date
+  description: Active
+- name: ad_clicks
+  type: INTEGER
   mode: NULLABLE
-  name: total_historic_ad_clicks
-  type: INT64
-- description: Days Seen Bytes
+  description: Ad Clicks - The number of ad clicks from this client on the submission
+    date
+- name: total_historic_ad_clicks
+  type: INTEGER
   mode: NULLABLE
-  name: days_seen_bytes
+  description: Total Historic Ad Clicks - The number of ad clicks from this client
+    on or before the submission date
+- name: days_seen_bytes
   type: BYTES
-- description: Pattern
   mode: NULLABLE
-  name: pattern
+  description: Days Seen Bytes
+- name: pattern
   type: INTEGER
-- description: Death Time
   mode: NULLABLE
-  name: death_time
+  description: Pattern
+- name: death_time
   type: INTEGER
-- description: Max Days
   mode: NULLABLE
-  name: max_days
+  description: Death Time
+- name: max_days
   type: INTEGER
-- description: Markov States
   mode: NULLABLE
-  name: markov_states
+  description: Max Days
+- name: markov_states
   type: RECORD
-  fields:
-  - description: Desktop States V1
     mode: NULLABLE
-    name: desktop_states_v1
+  fields:
+  - name: desktop_states_v1
     type: STRING
+    mode: NULLABLE
+    description: Desktop States V1
+  description: Markov States
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/metrics/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/metrics/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/metrics/schema.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/metrics/schema.yaml	2025-09-10 12:25:24.000000000 +0000
@@ -11652,6 +11652,19 @@
         while reporting fog.data_diretory_info.
 
         '
+    - name: media_mkv_codec_type
+      type: RECORD
+      mode: REPEATED
+      fields:
+      - name: key
+        type: STRING
+        mode: NULLABLE
+      - name: value
+        type: INTEGER
+        mode: NULLABLE
+      description: 'Count the amount of the real world codec usage inside Matroska.
+
+        '
   - name: memory_distribution
     type: RECORD
     mode: NULLABLE
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab/metadata.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab/metadata.yaml	2025-09-10 12:48:48.000000000 +0000
@@ -1,6 +1,14 @@
-friendly_name: Newtab
+friendly_name: Historical Pings for `firefox-desktop/newtab`
 description: |-
-  Please provide a description for the query
+  A historical view of pings sent for the
+  `firefox-desktop/newtab`
+  document type.
+
+  This view is guaranteed to contain only complete days
+  (per `submission_timestamp`)
+  and to contain only one row per distinct `document_id` within a given date.
+
+  Clustering fields: `normalized_channel`, `sample_id`
 owners: []
 labels: {}
 bigquery: null
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab_live/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab_live/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab_live/schema.yaml	2025-09-10 12:26:04.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/newtab_live/schema.yaml	2025-09-10 12:36:17.000000000 +0000
@@ -1,48 +1,47 @@
 fields:
-- description: Submission Timestamp
-  mode: NULLABLE
-  name: submission_timestamp
+- name: submission_timestamp
   type: TIMESTAMP
-- description: Normalized Country Code, Examples - US, AR, BR, etc.
   mode: NULLABLE
-  name: normalized_country_code
+  description: Submission Timestamp
+- name: normalized_country_code
   type: STRING
-- description: Normalized Channel, Examples - release, nightly, aurora, esr, beta
   mode: NULLABLE
-  name: normalized_channel
+  description: Normalized Country Code, Examples - US, AR, BR, etc.
+- name: normalized_channel
   type: STRING
-- description: Document ID
   mode: NULLABLE
-  name: document_id
+  description: Normalized Channel, Examples - release, nightly, aurora, esr, beta
+- name: document_id
   type: STRING
-- description: Pocket Enabled
   mode: NULLABLE
-  name: pocket_enabled
+  description: Document ID
+- name: pocket_enabled
   type: BOOLEAN
-- description: Pocket Sponsored Stories Enabled
   mode: NULLABLE
-  name: pocket_sponsored_stories_enabled
+  description: Pocket Enabled
+- name: pocket_sponsored_stories_enabled
   type: BOOLEAN
-- description: Newtab Locale
   mode: NULLABLE
-  name: newtab_locale
+  description: Pocket Sponsored Stories Enabled
+- name: newtab_locale
   type: STRING
-- description: App Build
   mode: NULLABLE
-  name: app_build
+  description: Newtab Locale
+- name: app_build
   type: STRING
-- description: App Display Version
   mode: NULLABLE
-  name: app_display_version
+  description: App Build
+- name: app_display_version
   type: STRING
-- description: Client ID
   mode: NULLABLE
-  name: client_id
+  description: App Display Version
+- name: client_id
   type: STRING
+  mode: NULLABLE
+  description: Client ID
 - name: events
   type: RECORD
   mode: REPEATED
-  description: Events
   fields:
   - name: category
     type: STRING
@@ -51,7 +50,6 @@
   - name: extra
     type: RECORD
     mode: REPEATED
-    description: Extras
     fields:
     - name: key
       type: STRING
@@ -61,6 +59,7 @@
       type: STRING
       mode: NULLABLE
       description: Value
+    description: Extras
   - name: name
     type: STRING
     mode: NULLABLE
@@ -69,3 +68,4 @@
     type: INTEGER
     mode: NULLABLE
     description: Event Timestamp
+  description: Events
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/metadata.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/metadata.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/metadata.yaml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/metadata.yaml	2025-09-10 12:48:48.000000000 +0000
@@ -0,0 +1,22 @@
+friendly_name: Historical Pings for `firefox-desktop/traces`
+description: |-
+  A historical view of pings sent for the
+  `firefox-desktop/traces`
+  document type.
+
+  This view is guaranteed to contain only complete days
+  (per `submission_timestamp`)
+  and to contain only one row per distinct `document_id` within a given date.
+
+  Clustering fields: `normalized_channel`, `sample_id`
+owners: []
+labels: {}
+bigquery: null
+workgroup_access:
+- role: roles/bigquery.dataViewer
+  members:
+  - workgroup:mozilla-confidential
+references:
+  view.sql:
+  - moz-fx-data-shared-prod.firefox_desktop_stable.traces_v1
+require_column_descriptions: false
diff -bur --no-dereference --new-file /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/schema.yaml /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/schema.yaml
--- /tmp/workspace/main-generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/schema.yaml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-sql/sql/moz-fx-data-shared-prod/firefox_desktop/traces/schema.yaml	2025-09-10 12:23:23.000000000 +0000
@@ -0,0 +1,465 @@
+fields:
+- name: additional_properties
+  type: STRING
+  mode: NULLABLE
+  description: A JSON string containing any payload properties not present in the
+    schema
+- name: client_info
+  type: RECORD
+  mode: NULLABLE
+  fields:
+  - name: android_sdk_version
+    type: STRING
+    mode: NULLABLE
+    description: The optional Android specific SDK version of the software running
+      on this hardware device.
+  - name: app_build
+    type: STRING
+    mode: NULLABLE
+    description: The build identifier generated by the CI system (e.g. "1234/A").
+      For language bindings that provide automatic detection for this value, (e.g.
+      Android/Kotlin), in the unlikely event that the build identifier can not be
+      retrieved from the OS, it is set to "inaccessible". For other language bindings,
+      if the value was not provided through configuration, this metric gets set to
+      `Unknown`.
+  - name: app_channel
+    type: STRING
+    mode: NULLABLE
+    description: The channel the application is being distributed on.
+  - name: app_display_version
+    type: STRING
+    mode: NULLABLE
+    description: The user visible version string (e.g. "1.0.3").  In the unlikely
+      event that the display version can not be retrieved, it is set to "inaccessible".
+  - name: architecture
+    type: STRING
+    mode: NULLABLE
+    description: The architecture of the device, (e.g. "arm", "x86").
+  - name: attribution
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: campaign
+      type: STRING
+      mode: NULLABLE
+      description: The attribution campaign (e.g. 'mozilla-org').
+    - name: content
+      type: STRING
+      mode: NULLABLE
+      description: The attribution content (e.g. 'firefoxview').
+    - name: medium
+      type: STRING
+      mode: NULLABLE
+      description: The attribution medium (e.g. 'organic' for a search engine).
+    - name: source
+      type: STRING
+      mode: NULLABLE
+      description: The attribution source (e.g. 'google-play').
+    - name: term
+      type: STRING
+      mode: NULLABLE
+      description: The attribution term (e.g. 'browser with developer tools for android').
+    - name: ext
+      type: JSON
+      mode: NULLABLE
+  - name: build_date
+    type: STRING
+    mode: NULLABLE
+    description: The date & time the application was built
+  - name: client_id
+    type: STRING
+    mode: NULLABLE
+    description: A UUID uniquely identifying the client.
+  - name: device_manufacturer
+    type: STRING
+    mode: NULLABLE
+    description: The manufacturer of the device the application is running on. Not
+      set if the device manufacturer can't be determined (e.g. on Desktop).
+  - name: device_model
+    type: STRING
+    mode: NULLABLE
+    description: The model of the device the application is running on. On Android,
+      this is Build.MODEL, the user-visible marketing name, like "Pixel 2 XL". Not
+      set if the device model can't be determined (e.g. on Desktop).
+  - name: distribution
+    type: RECORD
+    mode: NULLABLE
+    fields:
+    - name: name
+      type: STRING
+      mode: NULLABLE
+      description: The distribution name (e.g. 'MozillaOnline').
+    - name: ext
+      type: JSON
+      mode: NULLABLE
+  - name: first_run_date
+    type: STRING
+    mode: NULLABLE
+    description: The date of the first run of the application.
+  - name: locale
+    type: STRING
+    mode: NULLABLE
+    description: The locale of the application during initialization (e.g. "es-ES").
+      If the locale can't be determined on the system, the value is ["und"](https://unicode.org/reports/tr35/#Unknown_or_Invalid_Identifiers),
+      to indicate "undetermined".
+  - name: os
+    type: STRING
+    mode: NULLABLE
+    description: 'The name of the operating system. Possible values: Android, iOS,
+      Linux, Darwin, W

⚠️ Only part of the diff is displayed.

Link to full diff

@SuYoungHong
Copy link

@kik-kik , one addition I'd like to request like I mentioned in Slack.

Can we add a page_views column based on the page_views_unique_device metric to the app_store_funnel_v1 query?

Same logic for v1 and v2 sources. Just:
sum(page_views_unique_device) as page_views

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants