dbt Crowdfunding

Aliases Mapping

Aliases Mapping model for crowdfunding.

inferred

Blocks

aliases_mapping.sql · 91 lines
inferred
-- models/aliases_mapping.sql
{{ config(materialized='view') }}

with

     -- Establish all child-to-parent edges from tables (tracks, pages, aliases)
     all_realiases as (
       select anonymous_id as alias
         , user_id as next_alias
         , sent_at as realiased_at
       from production.tracks

       union

       select user_id
         , null
         , sent_at
       from production.tracks

        union

        select previous_id
         , user_id
         , sent_at
        from production.aliases

        union

        select user_id
          , null
          , sent_at
        from production.aliases

        union

        select anonymous_id
           , user_id
           , sent_at
        from production.pages

        union

        select user_id
           , null
           , sent_at
        from production.pages
     ),

     -- Only keep the oldest non-null parent for each child
     realiases as (
       select distinct alias
         , first_value(next_alias ignore nulls) over(partition by alias order by realiased_at rows between unbounded preceding and unbounded following) as next_alias
       from all_realiases
     )

     -- Traverse the tree upwards and point every node at its root
     select distinct r0.alias
       , coalesce(r9.next_alias
           , r9.alias
           , r8.alias
           , r7.alias
           , r6.alias
           , r5.alias
           , r4.alias
           , r3.alias
           , r2.alias
           , r1.alias
           , r0.alias
         ) as looker_visitor_id
     from realiases r0
       left join realiases r1 on r0.next_alias = r1.alias
       left join realiases r2 on r1.next_alias = r2.alias
       left join realiases r3 on r2.next_alias = r3.alias
       left join realiases r4 on r3.next_alias = r4.alias
       left join realiases r5 on r4.next_alias = r5.alias
       left join realiases r6 on r5.next_alias = r6.alias
       left join realiases r7 on r6.next_alias = r7.alias
       left join realiases r8 on r7.next_alias = r8.alias
       left join realiases r9 on r8.next_alias = r9.alias

# models/schema.yml
version: 2

models:
  - name: aliases_mapping
    columns:
      - name: alias
        tests:
          - unique
          - not_null
      - name: universal_visitor_id

Assumptions

  • materialized='view' is the default; no persist hint found.
  • schema.yml columns come from view dimensions; a primary_key dimension gets unique + not_null tests.
aliases_mapping.sql · 76 lines
source-preserved validation: parses
with

     -- Establish all child-to-parent edges from tables (tracks, pages, aliases)
     all_realiases as (
       select anonymous_id as alias
         , user_id as next_alias
         , sent_at as realiased_at
       from production.tracks

       union

       select user_id
         , null
         , sent_at
       from production.tracks

        union

        select previous_id
         , user_id
         , sent_at
        from production.aliases

        union

        select user_id
          , null
          , sent_at
        from production.aliases

        union

        select anonymous_id
           , user_id
           , sent_at
        from production.pages

        union

        select user_id
           , null
           , sent_at
        from production.pages
     ),

     -- Only keep the oldest non-null parent for each child
     realiases as (
       select distinct alias
         , first_value(next_alias ignore nulls) over(partition by alias order by realiased_at rows between unbounded preceding and unbounded following) as next_alias
       from all_realiases
     )

     -- Traverse the tree upwards and point every node at its root
     select distinct r0.alias
       , coalesce(r9.next_alias
           , r9.alias
           , r8.alias
           , r7.alias
           , r6.alias
           , r5.alias
           , r4.alias
           , r3.alias
           , r2.alias
           , r1.alias
           , r0.alias
         ) as looker_visitor_id
     from realiases r0
       left join realiases r1 on r0.next_alias = r1.alias
       left join realiases r2 on r1.next_alias = r2.alias
       left join realiases r3 on r2.next_alias = r3.alias
       left join realiases r4 on r3.next_alias = r4.alias
       left join realiases r5 on r4.next_alias = r5.alias
       left join realiases r6 on r5.next_alias = r6.alias
       left join realiases r7 on r6.next_alias = r7.alias
       left join realiases r8 on r7.next_alias = r8.alias
       left join realiases r9 on r8.next_alias = r9.alias
aliases_mapping.view.lkml · 100 lines
inferred
view: aliases_mapping {
  derived_table: {
    sql: with

     -- Establish all child-to-parent edges from tables (tracks, pages, aliases)
     all_realiases as (
       select anonymous_id as alias
         , user_id as next_alias
         , sent_at as realiased_at
       from production.tracks

       union

       select user_id
         , null
         , sent_at
       from production.tracks

        union

        select previous_id
         , user_id
         , sent_at
        from production.aliases

        union

        select user_id
          , null
          , sent_at
        from production.aliases

        union

        select anonymous_id
           , user_id
           , sent_at
        from production.pages

        union

        select user_id
           , null
           , sent_at
        from production.pages
     ),

     -- Only keep the oldest non-null parent for each child
     realiases as (
       select distinct alias
         , first_value(next_alias ignore nulls) over(partition by alias order by realiased_at rows between unbounded preceding and unbounded following) as next_alias
       from all_realiases
     )

     -- Traverse the tree upwards and point every node at its root
     select distinct r0.alias
       , coalesce(r9.next_alias
           , r9.alias
           , r8.alias
           , r7.alias
           , r6.alias
           , r5.alias
           , r4.alias
           , r3.alias
           , r2.alias
           , r1.alias
           , r0.alias
         ) as looker_visitor_id
     from realiases r0
       left join realiases r1 on r0.next_alias = r1.alias
       left join realiases r2 on r1.next_alias = r2.alias
       left join realiases r3 on r2.next_alias = r3.alias
       left join realiases r4 on r3.next_alias = r4.alias
       left join realiases r5 on r4.next_alias = r5.alias
       left join realiases r6 on r5.next_alias = r6.alias
       left join realiases r7 on r6.next_alias = r7.alias
       left join realiases r8 on r7.next_alias = r8.alias
       left join realiases r9 on r8.next_alias = r9.alias ;;
  }

  dimension: alias {
    primary_key: yes
    hidden: yes
    sql: ${TABLE}.alias ;;
  }

  dimension: universal_visitor_id {
    sql: ${TABLE}.looker_visitor_id ;;
  }

  measure: count {
    type: count
    hidden: yes
  }

  measure: number_of_distinct_visitors {
    type: count_distinct
    sql: ${universal_visitor_id} ;;
  }
}
aliases_mapping.view.lookml · 90 lines
source-preserved
- view: aliases_mapping
  derived_table:
    sql: with

     -- Establish all child-to-parent edges from tables (tracks, pages, aliases)
     all_realiases as (
       select anonymous_id as alias
         , user_id as next_alias
         , sent_at as realiased_at
       from production.tracks

       union

       select user_id
         , null
         , sent_at
       from production.tracks

        union

        select previous_id
         , user_id
         , sent_at
        from production.aliases

        union

        select user_id
          , null
          , sent_at
        from production.aliases

        union

        select anonymous_id
           , user_id
           , sent_at
        from production.pages

        union

        select user_id
           , null
           , sent_at
        from production.pages
     ),

     -- Only keep the oldest non-null parent for each child
     realiases as (
       select distinct alias
         , first_value(next_alias ignore nulls) over(partition by alias order by realiased_at rows between unbounded preceding and unbounded following) as next_alias
       from all_realiases
     )

     -- Traverse the tree upwards and point every node at its root
     select distinct r0.alias
       , coalesce(r9.next_alias
           , r9.alias
           , r8.alias
           , r7.alias
           , r6.alias
           , r5.alias
           , r4.alias
           , r3.alias
           , r2.alias
           , r1.alias
           , r0.alias
         ) as looker_visitor_id
     from realiases r0
       left join realiases r1 on r0.next_alias = r1.alias
       left join realiases r2 on r1.next_alias = r2.alias
       left join realiases r3 on r2.next_alias = r3.alias
       left join realiases r4 on r3.next_alias = r4.alias
       left join realiases r5 on r4.next_alias = r5.alias
       left join realiases r6 on r5.next_alias = r6.alias
       left join realiases r7 on r6.next_alias = r7.alias
       left join realiases r8 on r7.next_alias = r8.alias
       left join realiases r9 on r8.next_alias = r9.alias
  fields:
  - dimension: alias
    primary_key: true
    hidden: true
    sql: ${TABLE}.alias
  - dimension: universal_visitor_id
    sql: ${TABLE}.looker_visitor_id
  - measure: count
    type: count
  - measure: number_of_distinct_visitors
    type: count_distinct
    sql: ${universal_visitor_id}

Contents

  • aliases_mapping.sql
  • aliases_mapping.sql
  • aliases_mapping.view.lkml
  • aliases_mapping.view.lookml