Integration
Migrating student records, enrollment, and academic history from Ellucian Banner to Anthology's student information system via ETL pipeline.
This migration moves core student data from Ellucian Banner's Oracle-based SIS to Anthology's student information system. It extracts student demographics, enrollment records, academic history, and program registrations through a staged ETL pipeline that handles Banner's complex STVTERM, STVSUBJ, and STVDEPT lookup tables.
The integration is particularly challenging because Banner's non-standardized schema varies significantly between institutions, requiring custom mapping logic for every table. Unlike modern API-first platforms, Banner relies on direct Oracle connections or flat-file exports, and the absence of a unified change-data-capture mechanism means the team must build custom extraction routines to handle incremental loads.
A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.
-- Banner ETL extraction query for Anthology Student migration -- Source: Ellucian Banner 9 Oracle schema SELECT spriden.spriden_pidm AS "source_pidm", spriden.spriden_id AS "banner_id", spriden.spriden_last_name AS "family_name", spriden.spriden_first_name AS "given_name", spriden.spriden_birth_date AS "date_of_birth", sgbstdn.sgbstdn_stsp_key AS "enrollment_status", sgbstdn.sgbstdn_term_code_eff AS "effective_term", sorlcur.sorlcur_program AS "academic_program_code", shrgrde.shritrm_term_code AS "course_term", stvterm.stvterm_desc AS "term_description" FROM spriden JOIN sgbstdn ON sgbstdn.sgbstdn_pidm = spriden.spriden_pidm JOIN sorlcur ON sorlcur.sorlcur_pidm = spriden.spriden_pidm AND sorlcur.sorlcur_seq_no = ( SELECT MAX(s.sorlcur_seq_no) FROM sorlcur s WHERE s.sorlcur_pidm = sorlcur.sorlcur_pidm ) JOIN shrgrde ON shrgrde.shritrm_pidm = spriden.spriden_pidm JOIN stvterm ON stvterm.stvterm_code = shrgrde.shritrm_term_code WHERE spriden.spriden_ntyp_code = 'PRIMARY' AND sgbstdn.sgbstdn_term_code_eff <= '202430';
| Banner Source Field | Banner Table | Anthology Target Field | Notes |
|---|---|---|---|
spriden_pidm | SPRIDEN | People.externalId | Unique surrogate key |
spriden_id | SPRIDEN | People.studentId | Institutional ID number |
spriden_last_name | SPRIDEN | People.familyName | Direct mapping |
spriden_birth_date | SPRIDEN | People.birthDate | ISO 8601 format |
sgbstdn_stsp_key | SGBSTDN | Enrollment.status | Active/Withdrawn codes |
sorlcur_program | SORLCUR | AcademicRecord.programCode | Curriculum code |
shrgrde.shritrm_term_code | SHRGRDE | CourseEnrollment.termCode | Term identifier |
How we'd take this from discovery to a production-safe cutover — the phases, the canonical mapping, and the edge cases that bite.
This integration migrates core student data—demographics, enrollment, and academic history—from Ellucian Banner's Oracle schema into Anthology Student via a scheduled ETL pipeline. The pipeline runs nightly extracts from Banner's source tables, transforms records to match Anthology's data model, and loads via Anthology's API endpoints.
| Banner Entity | Banner Field | Anthology Entity | Anthology Field | Transform Rule |
|---|---|---|---|---|
| Person | SPRIDEN.SPRIDEN_PIDM |
Student | id |
Lookup crosswalk table; map to Anthology GUID |
| Person | SPRIDEN.SPRIDEN_SSN |
Student | identifier.ssn |
Mask to last-4; apply if SSN not pre-hashed in Anthology |
| Enrollment | SOREMAL.SOREMAL_TERM_CODE |
Enrollment | academicPeriod.id |
Join to STVTERM; map to periodCode |
| Enrollment | SOREMAL.SOREMAL_CRN |
Enrollment | courseSection.reference |
Combine with term for unique section ID |
| Enrollment | SOREMAL.SOREMAL_METH |
Enrollment | enrollmentStatus |
Map codes: 'E'=enrolled, 'D'=dropped, 'W'=withdrawn |
| Academic History | SHADEGR.SHADEGR_GRDE_CODE_FINAL |
Grade | finalGrade.value |
Reference grading scale lookup; handle incomplete/missing |
| Academic History | SHADEGR.SHADEGR_GPA |
Transcript | cumulativeGpa |
Recalculate from source grades if not stored in Anthology |
Cutover must be reversible until Anthology is fully validated as the system of record. Before go-live, export a point-in-time snapshot of Banner's SOREMAL and SHADEGR as an immutable backup table (e.g., BANNER_BACKUP_YYYYMMDD). Establish a rollback script that restores enrollment and grade records from this snapshot if the Anthology load fails or produces unacceptable error rates (>0.1% record rejection). During the 72-hour stabilization window, reconcile daily enrollment counts between Banner backup and Anthology target; flag any discrepancies for immediate remediation. Only decommission Banner read-access and promote Anthology to authoritative source after two consecutive clean reconciliation cycles pass.
Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.