Skip to content

Commit 89bf6f4

Browse files
committed
rename project vars
1 parent 1d311b7 commit 89bf6f4

8 files changed

Lines changed: 90 additions & 94 deletions

README.md

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
Welcome to your new dbt project!
2-
3-
### Using the starter project
4-
5-
61
This library works by default for one google cloud project:
72
# "TA:SOURCES":
83
# - {project_id: google_cloud_project_id,
@@ -14,11 +9,11 @@ This library works by default for one google cloud project:
149
Adding more project_ids and multiple dataset_ids for specific datasets is also possible.
1510
A few additional steps are required for multiple sources to be added as sources.
1611

17-
1) TA:SOURCES_READY must be set to false (default).
12+
1) TA:SOURCES_MULTIPLE_PROJECTS_GENERATED must be set to false (default).
1813
2) add projects and datasets to the TA:SOURCES variable in your dbt project
1914
3) run the following command to generate sources for all projects:
20-
dbt run-operation -q generate_firebase_sources > models/firebase_sources.yml
21-
4) change TA:SOURCES_READY to true
15+
dbt run-operation -q generate_sources_multiple_projects > models/firebase_sources_multiple_projects.yml
16+
4) change TA:SOURCES_MULTIPLE_PROJECTS_GENERATED to true
2217
# "TA:SOURCES":
2318
# - {project_id: google_cloud_project_id,
2419
# analytics_dataset_id: schema_id,

dbt_project.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ seeds:
3333
vars:
3434
ta_firebase:
3535
"TA:DONT_CARE": "MAKE_YAML_WORK" # optional
36-
"TA:SOURCES_READY" : false
36+
"TA:SOURCES_MULTIPLE_PROJECTS_GENERATED" : false
3737
# "TA:SOURCES":
3838
# - {project_id: watermark-maker,
3939
# analytics_dataset_id: analytics_150733022,

macros/generate_sources.sql

Lines changed: 0 additions & 69 deletions
This file was deleted.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{% macro generate_firebase_sources(
2+
var_name='TA:SOURCES',
3+
source_prefix='firebase',
4+
indent=2,
5+
include_comments=true
6+
) %}
7+
{% set sp = ' ' * indent %}
8+
{% set nl = '\n' %}
9+
{% set out = [] %}
10+
11+
{% set projects = var(var_name, []) %}
12+
{% if projects is string %}{% set projects = fromjson(projects) %}{% endif %}
13+
14+
{% do out.append('version: 2') %}
15+
{% do out.append('') %}
16+
{% do out.append('sources:') %}
17+
18+
{% for p in projects %}
19+
{% set pid = (p.get('project_id') or '') | trim %}
20+
{% set events_table = (p.get('events_table') or 'events_*') | trim %}
21+
{% set intraday_table = (p.get('intraday_table') or 'events_intraday_*') | trim %}
22+
{% set cds = (p.get('crashlytics_dataset_id') or '') | trim %}
23+
{% set crash_table = (p.get('crashlytics_table') or 'com_labpixies_flood_floodit_*') | trim %}
24+
25+
{# accept either analytics_dataset_ids (list) or analytics_dataset_id (string) #}
26+
{% set ads_raw = p.get('analytics_dataset_ids') if p.get('analytics_dataset_ids') is not none else p.get('analytics_dataset_id') %}
27+
{% if ads_raw is string %}
28+
{% set ads_list = [ads_raw | trim] %}
29+
{% elif ads_raw is iterable %}
30+
{% set ads_list = ads_raw %}
31+
{% else %}
32+
{% set ads_list = [] %}
33+
{% endif %}
34+
35+
{% for ads in ads_list %}
36+
{% set ds = ads | trim %}
37+
{% if ds != '' %}
38+
{% if include_comments %}
39+
{% do out.append(sp ~ "# Analytics for " ~ pid ~ " (" ~ ds ~ ")") %}
40+
{% endif %}
41+
{% do out.append(sp ~ "- name: " ~ source_prefix ~ "_analytics__" ~ pid ~ "__" ~ ds) %}
42+
{% do out.append(sp ~ " database: " ~ pid) %}
43+
{% do out.append(sp ~ " schema: " ~ ds) %}
44+
{% do out.append(sp ~ " tables:") %}
45+
{% do out.append(sp ~ " - name: events") %}
46+
{% do out.append(sp ~ " identifier: " ~ events_table) %}
47+
{% do out.append(sp ~ " - name: events_intraday") %}
48+
{% do out.append(sp ~ " identifier: " ~ intraday_table) %}
49+
{% do out.append('') %}
50+
{% endif %}
51+
{% endfor %}
52+
53+
{% if cds != '' %}
54+
{% if include_comments %}
55+
{% do out.append(sp ~ "# Crashlytics for " ~ pid) %}
56+
{% endif %}
57+
{% do out.append(sp ~ "- name: " ~ source_prefix ~ "_crashlytics__" ~ pid) %}
58+
{% do out.append(sp ~ " database: " ~ pid) %}
59+
{% do out.append(sp ~ " schema: " ~ cds) %}
60+
{% do out.append(sp ~ " tables:") %}
61+
{% do out.append(sp ~ " - name: events") %}
62+
{% do out.append(sp ~ " identifier: " ~ crash_table) %}
63+
{% do out.append('') %}
64+
{% endif %}
65+
{% endfor %}
66+
67+
{% set result = out | join(nl) | trim %}
68+
{{ print(result) }}
69+
{{ return(result) }}
70+
{% endmacro %}

models/analytics/fb_analytics_events_raw.sql

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"granularity": "day"
88
},
99
incremental_strategy = 'insert_overwrite',
10+
lookback = 4
1011
require_partition_filter = true,
1112
cluster_by = ["event_name", "platform", "app_id"]
1213
) }}
@@ -67,26 +68,26 @@ SELECT
6768
FROM
6869
(
6970
{%- set projects = var('TA:SOURCES', []) -%}
70-
{%- set ready = var('TA:SOURCES_READY', false) -%}
71+
{%- set ready = var('TA:SOURCES_MULTIPLE_PROJECTS_GENERATED', false) -%}
7172

7273
{%- set first = (projects[0] if projects and (projects[0] is mapping) else {}) -%}
73-
{%- set pid0 = first.get('project_id', 'fallback_project') -%}
74+
{%- set pid0 = first.get('project_id', 'single_project') -%}
7475
{%- set ads_raw0 = first.get('analytics_dataset_ids') if first.get('analytics_dataset_ids') is not none else first.get('analytics_dataset_id') -%}
7576
{%- if ads_raw0 is string -%}
7677
{%- set ds0 = ads_raw0 -%}
7778
{%- elif ads_raw0 is iterable and (ads_raw0 | length) > 0 -%}
7879
{%- set ds0 = ads_raw0[0] -%}
7980
{%- else -%}
80-
{%- set ds0 = 'fallback_dataset' -%}
81+
{%- set ds0 = 'single_project_dataset' -%}
8182
{%- endif -%}
8283

8384
{%- if not ready -%}
84-
-- FALLBACK: use the single parse-safe source until generated sources are ready
85+
-- use the single project source if generated sources are not ready
8586
SELECT
8687
'{{ pid0 }}' as project_id,
8788
'{{ ds0 }}' as dataset_id,
8889
*
89-
FROM {{ source('firebase_analytics__fallback', 'events') }}
90+
FROM {{ source('firebase_analytics__single_project', 'events') }}
9091
WHERE {{ ta_firebase.analyticsTableSuffixFilter() }}
9192
AND {{ ta_firebase.analyticsDateFilterFor('DATE(TIMESTAMP_MICROS(event_timestamp))') }}
9293
{%- else -%}

models/crashlytics/fb_crashlytics_events_raw.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
-- https://firebase.google.com/docs/crashlytics/bigquery-export#without_stack_traces
1515

1616
{% set projects = var('TA:SOURCES', []) %}
17-
{% set ready = var('TA:SOURCES_READY', false) %}
17+
{% set ready = var('TA:SOURCES_MULTIPLE_PROJECTS_GENERATED', false) %}
1818

1919
{% set first = projects[0] if projects and (projects[0] is mapping) else {} %}
20-
{% set pid0 = first.get('project_id', 'fallback_project') %}
21-
{% set ds0 = first.get('crashlytics_dataset_id', 'fallback_crashlytics_dataset') %}
20+
{% set pid0 = first.get('project_id', 'single_project') %}
21+
{% set ds0 = first.get('crashlytics_dataset_id', 'single_project_crashlytics_dataset') %}
2222

2323
{%- set ns = namespace(first=true) -%}
2424

@@ -93,7 +93,7 @@
9393
) AS unity_metadata
9494
, COUNT(1) OVER (PARTITION BY installation_uuid, event_id, variant_id) as duplicates_cnt
9595
96-
FROM {{ source('firebase_crashlytics__fallback', 'events') }}
96+
FROM {{ source('firebase_crashlytics__single_project', 'events') }}
9797
WHERE {{ ta_firebase.crashlyticsTSFilterFor("event_timestamp") }}
9898
QUALIFY ROW_NUMBER() OVER (PARTITION BY crashlytics_user_pseudo_id, event_id, variant_id ORDER BY received_ts) = 1
9999
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ version: 2
22

33
sources:
44
# Firebase Analytics (safe default)
5-
- name: "firebase_analytics__fallback"
5+
- name: "firebase_analytics__single_project"
66
database: "{{ var('TA:SOURCES','ta')[0]['project_id'] }}"
77
schema: "{{ var('TA:SOURCES','firebase_analytics_raw_test')[0]['analytics_dataset_id'] }}"
88
tables:
99
- name: events
1010
identifier: "{{ var('TA:SOURCES','events_*')[0]['events_table'] }}"
1111

1212
# Firebase Crashlytics (safe default)
13-
- name: firebase_crashlytics__fallback
13+
- name: "firebase_crashlytics__single_project"
1414
database: "{{ var('TA:SOURCES','ta')[0]['project_id'] }}"
15-
schema: "{{ var('TA:SOURCES', 'firebase_crashlytics__fallback')[0]['crashlytics_dataset_id'] }}"
15+
schema: "{{ var('TA:SOURCES', 'firebase_crashlytics__single_project')[0]['crashlytics_dataset_id'] }}"
1616
tables:
1717
- name: events
1818
identifier: "{{ var('TA:SOURCES','com_app_*')[0]['crashlytics_table'] }}"

tests/events_raw_incremental.sql

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,15 @@ WITH stg AS (
1313

1414
src AS (
1515
{%- set projects = var('TA:SOURCES', []) -%}
16-
{%- set ready = var('TA:SOURCES_READY', false) -%}
16+
{%- set ready = var('TA:SOURCES_MULTIPLE_PROJECTS_GENERATED', false) -%}
1717
{%- set ns = namespace(first=true) -%}
1818

1919
{%- if not ready -%}
2020
SELECT
2121
DATE(TIMESTAMP_MICROS(event_timestamp)) AS event_date,
2222
COUNT(*) AS cnt,
23-
-- use first project's id if available; otherwise literal 'fallback'
24-
{{ (projects[0]['project_id'] if projects and (projects[0] is mapping) and projects[0].get('project_id') else 'fallback') | tojson }} AS project_id
25-
FROM {{ source('firebase_analytics__fallback', 'events') }}
23+
{{ (projects[0]['project_id'] if projects and (projects[0] is mapping) and projects[0].get('project_id') else 'single_project') | tojson }} AS project_id
24+
FROM {{ source('firebase_analytics__single_project', 'events') }}
2625
WHERE {{ ta_firebase.analyticsTestTableSuffixFilter(extend=3) }}
2726
AND {{ ta_firebase.analyticsTestDateFilter('DATE(TIMESTAMP_MICROS(event_timestamp))', extend=2) }}
2827
AND DATE(TIMESTAMP_MICROS(event_timestamp)) <= CURRENT_DATE() - 5

0 commit comments

Comments
 (0)