Data Import Checks
Column Names
Compare Expected Fields
Imported data should expose the fields that downstream code expects.
Program
Play the script to choose the imported third column and see whether the schema check passes.
column_names.R
Replay: real traced execution (multi-file project)
expected <- c("id", "score", "group")
actual <- c("id", "score", "grp")
rename_choice <- 2
replacement <- c("team", "group", "group_id")[rename_choice]
actual[3] <- replacement
missing <- setdiff(expected, actual)
extra <- setdiff(actual, expected)
label <- paste(length(missing), length(extra), sep = ":")
cat(label, "\n", sep = "")
expected <- c("id", "score", "group")
actual <- c("id", "score", "grp")
rename_choice <- 1
replacement <- c("team", "group", "group_id")[rename_choice]
actual[3] <- replacement
missing <- setdiff(expected, actual)
extra <- setdiff(actual, expected)
label <- paste(length(missing), length(extra), sep = ":")
cat(label, "\n", sep = "")
expected <- c("id", "score", "group")
actual <- c("id", "score", "grp")
rename_choice <- 3
replacement <- c("team", "group", "group_id")[rename_choice]
actual[3] <- replacement
missing <- setdiff(expected, actual)
extra <- setdiff(actual, expected)
label <- paste(length(missing), length(extra), sep = ":")
cat(label, "\n", sep = "")
expected ← id, score, group
1expected <- c("id", "score", "group")2actual <- c("id", "score", "grp")values this stepid, score, groupexpectedactual ← id, score, grp
1expected <- c("id", "score", "group")2actual <- c("id", "score", "grp")3rename_choice <- 2values this stepid, score, grpactualrename_choice ← 2
2actual <- c("id", "score", "grp")3rename_choice <- 24replacement <- c("team", "group", "group_id")[rename_choice]values this step2rename_choicereplacement ← group
3rename_choice <- 24replacement <- c("team", "group", "group_id")[rename_choice]5actual[3] <- replacementvalues this stepgroupreplacement2rename_choiceactual ← id, score, group
4replacement <- c("team", "group", "group_id")[rename_choice]5actual[3] <- replacement6missing <- setdiff(expected, actual)values this stepid, score, groupactualgroupreplacementmissing ← none
5actual[3] <- replacement6missing <- setdiff(expected, actual)7extra <- setdiff(actual, expected)values this stepnonemissingid, score, groupexpectedid, score, groupactualextra ← none
6missing <- setdiff(expected, actual)7extra <- setdiff(actual, expected)8label <- paste(length(missing), length(extra), sep = ":")values this stepnoneextraid, score, groupactualid, score, groupexpectedlabel ← 0:0
7extra <- setdiff(actual, expected)8label <- paste(length(missing), length(extra), sep = ":")9cat(label, "\n", sep = "")values this step0:0label0 fieldsmissing0 fieldsextracat(label, " ", sep = "")
8label <- paste(length(missing), length(extra), sep = ":")9cat(label, "\n", sep = "")output0:0values this step0:0label
expected ← id, score, group
1expected <- c("id", "score", "group")2actual <- c("id", "score", "grp")values this stepid, score, groupexpectedactual ← id, score, grp
1expected <- c("id", "score", "group")2actual <- c("id", "score", "grp")3rename_choice <- 1values this stepid, score, grpactualrename_choice ← 1
2actual <- c("id", "score", "grp")3rename_choice <- 14replacement <- c("team", "group", "group_id")[rename_choice]values this step1rename_choicereplacement ← team
3rename_choice <- 14replacement <- c("team", "group", "group_id")[rename_choice]5actual[3] <- replacementvalues this stepteamreplacement1rename_choiceactual ← id, score, team
4replacement <- c("team", "group", "group_id")[rename_choice]5actual[3] <- replacement6missing <- setdiff(expected, actual)values this stepid, score, teamactualteamreplacementmissing ← group
5actual[3] <- replacement6missing <- setdiff(expected, actual)7extra <- setdiff(actual, expected)values this stepgroupmissingid, score, groupexpectedid, score, teamactualextra ← team
6missing <- setdiff(expected, actual)7extra <- setdiff(actual, expected)8label <- paste(length(missing), length(extra), sep = ":")values this stepteamextraid, score, teamactualid, score, groupexpectedlabel ← 1:1
7extra <- setdiff(actual, expected)8label <- paste(length(missing), length(extra), sep = ":")9cat(label, "\n", sep = "")values this step1:1label1 fieldmissing1 fieldextracat(label, " ", sep = "")
8label <- paste(length(missing), length(extra), sep = ":")9cat(label, "\n", sep = "")output1:1values this step1:1label
expected ← id, score, group
1expected <- c("id", "score", "group")2actual <- c("id", "score", "grp")values this stepid, score, groupexpectedactual ← id, score, grp
1expected <- c("id", "score", "group")2actual <- c("id", "score", "grp")3rename_choice <- 3values this stepid, score, grpactualrename_choice ← 3
2actual <- c("id", "score", "grp")3rename_choice <- 34replacement <- c("team", "group", "group_id")[rename_choice]values this step3rename_choicereplacement ← group_id
3rename_choice <- 34replacement <- c("team", "group", "group_id")[rename_choice]5actual[3] <- replacementvalues this stepgroup_idreplacement3rename_choiceactual ← id, score, group_id
4replacement <- c("team", "group", "group_id")[rename_choice]5actual[3] <- replacement6missing <- setdiff(expected, actual)values this stepid, score, group_idactualgroup_idreplacementmissing ← group
5actual[3] <- replacement6missing <- setdiff(expected, actual)7extra <- setdiff(actual, expected)values this stepgroupmissingid, score, groupexpectedid, score, group_idactualextra ← group_id
6missing <- setdiff(expected, actual)7extra <- setdiff(actual, expected)8label <- paste(length(missing), length(extra), sep = ":")values this stepgroup_idextraid, score, group_idactualid, score, groupexpectedlabel ← 1:1
7extra <- setdiff(actual, expected)8label <- paste(length(missing), length(extra), sep = ":")9cat(label, "\n", sep = "")values this step1:1label1 fieldmissing1 fieldextracat(label, " ", sep = "")
8label <- paste(length(missing), length(extra), sep = ":")9cat(label, "\n", sep = "")output1:1values this step1:1label
expected fields
A schema check starts from the columns later code requires.
missing fields
`setdiff(expected, actual)` finds required columns that did not arrive.
extra fields
`setdiff(actual, expected)` finds unexpected columns to review.