Skip to content

Commit 8b2c6b2

Browse files
committed
docs: update docs for eb3999a
1 parent 292ae52 commit 8b2c6b2

8 files changed

+213
-4
lines changed

catalog.json

+1-1
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
with
2+
video_events as (
3+
select
4+
emission_time,
5+
org,
6+
course_key,
7+
splitByString('/xblock/', object_id)[-1] as video_id,
8+
actor_id,
9+
verb_id,
10+
video_position,
11+
video_duration
12+
from `xapi`.`video_playback_events`
13+
),
14+
starts as (
15+
select *
16+
from video_events
17+
where verb_id = 'https://w3id.org/xapi/video/verbs/played'
18+
),
19+
ends as (
20+
select *
21+
from video_events
22+
where
23+
verb_id in (
24+
'http://adlnet.gov/expapi/verbs/completed',
25+
'https://w3id.org/xapi/video/verbs/seeked',
26+
'https://w3id.org/xapi/video/verbs/paused',
27+
'http://adlnet.gov/expapi/verbs/terminated'
28+
)
29+
),
30+
segments as (
31+
select
32+
starts.org as org,
33+
starts.course_key as course_key,
34+
starts.video_id as video_id,
35+
starts.actor_id,
36+
cast(starts.video_position as Int32) as start_position,
37+
cast(ends.video_position as Int32) as end_position,
38+
starts.emission_time as started_at,
39+
ends.emission_time as ended_at,
40+
ends.verb_id as end_type,
41+
starts.video_duration as video_duration
42+
from starts left
43+
asof join
44+
ends
45+
on (
46+
starts.org = ends.org
47+
and starts.course_key = ends.course_key
48+
and starts.video_id = ends.video_id
49+
and starts.actor_id = ends.actor_id
50+
and starts.emission_time < ends.emission_time
51+
)
52+
),
53+
enriched_segments as (
54+
select
55+
segments.org as org,
56+
segments.course_key as course_key,
57+
blocks.course_name as course_name,
58+
blocks.course_run as course_run,
59+
blocks.section_with_name as section_with_name,
60+
blocks.subsection_with_name as subsection_with_name,
61+
blocks.block_name as video_name,
62+
blocks.display_name_with_location as video_name_with_location,
63+
segments.actor_id as actor_id,
64+
segments.started_at as started_at,
65+
segments.start_position - (segments.start_position % 5) as start_position,
66+
segments.end_position - (segments.end_position % 5) as end_position,
67+
segments.video_duration as video_duration
68+
from segments
69+
join
70+
`xapi`.`dim_course_blocks_extended` blocks
71+
on (
72+
segments.course_key = blocks.course_key
73+
and segments.video_id = blocks.block_id
74+
)
75+
)
76+
77+
select
78+
org,
79+
course_key,
80+
course_name,
81+
course_run,
82+
section_with_name,
83+
subsection_with_name,
84+
video_name,
85+
video_name_with_location,
86+
actor_id,
87+
started_at,
88+
arrayJoin(range(start_position, end_position, 5)) as segment_start,
89+
video_duration,
90+
CONCAT(toString(segment_start), '-', toString(segment_start + 4)) as segment_range,
91+
start_position,
92+
username,
93+
name,
94+
email
95+
from enriched_segments
96+
left outer join
97+
`xapi`.`dim_user_pii` users on toUUID(actor_id) = users.external_user_id
98+
order by start_position

graph.gpickle

5.86 KB
Binary file not shown.

graph_summary.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"_invocation_id": "f76c6a3c-b94e-4985-8d38-bdf76dcac67e", "linked": {"0": {"name": "source.aspects.event_sink.user_profile", "type": "source", "succ": [16]}, "1": {"name": "source.aspects.event_sink.external_id", "type": "source", "succ": [16]}, "2": {"name": "source.aspects.event_sink.course_blocks", "type": "source", "succ": [33]}, "3": {"name": "source.aspects.event_sink.course_overviews", "type": "source", "succ": [31]}, "4": {"name": "source.aspects.xapi.xapi_events_all", "type": "source", "succ": [15]}, "5": {"name": "model.aspects.fact_problem_engagement", "type": "model"}, "6": {"name": "model.aspects.fact_problem_responses", "type": "model", "succ": [5, 11]}, "7": {"name": "model.aspects.int_problems_per_subsection", "type": "model", "succ": [5, 14]}, "8": {"name": "model.aspects.dim_user_pii", "type": "model", "succ": [5, 10, 14, 6, 21, 25, 35, 36, 37, 38, 41, 19, 45, 46]}, "9": {"name": "model.aspects.dim_course_blocks", "type": "model", "succ": [7, 12, 6, 20, 25, 23, 34, 35, 36]}, "10": {"name": "model.aspects.fact_learner_problem_summary", "type": "model", "succ": [51, 53, 54]}, "11": {"name": "model.aspects.int_problem_results", "type": "model", "succ": [10, 14, 50]}, "12": {"name": "model.aspects.int_problem_hints", "type": "model", "succ": [10]}, "13": {"name": "model.aspects.problem_events", "type": "model", "succ": [12, 6]}, "14": {"name": "model.aspects.fact_problem_responses_extended", "type": "model"}, "15": {"name": "model.aspects.xapi_events_all_parsed", "type": "model", "succ": [13, 22, 26, 27, 28, 32, 18, 30, 40, 44, 47]}, "16": {"name": "model.aspects.user_pii", "type": "model", "succ": [8]}, "17": {"name": "model.aspects.dim_at_risk_learners", "type": "model"}, "18": {"name": "model.aspects.navigation_events", "type": "model", "succ": [17, 35]}, "19": {"name": "model.aspects.fact_student_status", "type": "model", "succ": [17, 61]}, "20": {"name": "model.aspects.int_videos_per_subsection", "type": "model", "succ": [24]}, "21": {"name": "model.aspects.fact_video_plays", "type": "model", "succ": [24]}, "22": {"name": "model.aspects.video_playback_events", "type": "model", "succ": [21]}, "23": {"name": "model.aspects.dim_course_blocks_extended", "type": "model", "succ": [21]}, "24": {"name": "model.aspects.fact_video_engagement", "type": "model"}, "25": {"name": "model.aspects.fact_transcript_usage", "type": "model"}, "26": {"name": "model.aspects.video_transcript_events", "type": "model", "succ": [25]}, "27": {"name": "model.aspects.fact_instance_actors", "type": "model"}, "28": {"name": "model.aspects.fact_instance_events", "type": "model"}, "29": {"name": "model.aspects.fact_instance_enrollments", "type": "model", "succ": [55]}, "30": {"name": "model.aspects.enrollment_events", "type": "model", "succ": [29, 38, 39]}, "31": {"name": "model.aspects.course_names", "type": "model", "succ": [29, 9, 38, 41, 19, 45, 46]}, "32": {"name": "model.aspects.fact_instance_courses", "type": "model"}, "33": {"name": "model.aspects.course_block_names", "type": "model", "succ": [9, 41, 45]}, "34": {"name": "model.aspects.int_pages_per_subsection", "type": "model", "succ": [37]}, "35": {"name": "model.aspects.fact_navigation", "type": "model", "succ": [36, 37]}, "36": {"name": "model.aspects.fact_navigation_dropoff", "type": "model", "succ": [56]}, "37": {"name": "model.aspects.fact_navigation_completion", "type": "model"}, "38": {"name": "model.aspects.fact_enrollments", "type": "model", "succ": [57]}, "39": {"name": "model.aspects.fact_enrollment_status", "type": "model", "succ": [19, 58]}, "40": {"name": "model.aspects.completion_events", "type": "model", "succ": [41]}, "41": {"name": "model.aspects.fact_completions", "type": "model"}, "42": {"name": "model.aspects.fact_learner_course_status", "type": "model", "succ": [19, 60]}, "43": {"name": "model.aspects.fact_learner_course_grade", "type": "model", "succ": [19]}, "44": {"name": "model.aspects.grading_events", "type": "model", "succ": [42, 45, 43]}, "45": {"name": "model.aspects.fact_grades", "type": "model", "succ": [59]}, "46": {"name": "model.aspects.fact_forum_interactions", "type": "model"}, "47": {"name": "model.aspects.forum_events", "type": "model", "succ": [46]}, "48": {"name": "test.aspects.a_tag", "type": "test"}, "49": {"name": "test.aspects.get_problem_id", "type": "test"}, "50": {"name": "test.aspects.problem_results_uniqueness", "type": "test"}, "51": {"name": "test.aspects.learner_problem_summary_uniqueness", "type": "test"}, "52": {"name": "test.aspects.get_problem_id_with_ccx", "type": "test"}, "53": {"name": "test.aspects.not_null_fact_learner_problem_summary_success.76b52cb2da", "type": "test"}, "54": {"name": "test.aspects.not_null_fact_learner_problem_summary_attempts.817beed32b", "type": "test"}, "55": {"name": "test.aspects.accepted_values_fact_instance_enrollments_enrollment_status__registered__unregistered.305ffdf696", "type": "test"}, "56": {"name": "test.aspects.accepted_values_fact_navigation_dropoff_rollup_name__section__subsection.8afafb193f", "type": "test"}, "57": {"name": "test.aspects.accepted_values_fact_enrollments_enrollment_status__registered__unregistered.f8d10203f4", "type": "test"}, "58": {"name": "test.aspects.accepted_values_fact_enrollment_status_enrollment_status__registered__unregistered.893527c11f", "type": "test"}, "59": {"name": "test.aspects.accepted_values_fact_grades_grade_type__course__subsection__problem.712bd50c2f", "type": "test"}, "60": {"name": "test.aspects.accepted_values_fact_learner_course_status_approving_state__passed__failed.f9c0c1b85f", "type": "test"}, "61": {"name": "test.aspects.accepted_values_fact_student_status_enrollment_status__registered__unregistered.53cae8a0f3", "type": "test"}}}
1+
{"_invocation_id": "78852415-b299-40c0-9900-99280e8595fb", "linked": {"0": {"name": "source.aspects.event_sink.user_profile", "type": "source", "succ": [16]}, "1": {"name": "source.aspects.event_sink.external_id", "type": "source", "succ": [16]}, "2": {"name": "source.aspects.event_sink.course_blocks", "type": "source", "succ": [34]}, "3": {"name": "source.aspects.event_sink.course_overviews", "type": "source", "succ": [32]}, "4": {"name": "source.aspects.xapi.xapi_events_all", "type": "source", "succ": [15]}, "5": {"name": "model.aspects.fact_problem_engagement", "type": "model"}, "6": {"name": "model.aspects.fact_problem_responses", "type": "model", "succ": [5, 11]}, "7": {"name": "model.aspects.int_problems_per_subsection", "type": "model", "succ": [5, 14]}, "8": {"name": "model.aspects.dim_user_pii", "type": "model", "succ": [5, 10, 14, 6, 21, 24, 26, 36, 37, 38, 39, 42, 19, 46, 47]}, "9": {"name": "model.aspects.dim_course_blocks", "type": "model", "succ": [7, 12, 6, 20, 26, 23, 35, 36, 37]}, "10": {"name": "model.aspects.fact_learner_problem_summary", "type": "model", "succ": [52, 54, 55]}, "11": {"name": "model.aspects.int_problem_results", "type": "model", "succ": [10, 14, 51]}, "12": {"name": "model.aspects.int_problem_hints", "type": "model", "succ": [10]}, "13": {"name": "model.aspects.problem_events", "type": "model", "succ": [12, 6]}, "14": {"name": "model.aspects.fact_problem_responses_extended", "type": "model"}, "15": {"name": "model.aspects.xapi_events_all_parsed", "type": "model", "succ": [13, 22, 27, 28, 29, 33, 18, 31, 41, 45, 48]}, "16": {"name": "model.aspects.user_pii", "type": "model", "succ": [8]}, "17": {"name": "model.aspects.dim_at_risk_learners", "type": "model"}, "18": {"name": "model.aspects.navigation_events", "type": "model", "succ": [17, 36]}, "19": {"name": "model.aspects.fact_student_status", "type": "model", "succ": [17, 62]}, "20": {"name": "model.aspects.int_videos_per_subsection", "type": "model", "succ": [25]}, "21": {"name": "model.aspects.fact_watched_video_segments", "type": "model"}, "22": {"name": "model.aspects.video_playback_events", "type": "model", "succ": [21, 24]}, "23": {"name": "model.aspects.dim_course_blocks_extended", "type": "model", "succ": [21, 24]}, "24": {"name": "model.aspects.fact_video_plays", "type": "model", "succ": [25]}, "25": {"name": "model.aspects.fact_video_engagement", "type": "model"}, "26": {"name": "model.aspects.fact_transcript_usage", "type": "model"}, "27": {"name": "model.aspects.video_transcript_events", "type": "model", "succ": [26]}, "28": {"name": "model.aspects.fact_instance_actors", "type": "model"}, "29": {"name": "model.aspects.fact_instance_events", "type": "model"}, "30": {"name": "model.aspects.fact_instance_enrollments", "type": "model", "succ": [56]}, "31": {"name": "model.aspects.enrollment_events", "type": "model", "succ": [30, 39, 40]}, "32": {"name": "model.aspects.course_names", "type": "model", "succ": [30, 9, 39, 42, 19, 46, 47]}, "33": {"name": "model.aspects.fact_instance_courses", "type": "model"}, "34": {"name": "model.aspects.course_block_names", "type": "model", "succ": [9, 42, 46]}, "35": {"name": "model.aspects.int_pages_per_subsection", "type": "model", "succ": [38]}, "36": {"name": "model.aspects.fact_navigation", "type": "model", "succ": [37, 38]}, "37": {"name": "model.aspects.fact_navigation_dropoff", "type": "model", "succ": [57]}, "38": {"name": "model.aspects.fact_navigation_completion", "type": "model"}, "39": {"name": "model.aspects.fact_enrollments", "type": "model", "succ": [58]}, "40": {"name": "model.aspects.fact_enrollment_status", "type": "model", "succ": [19, 59]}, "41": {"name": "model.aspects.completion_events", "type": "model", "succ": [42]}, "42": {"name": "model.aspects.fact_completions", "type": "model"}, "43": {"name": "model.aspects.fact_learner_course_status", "type": "model", "succ": [19, 61]}, "44": {"name": "model.aspects.fact_learner_course_grade", "type": "model", "succ": [19]}, "45": {"name": "model.aspects.grading_events", "type": "model", "succ": [43, 46, 44]}, "46": {"name": "model.aspects.fact_grades", "type": "model", "succ": [60]}, "47": {"name": "model.aspects.fact_forum_interactions", "type": "model"}, "48": {"name": "model.aspects.forum_events", "type": "model", "succ": [47]}, "49": {"name": "test.aspects.a_tag", "type": "test"}, "50": {"name": "test.aspects.get_problem_id", "type": "test"}, "51": {"name": "test.aspects.problem_results_uniqueness", "type": "test"}, "52": {"name": "test.aspects.learner_problem_summary_uniqueness", "type": "test"}, "53": {"name": "test.aspects.get_problem_id_with_ccx", "type": "test"}, "54": {"name": "test.aspects.not_null_fact_learner_problem_summary_success.76b52cb2da", "type": "test"}, "55": {"name": "test.aspects.not_null_fact_learner_problem_summary_attempts.817beed32b", "type": "test"}, "56": {"name": "test.aspects.accepted_values_fact_instance_enrollments_enrollment_status__registered__unregistered.305ffdf696", "type": "test"}, "57": {"name": "test.aspects.accepted_values_fact_navigation_dropoff_rollup_name__section__subsection.8afafb193f", "type": "test"}, "58": {"name": "test.aspects.accepted_values_fact_enrollments_enrollment_status__registered__unregistered.f8d10203f4", "type": "test"}, "59": {"name": "test.aspects.accepted_values_fact_enrollment_status_enrollment_status__registered__unregistered.893527c11f", "type": "test"}, "60": {"name": "test.aspects.accepted_values_fact_grades_grade_type__course__subsection__problem.712bd50c2f", "type": "test"}, "61": {"name": "test.aspects.accepted_values_fact_learner_course_status_approving_state__passed__failed.f9c0c1b85f", "type": "test"}, "62": {"name": "test.aspects.accepted_values_fact_student_status_enrollment_status__registered__unregistered.53cae8a0f3", "type": "test"}}}

manifest.json

+1-1
Large diffs are not rendered by default.

partial_parse.msgpack

8.93 KB
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
2+
3+
create view `xapi`.`fact_watched_video_segments`
4+
5+
6+
7+
as (
8+
with
9+
video_events as (
10+
select
11+
emission_time,
12+
org,
13+
course_key,
14+
splitByString('/xblock/', object_id)[-1] as video_id,
15+
actor_id,
16+
verb_id,
17+
video_position,
18+
video_duration
19+
from `xapi`.`video_playback_events`
20+
),
21+
starts as (
22+
select *
23+
from video_events
24+
where verb_id = 'https://w3id.org/xapi/video/verbs/played'
25+
),
26+
ends as (
27+
select *
28+
from video_events
29+
where
30+
verb_id in (
31+
'http://adlnet.gov/expapi/verbs/completed',
32+
'https://w3id.org/xapi/video/verbs/seeked',
33+
'https://w3id.org/xapi/video/verbs/paused',
34+
'http://adlnet.gov/expapi/verbs/terminated'
35+
)
36+
),
37+
segments as (
38+
select
39+
starts.org as org,
40+
starts.course_key as course_key,
41+
starts.video_id as video_id,
42+
starts.actor_id,
43+
cast(starts.video_position as Int32) as start_position,
44+
cast(ends.video_position as Int32) as end_position,
45+
starts.emission_time as started_at,
46+
ends.emission_time as ended_at,
47+
ends.verb_id as end_type,
48+
starts.video_duration as video_duration
49+
from starts left
50+
asof join
51+
ends
52+
on (
53+
starts.org = ends.org
54+
and starts.course_key = ends.course_key
55+
and starts.video_id = ends.video_id
56+
and starts.actor_id = ends.actor_id
57+
and starts.emission_time < ends.emission_time
58+
)
59+
),
60+
enriched_segments as (
61+
select
62+
segments.org as org,
63+
segments.course_key as course_key,
64+
blocks.course_name as course_name,
65+
blocks.course_run as course_run,
66+
blocks.section_with_name as section_with_name,
67+
blocks.subsection_with_name as subsection_with_name,
68+
blocks.block_name as video_name,
69+
blocks.display_name_with_location as video_name_with_location,
70+
segments.actor_id as actor_id,
71+
segments.started_at as started_at,
72+
segments.start_position - (segments.start_position % 5) as start_position,
73+
segments.end_position - (segments.end_position % 5) as end_position,
74+
segments.video_duration as video_duration
75+
from segments
76+
join
77+
`xapi`.`dim_course_blocks_extended` blocks
78+
on (
79+
segments.course_key = blocks.course_key
80+
and segments.video_id = blocks.block_id
81+
)
82+
)
83+
84+
select
85+
org,
86+
course_key,
87+
course_name,
88+
course_run,
89+
section_with_name,
90+
subsection_with_name,
91+
video_name,
92+
video_name_with_location,
93+
actor_id,
94+
started_at,
95+
arrayJoin(range(start_position, end_position, 5)) as segment_start,
96+
video_duration,
97+
CONCAT(toString(segment_start), '-', toString(segment_start + 4)) as segment_range,
98+
start_position,
99+
username,
100+
name,
101+
email
102+
from enriched_segments
103+
left outer join
104+
`xapi`.`dim_user_pii` users on toUUID(actor_id) = users.external_user_id
105+
order by start_position
106+
)
107+
108+
109+
-- end_of_sql
110+
111+

run_results.json

+1-1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)