Skip to content

Commit

Permalink
feat: move second-tier MVs into dbt project
Browse files Browse the repository at this point in the history
  • Loading branch information
SoryRawyer committed Nov 16, 2023
1 parent a6321a8 commit 156d734
Show file tree
Hide file tree
Showing 13 changed files with 123 additions and 8 deletions.
18 changes: 18 additions & 0 deletions models/completion/completion_events.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{{ config(
materialized='materialized_view',
engine='MergeTree()',
primary_key='(org, course_key, verb_id)',
order_by='(org, course_key, verb_id, emission_time, actor_id, object_id, event_id)'
) }}

SELECT
event_id,
CAST(emission_time, 'DateTime') AS emission_time,
actor_id,
object_id,
splitByString('/', course_id)[-1] AS course_key,
org,
verb_id,
JSON_VALUE(event_str, '$.result.extensions."https://w3id.org/xapi/cmi5/result/extensions/progress"') AS progress_percent
FROM {{ source('xapi', 'xapi_events_all_parsed') }}
WHERE verb_id = 'http://adlnet.gov/expapi/verbs/progressed'
4 changes: 2 additions & 2 deletions models/completion/fact_completions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ with completions as (
splitByString('/course/', object_id)[-1],
splitByString('/xblock/', object_id)[-1]
) as entity_id,
progress_percent/100 as scaled_progress
cast(progress_percent as Float)/100 as scaled_progress
from
{{ source('xapi', 'completions_events') }}
{{ ref('completion_events') }}
)

select
Expand Down
21 changes: 21 additions & 0 deletions models/enrollment/enrollment_events.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{{ config(
materialized='materialized_view',
engine='MergeTree()',
primary_key='(org, course_key)',
order_by='(org, course_key, emission_time, actor_id, enrollment_mode, event_id)'
) }}

SELECT
event_id,
cast(emission_time as DateTime) as emission_time,
actor_id,
object_id,
splitByString('/', course_id)[-1] AS course_key,
org,
verb_id,
JSON_VALUE(event_str, '$.object.definition.extensions."https://w3id.org/xapi/acrossx/extensions/type"') AS enrollment_mode
FROM {{ source('xapi', 'xapi_events_all_parsed') }}
WHERE verb_id IN (
'http://adlnet.gov/expapi/verbs/registered',
'http://id.tincanapi.com/verb/unregistered'
)
2 changes: 1 addition & 1 deletion models/enrollment/fact_enrollments.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ with enrollments as (
enrollment_mode,
splitByString('/', verb_id)[-1] as enrollment_status
from
{{ source('xapi', 'enrollment_events') }}
{{ ref('enrollment_events') }}
)

select
Expand Down
2 changes: 1 addition & 1 deletion models/forum/fact_forum_interactions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ select
forum.actor_id as actor_id,
forum.verb_id as verb_id
from
{{ source('xapi', 'forum_events') }} forum
{{ ref('forum_events') }} forum
join {{ source('event_sink', 'course_names') }} courses
on (forum.course_key = courses.course_key)
17 changes: 17 additions & 0 deletions models/forum/forum_events.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{{ config(
materialized='materialized_view',
engine='MergeTree()',
primary_key='(org, course_key, verb_id)',
order_by='(org, course_key, verb_id, emission_time, actor_id, object_id, event_id)'
) }}

SELECT
event_id,
CAST(emission_time, 'DateTime') AS emission_time,
org,
splitByString('/', course_id)[-1] AS course_key,
object_id,
actor_id,
verb_id
FROM {{ source('xapi', 'xapi_events_all_parsed') }}
WHERE JSON_VALUE(event_str, '$.object.definition.type') = 'http://id.tincanapi.com/activitytype/discussion'
2 changes: 1 addition & 1 deletion models/grading/fact_grades.sql
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ with grades as (
actor_id,
scaled_score
from
{{ source('xapi', 'grading_events') }}
{{ ref('grading_events') }}
)

select
Expand Down
19 changes: 19 additions & 0 deletions models/grading/grading_events.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{{ config(
materialized='materialized_view',
engine='MergeTree()',
primary_key='(org, course_key, verb_id)',
order_by='(org, course_key, verb_id, emission_time, actor_id, object_id, scaled_score, event_id)'
) }}


SELECT
event_id,
CAST(emission_time, 'DateTime') AS emission_time,
actor_id,
object_id,
splitByString('/', course_id)[-1] AS course_key,
org,
verb_id,
JSON_VALUE(event_str, '$.result.score.scaled') AS scaled_score
FROM {{ source('xapi', 'xapi_events_all_parsed') }}
WHERE verb_id IN ('http://id.tincanapi.com/verb/earned', 'https://w3id.org/xapi/acrossx/verbs/evaluated')
2 changes: 1 addition & 1 deletion models/problems/fact_problem_responses.sql
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ with responses as (
success,
attempts
from
{{ source('xapi', 'problem_events') }}
{{ ref('problem_events') }}
where
verb_id = 'https://w3id.org/xapi/acrossx/verbs/evaluated'
)
Expand Down
2 changes: 1 addition & 1 deletion models/problems/int_problem_hints.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ with hints as (
else 'N/A'
end as help_type
from
{{ source('xapi', 'problem_events') }}
{{ ref('problem_events') }}
where
verb_id = 'http://adlnet.gov/expapi/verbs/asked'
)
Expand Down
22 changes: 22 additions & 0 deletions models/problems/problem_events.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{{ config(
materialized='materialized_view',
engine='MergeTree()',
primary_key='(org, course_key, verb_id)',
order_by='(org, course_key, verb_id, emission_time, actor_id, object_id, responses, success, event_id)'
) }}

SELECT
event_id,
CAST(emission_time, 'DateTime') AS emission_time,
actor_id,
object_id,
splitByString('/', course_id)[-1] AS course_key,
org,
verb_id,
replaceAll(replaceAll(JSON_VALUE(event_str, '$.result.response'), '\'', '\\\''), '"', '\'') AS responses,
JSON_VALUE(event_str, '$.result.score.scaled') AS scaled_score,
if(verb_id = 'https://w3id.org/xapi/acrossx/verbs/evaluated', CAST(JSON_VALUE(event_str, '$.result.success'), 'Bool'), false) AS success,
JSON_VALUE(event_str, '$.object.definition.interactionType') AS interaction_type,
if(verb_id = 'https://w3id.org/xapi/acrossx/verbs/evaluated', CAST(JSON_VALUE(event_str, '$.object.definition.extensions."http://id.tincanapi.com/extension/attempt-id"'), 'Int16'), 0) AS attempts
FROM {{ source('xapi', 'xapi_events_all_parsed') }}
WHERE verb_id IN ('https://w3id.org/xapi/acrossx/verbs/evaluated', 'http://adlnet.gov/expapi/verbs/passed', 'http://adlnet.gov/expapi/verbs/asked')
2 changes: 1 addition & 1 deletion models/video/fact_video_plays.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ with plays as (
splitByString('/xblock/', object_id)[-1] as video_id,
actor_id
from
{{ source('xapi', 'video_playback_events') }}
{{ ref('video_playback_events') }}
where
verb_id = 'https://w3id.org/xapi/video/verbs/played'
)
Expand Down
18 changes: 18 additions & 0 deletions models/video/video_playback_events.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{{ config(
materialized='materialized_view',
engine='MergeTree()',
primary_key='(org, course_key, verb_id)',
order_by='(org, course_key, verb_id, emission_time, actor_id, video_position, event_id)'
) }}

SELECT
event_id,
CAST(emission_time, 'DateTime') AS emission_time,
actor_id,
object_id,
splitByString('/', course_id)[-1] AS course_key,
org,
verb_id,
ceil(CAST(coalesce(nullIf(JSON_VALUE(event_str, '$.result.extensions."https://w3id.org/xapi/video/extensions/time"'), ''), nullIf(JSON_VALUE(event_str, '$.result.extensions."https://w3id.org/xapi/video/extensions/time-from"'), ''), '0.0'), 'Decimal32(2)')) AS video_position
FROM {{ source('xapi', 'xapi_events_all_parsed') }}
WHERE (verb_id IN ('http://adlnet.gov/expapi/verbs/completed', 'http://adlnet.gov/expapi/verbs/initialized', 'http://adlnet.gov/expapi/verbs/terminated', 'https://w3id.org/xapi/video/verbs/paused', 'https://w3id.org/xapi/video/verbs/played', 'https://w3id.org/xapi/video/verbs/seeked')) AND (object_id LIKE '%video+block%')

0 comments on commit 156d734

Please sign in to comment.