dbt Media publishing

Visit New

Visit New model for media publishing.

inferred

Blocks

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

SELECT
  visit.*,
  visit_channel.app_version AS "app_version",
  visit_channel.channel AS "channel",
  visit_channel.first_channel  AS "first_channel",
  visit_channel.first_desktop  AS "first_desktop",
  visit_channel.first_html5 AS "first_html5",
  visit_channel.first_html5_android AS "first_html5_android",
  visit_channel.first_html5_ios AS "first_html5_ios",
  visit_channel.first_ipad AS "first_ipad",
  visit_channel.first_iphone AS "first_iphone",
  visit_channel.manufacturer AS "manufacturer",
  visit_channel.model AS "visit_channel.model",
  visit_general.attraction_type1 AS "attraction_type1",
  visit_general.attraction_type2 AS "attraction_type2",
  visit_general.cohort AS "cohort",
  visit_general.first_sub_type AS "first_sub_type",
  visit_general.last_sub_type AS "last_sub_type",
  visit_general.sub_cohort AS "sub_cohort",
  visit_general.used_guest_pass AS "used_guest_pass",
  visit_geo.country_name,
  visit_geo.region,
  visit_geo.geo_source
FROM sanitized_db.si_cs_visit_recent AS visit
LEFT JOIN sanitized_db.sanitized_visit_channel AS visit_channel ON visit.visit_id = visit_channel.visit_id
LEFT JOIN sanitized_db.sanitized_visit_general AS visit_general ON visit.visit_id = visit_general.visit_id
LEFT JOIN sanitized_db.sanitized_merged_geoip AS visit_geo ON visit.visit_id = visit_geo.visit_id
WHERE
  ((visit.start_time) >= (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ))) AND (visit.start_time) < (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,91, DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ) ))))

# models/schema.yml
version: 2

models:
  - name: visit_new
    columns:
      - name: visit_id
        tests:
          - unique
          - not_null
      - name: parent_visitor_id
      - name: first_request
      - name: last_request
      - name: referral_url
      - name: site_visited
      - name: visit_index
      - name: is_first_visit
      - name: days_since_first_visit
      - name: days_since_prev_visit
      - name: visit_duration
      - name: num_requests
      - name: num_pages
      - name: unique_pages
      - name: match_type
      - name: is_abce_visit
      - name: is_abce_session
      - name: has_expired
      - name: is_first_site_visit
      - name: is_flirt
      - name: visit_value
      - name: visit_frequency
      - name: visit_date
      - name: app_version
      - name: channel
      - name: is_first_channel
      - name: is_first_desktop
      - name: is_first_html5
      - name: is_first_html5_android
      - name: is_first_html5_ios
      - name: is_first_ipad
      - name: is_first_iphone
      - name: manufacturer
      - name: model
      - name: attraction_type1
      - name: attraction_type2
      - name: first_sub_type
      - name: last_sub_type
      - name: sub_cohort
      - name: used_guest_pass

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.
visit_new.sql · 29 lines
source-preserved validation: parses
SELECT
  visit.*,
  visit_channel.app_version AS "app_version",
  visit_channel.channel AS "channel",
  visit_channel.first_channel  AS "first_channel",
  visit_channel.first_desktop  AS "first_desktop",
  visit_channel.first_html5 AS "first_html5",
  visit_channel.first_html5_android AS "first_html5_android",
  visit_channel.first_html5_ios AS "first_html5_ios",
  visit_channel.first_ipad AS "first_ipad",
  visit_channel.first_iphone AS "first_iphone",
  visit_channel.manufacturer AS "manufacturer",
  visit_channel.model AS "visit_channel.model",
  visit_general.attraction_type1 AS "attraction_type1",
  visit_general.attraction_type2 AS "attraction_type2",
  visit_general.cohort AS "cohort",
  visit_general.first_sub_type AS "first_sub_type",
  visit_general.last_sub_type AS "last_sub_type",
  visit_general.sub_cohort AS "sub_cohort",
  visit_general.used_guest_pass AS "used_guest_pass",
  visit_geo.country_name,
  visit_geo.region,
  visit_geo.geo_source
FROM sanitized_db.si_cs_visit_recent AS visit
LEFT JOIN sanitized_db.sanitized_visit_channel AS visit_channel ON visit.visit_id = visit_channel.visit_id
LEFT JOIN sanitized_db.sanitized_visit_general AS visit_general ON visit.visit_id = visit_general.visit_id
LEFT JOIN sanitized_db.sanitized_merged_geoip AS visit_geo ON visit.visit_id = visit_geo.visit_id
WHERE
  ((visit.start_time) >= (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ))) AND (visit.start_time) < (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,91, DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ) ))))
visit_new.view.lkml · 283 lines
inferred
view: visit_new {
  derived_table: {
    sql: SELECT
  visit.*,
  visit_channel.app_version AS "app_version",
  visit_channel.channel AS "channel",
  visit_channel.first_channel  AS "first_channel",
  visit_channel.first_desktop  AS "first_desktop",
  visit_channel.first_html5 AS "first_html5",
  visit_channel.first_html5_android AS "first_html5_android",
  visit_channel.first_html5_ios AS "first_html5_ios",
  visit_channel.first_ipad AS "first_ipad",
  visit_channel.first_iphone AS "first_iphone",
  visit_channel.manufacturer AS "manufacturer",
  visit_channel.model AS "visit_channel.model",
  visit_general.attraction_type1 AS "attraction_type1",
  visit_general.attraction_type2 AS "attraction_type2",
  visit_general.cohort AS "cohort",
  visit_general.first_sub_type AS "first_sub_type",
  visit_general.last_sub_type AS "last_sub_type",
  visit_general.sub_cohort AS "sub_cohort",
  visit_general.used_guest_pass AS "used_guest_pass",
  visit_geo.country_name,
  visit_geo.region,
  visit_geo.geo_source
FROM sanitized_db.si_cs_visit_recent AS visit
LEFT JOIN sanitized_db.sanitized_visit_channel AS visit_channel ON visit.visit_id = visit_channel.visit_id
LEFT JOIN sanitized_db.sanitized_visit_general AS visit_general ON visit.visit_id = visit_general.visit_id
LEFT JOIN sanitized_db.sanitized_merged_geoip AS visit_geo ON visit.visit_id = visit_geo.visit_id
WHERE
  ((visit.start_time) >= (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ))) AND (visit.start_time) < (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,91, DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ) )))) ;;
  }

  dimension: visit_id {
    type: int
    primary_key: yes
    sql: ${TABLE}.visit_id ;;
  }

  dimension: parent_visitor_id {
    type: int
    sql: ${TABLE}.parent_visitor ;;
  }

  dimension: first_request {
    type: int
    hidden: yes
    sql: ${TABLE}.first_request ;;
  }

  dimension: last_request {
    type: int
    sql: ${TABLE}.last_request ;;
  }

  dimension: referral_url {
    type: int
    hidden: yes
    sql: ${TABLE}.referral_url ;;
  }

  dimension: site_visited {
    sql: ${TABLE}.site_visited ;;
  }

  dimension: visit_index {
    type: number
    sql: ${TABLE}.visit_index ;;
  }

  dimension: is_first_visit {
    type: yesno
    sql: ${TABLE}.is_first_visit ;;
  }

  dimension: days_since_first_visit {
    type: number
    sql: ${TABLE}.days_since_first_visit ;;
  }

  dimension: days_since_prev_visit {
    type: number
    sql: ${TABLE}.days_since_prev_visit ;;
  }

  dimension: visit_duration {
    type: number
    sql: ${TABLE}.visit_duration ;;
  }

  dimension: num_requests {
    type: number
    sql: ${TABLE}.num_requests ;;
  }

  dimension: num_pages {
    type: number
    sql: ${TABLE}.num_pages ;;
  }

  dimension: unique_pages {
    type: number
    sql: ${TABLE}.unique_pages ;;
  }

  dimension: match_type {
    sql: ${TABLE}.match_type ;;
  }

  dimension: is_abce_visit {
    hidden: yes
    sql: ${TABLE}.is_abce_visit ;;
  }

  dimension: is_abce_session {
    hidden: yes
    sql: ${TABLE}.is_abce_session ;;
  }

  dimension: has_expired {
    sql: ${TABLE}.has_expired ;;
  }

  dimension: is_first_site_visit {
    type: yesno
    sql: ${TABLE}.is_first_site_visit ;;
  }

  dimension: is_flirt {
    hidden: yes
    sql: ${TABLE}.is_flirt ;;
  }

  dimension: visit_value {
    type: int
    hidden: yes
    sql: ${TABLE}.visit_value ;;
  }

  dimension: visit_frequency {
    type: number
    hidden: yes
    sql: ${TABLE}.visit_frequency ;;
  }

  dimension: visit_date {
    type: number
    hidden: yes
    sql: ${TABLE}.visit_date ;;
  }

  dimension: app_version {
    sql: ${TABLE}.app_version ;;
  }

  dimension: channel {
    sql: ${TABLE}.channel ;;
  }

  dimension: is_first_channel {
    type: yesno
    sql: ${TABLE}.first_channel ;;
  }

  dimension: is_first_desktop {
    type: yesno
    sql: ${TABLE}.first_desktop ;;
  }

  dimension: is_first_html5 {
    type: yesno
    sql: ${TABLE}.first_html5 ;;
  }

  dimension: is_first_html5_android {
    type: yesno
    sql: ${TABLE}.first_html5_android ;;
  }

  dimension: is_first_html5_ios {
    type: yesno
    sql: ${TABLE}.first_html5_ios ;;
  }

  dimension: is_first_ipad {
    type: yesno
    sql: ${TABLE}.first_ipad ;;
  }

  dimension: is_first_iphone {
    sql: ${TABLE}.first_iphone ;;
  }

  dimension: manufacturer {
    sql: ${TABLE}.manufacturer ;;
  }

  dimension: model {
    sql: ${TABLE}.model ;;
  }

  dimension: attraction_type1 {
    sql: ${TABLE}.attraction_type1 ;;
  }

  dimension: attraction_type2 {
    sql: ${TABLE}.attraction_type2 ;;
  }

  dimension: first_sub_type {
    type: number
    sql: ${TABLE}.first_sub_type ;;
  }

  dimension: last_sub_type {
    type: number
    sql: ${TABLE}.last_sub_type ;;
  }

  dimension: sub_cohort {
    type: number
    sql: ${TABLE}.sub_cohort ;;
  }

  dimension: used_guest_pass {
    type: yesno
    sql: ${TABLE}.used_guest_pass ;;
  }

  dimension: country_name {
    sql: ${TABLE}.country_name ;;
  }

  dimension: region {
    sql: ${TABLE}.region ;;
  }

  dimension: geo_source {
    sql: ${TABLE}.geo_source ;;
  }

  dimension_group: start {
    type: time
    timeframes: [time, date, week, month]
    sql: ${TABLE}.start_time ;;
  }

  dimension_group: local_time {
    type: time
    timeframes: [time, date, week, month]
    sql: ${TABLE}.local_time ;;
  }

  measure: count {
    type: count
    drill_fields: [count]
  }

  measure: count_ln {
    type: number
    drill_fields: [count]
    sql: ln(${count}) ;;
  }

  measure: first_visit_count {
    type: count
    filters: [is_first_site_visit: "True"]
    drill_fields: [count]
  }

  measure: expired_count {
    type: count
    filters: [has_expired: "True"]
    drill_fields: [count]
  }

  measure: percent_first_visit {
    type: number
    value_format: "0.00\%"
    drill_fields: [count]
    sql: 100.0 * ${first_visit_count} / ${count} ;;
  }
}
visit_new.view.lookml · 197 lines
source-preserved
- view: visit_new
  derived_table:
    sql: SELECT
  visit.*,
  visit_channel.app_version AS "app_version",
  visit_channel.channel AS "channel",
  visit_channel.first_channel  AS "first_channel",
  visit_channel.first_desktop  AS "first_desktop",
  visit_channel.first_html5 AS "first_html5",
  visit_channel.first_html5_android AS "first_html5_android",
  visit_channel.first_html5_ios AS "first_html5_ios",
  visit_channel.first_ipad AS "first_ipad",
  visit_channel.first_iphone AS "first_iphone",
  visit_channel.manufacturer AS "manufacturer",
  visit_channel.model AS "visit_channel.model",
  visit_general.attraction_type1 AS "attraction_type1",
  visit_general.attraction_type2 AS "attraction_type2",
  visit_general.cohort AS "cohort",
  visit_general.first_sub_type AS "first_sub_type",
  visit_general.last_sub_type AS "last_sub_type",
  visit_general.sub_cohort AS "sub_cohort",
  visit_general.used_guest_pass AS "used_guest_pass",
  visit_geo.country_name,
  visit_geo.region,
  visit_geo.geo_source
FROM sanitized_db.si_cs_visit_recent AS visit
LEFT JOIN sanitized_db.sanitized_visit_channel AS visit_channel ON visit.visit_id = visit_channel.visit_id
LEFT JOIN sanitized_db.sanitized_visit_general AS visit_general ON visit.visit_id = visit_general.visit_id
LEFT JOIN sanitized_db.sanitized_merged_geoip AS visit_geo ON visit.visit_id = visit_geo.visit_id
WHERE
  ((visit.start_time) >= (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ))) AND (visit.start_time) < (CONVERT_TIMEZONE('Europe/London', 'UTC', DATEADD(day,91, DATEADD(day,-90, DATE_TRUNC('day',CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE())) ) ))))
  fields:
  - dimension: visit_id
    type: int
    primary_key: true
    sql: ${TABLE}.visit_id
  - dimension: parent_visitor_id
    type: int
    sql: ${TABLE}.parent_visitor
  - dimension: first_request
    type: int
    hidden: true
    sql: ${TABLE}.first_request
  - dimension: last_request
    type: int
    sql: ${TABLE}.last_request
  - dimension: referral_url
    type: int
    hidden: true
    sql: ${TABLE}.referral_url
  - dimension: site_visited
    sql: ${TABLE}.site_visited
  - dimension: visit_index
    type: number
    sql: ${TABLE}.visit_index
  - dimension: is_first_visit
    type: yesno
    sql: ${TABLE}.is_first_visit
  - dimension: days_since_first_visit
    type: number
    sql: ${TABLE}.days_since_first_visit
  - dimension: days_since_prev_visit
    type: number
    sql: ${TABLE}.days_since_prev_visit
  - dimension: visit_duration
    type: number
    sql: ${TABLE}.visit_duration
  - dimension: num_requests
    type: number
    sql: ${TABLE}.num_requests
  - dimension: num_pages
    type: number
    sql: ${TABLE}.num_pages
  - dimension: unique_pages
    type: number
    sql: ${TABLE}.unique_pages
  - dimension: match_type
    sql: ${TABLE}.match_type
  - dimension: is_abce_visit
    hidden: true
    sql: ${TABLE}.is_abce_visit
  - dimension: is_abce_session
    hidden: true
    sql: ${TABLE}.is_abce_session
  - dimension: has_expired
    sql: ${TABLE}.has_expired
  - dimension: is_first_site_visit
    type: yesno
    sql: ${TABLE}.is_first_site_visit
  - dimension: is_flirt
    hidden: true
    sql: ${TABLE}.is_flirt
  - dimension: visit_value
    type: int
    hidden: true
    sql: ${TABLE}.visit_value
  - dimension: visit_frequency
    type: number
    hidden: true
    sql: ${TABLE}.visit_frequency
  - dimension: visit_date
    type: number
    hidden: true
    sql: ${TABLE}.visit_date
  - dimension: app_version
    sql: ${TABLE}.app_version
  - dimension: channel
    sql: ${TABLE}.channel
  - dimension: is_first_channel
    type: yesno
    sql: ${TABLE}.first_channel
  - dimension: is_first_desktop
    type: yesno
    sql: ${TABLE}.first_desktop
  - dimension: is_first_html5
    type: yesno
    sql: ${TABLE}.first_html5
  - dimension: is_first_html5_android
    type: yesno
    sql: ${TABLE}.first_html5_android
  - dimension: is_first_html5_ios
    type: yesno
    sql: ${TABLE}.first_html5_ios
  - dimension: is_first_ipad
    type: yesno
    sql: ${TABLE}.first_ipad
  - dimension: is_first_iphone
    sql: ${TABLE}.first_iphone
  - dimension: manufacturer
    sql: ${TABLE}.manufacturer
  - dimension: model
    sql: ${TABLE}.model
  - dimension: attraction_type1
    sql: ${TABLE}.attraction_type1
  - dimension: attraction_type2
    sql: ${TABLE}.attraction_type2
  - dimension: first_sub_type
    type: number
    sql: ${TABLE}.first_sub_type
  - dimension: last_sub_type
    type: number
    sql: ${TABLE}.last_sub_type
  - dimension: sub_cohort
    type: number
    sql: ${TABLE}.sub_cohort
  - dimension: used_guest_pass
    type: yesno
    sql: ${TABLE}.used_guest_pass
  - dimension: country_name
    sql: ${TABLE}.country_name
  - dimension: region
    sql: ${TABLE}.region
  - dimension: geo_source
    sql: ${TABLE}.geo_source
  - dimension_group: start
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.start_time
  - dimension_group: local_time
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.local_time
  - measure: count
    type: count
    drill_fields:
    - count
  - measure: count_ln
    type: number
    drill_fields:
    - count
    sql: ln(${count})
  - measure: first_visit_count
    type: count
    drill_fields:
    - count
    filters:
    - is_first_site_visit: True
  - measure: expired_count
    type: count
    drill_fields:
    - count
    filters:
    - has_expired: True
  - measure: percent_first_visit
    type: number
    value_format: '0.00\%'
    drill_fields:
    - count
    sql: 100.0 * ${first_visit_count} / ${count}

Contents

  • visit_new.sql
  • visit_new.sql
  • visit_new.view.lkml
  • visit_new.view.lookml