...
Group Activity Aggregates
Schema
group_activity_agg
Column | Type | Description |
---|---|---|
group_id | String | Group ID |
activity_type | String | Type of the activity - Course, CourseUnit, Quiz etc |
activity_id | String | Id of the activity - course_id, content_id etc |
agg | Map<String, Number> | Aggregate metrics for the activity |
agg_last_updated | Map<String, Timestamp> | When did the agg metrics last updated? |
group_activity_user_agg
...
Column
...
Type
...
Description
...
group_id
...
String
...
Group ID
...
activity_type
...
String
...
Type of the activity - Course, CourseUnit, Quiz etc
...
activity_id
...
String
...
Id of the activity - course_id, content_id etc
...
user_id
...
String
...
User Id
...
agg
...
Map<String, Number>
...
Aggregate metrics for the user and activity combination
...
agg_last_updated
...
Map<String, Timestamp>
...
APIs
Get group aggregates
Expand | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Request
Response
|
...
Expand | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Request
Response
|
Schema
Assumptions:
Group, activity and user tables exist and a mapping table exists for the group-activity-user relation
activity_user_agg
Column | Type | Description |
---|---|---|
activity_type | String | Type of the activity - Course, CourseUnit, Quiz etc |
activity_id | String | Id of the activity - course_id, content_id etc |
user_id | String | User Id |
context_id | String | Context in which the activity happened. Combination of type:value. For ex: CourseBatch → cb:do_123121 |
agg | Map<String, Number> | Aggregate metrics for the user and activity combination |
agg_last_updated | Map<String, Timestamp> | When did the agg metrics last updated? |
Partition Key - (activity_type, activity_id, group_id, user_id)
activity_agg
Column | Type | Description |
---|---|---|
activity_type | String | Type of the activity - Course, CourseUnit, Quiz etc |
activity_id | String | Id of the activity - course_id, content_id etc |
context_id | String | Context in which the activity happened. Combination of type:value. For ex: CourseBatch → cb:do_123121 |
agg | Map<String, Number> | Aggregate metrics for the activity |
agg_last_updated | Map<String, Timestamp> | When did the aggregate metrics last updated? |
Partition Key - (activity_type, activity_id, context_id)
Course Metrics
completedCount
completionPercentage
enrolledCount
<TBD>
Course User Metrics
Open Questions
Do we need activity_agg table which is a next level aggregation on activity_user_agg table?
Will there be an activity happening only in group context? For ex: course can be taken up outside group but aggregated within group. But there can be a quiz conducted within group context across multiple groups.