Data Pipeline Case Studies
Normalize Input
Normalize small input labels before counting useful records.
normalization
Pipeline code often trims or lowers values before comparing them.
counting
The final count stays scalar so replay can show the pipeline result clearly.
Normalize Input
normalize_input.lua
Replay: real traced execution (multi-file project)
local min_length = 4
local kept = 0
local labels = ""
for _, raw in ipairs({" Ada ", "Lua", "Trace"}) do
local name = raw:lower():gsub("^%s+", ""):gsub("%s+$", "")
if #name >= min_length then
kept = kept + 1
labels = labels .. name .. ";"
end
end
print("min_length=" .. min_length)
print("kept=" .. kept)
print("labels=" .. labels)
local min_length = 3
local kept = 0
local labels = ""
for _, raw in ipairs({" Ada ", "Lua", "Trace"}) do
local name = raw:lower():gsub("^%s+", ""):gsub("%s+$", "")
if #name >= min_length then
kept = kept + 1
labels = labels .. name .. ";"
end
end
print("min_length=" .. min_length)
print("kept=" .. kept)
print("labels=" .. labels)
local min_length = 5
local kept = 0
local labels = ""
for _, raw in ipairs({" Ada ", "Lua", "Trace"}) do
local name = raw:lower():gsub("^%s+", ""):gsub("%s+$", "")
if #name >= min_length then
kept = kept + 1
labels = labels .. name .. ";"
end
end
print("min_length=" .. min_length)
print("kept=" .. kept)
print("labels=" .. labels)
min_length ← 4, kept ← 0, labels ← (empty)
1local min_length→ 4 = 4 --@min_length=3, 52local kept→ 0 = 03local labels→ (empty) = ""name ← ada
pass 1 of 35for _1, raw Ada in ipairs({" Ada ", "Lua", "Trace"}) do6 local name→ ada = raw Ada :lower():gsub("^%s+", ""):gsub("%s+$", "")7 if #name >= min_length thenAll 3 passes — pass 1 is the card above pass _rawmin_lengthnamekeptlabels1 1 Ada — ada — — 2 2 Lua — lua — — 3 3 Trace 4 trace 0 → 1 (empty) → trace; kept ← 1, labels ← trace;
6local name = raw:lower():gsub("^%s+", ""):gsub("%s+$", "")7if #nametrace >= min_length4 then8 kept→ 1 = kept + 19 labels→ trace; = labels .. nametrace .. ";"10endprint("min_length=" .. min_length)
13print("min_length=" .. min_length4)14print("kept=" .. kept1)15print("labels=" .. labelstrace;)outputmin_length=4 kept=1 labels=trace;
min_length ← 3, kept ← 0, labels ← (empty)
1local min_length→ 3 = 32local kept→ 0 = 03local labels→ (empty) = ""name ← ada
pass 1 of 35for _1, raw Ada in ipairs({" Ada ", "Lua", "Trace"}) do6 local name→ ada = raw Ada :lower():gsub("^%s+", ""):gsub("%s+$", "")7 if #name >= min_length thenAll 3 passes — pass 1 is the card above pass _rawname1 1 Ada ada 2 2 Lua lua 3 3 Trace trace kept ← 1, labels ← ada;
pass 1 of 36local name = raw:lower():gsub("^%s+", ""):gsub("%s+$", "")7if #nameada >= min_length3 then8 kept→ 1 = kept + 19 labels→ ada; = labels .. nameada .. ";"10endAll 3 passes — pass 1 is the card above pass namekeptlabels1 ada 0 → 1 (empty) → ada; 2 lua 1 → 2 ada; → ada;lua; 3 trace 2 → 3 ada;lua; → ada;lua;trace; print("min_length=" .. min_length)
13print("min_length=" .. min_length3)14print("kept=" .. kept3)15print("labels=" .. labelsada;lua;trace;)outputmin_length=3 kept=3 labels=ada;lua;trace;
min_length ← 5, kept ← 0, labels ← (empty)
1local min_length→ 5 = 52local kept→ 0 = 03local labels→ (empty) = ""name ← ada
pass 1 of 35for _1, raw Ada in ipairs({" Ada ", "Lua", "Trace"}) do6 local name→ ada = raw Ada :lower():gsub("^%s+", ""):gsub("%s+$", "")7 if #name >= min_length thenAll 3 passes — pass 1 is the card above pass _rawmin_lengthnamekeptlabels1 1 Ada — ada — — 2 2 Lua — lua — — 3 3 Trace 5 trace 0 → 1 (empty) → trace; kept ← 1, labels ← trace;
6local name = raw:lower():gsub("^%s+", ""):gsub("%s+$", "")7if #nametrace >= min_length5 then8 kept→ 1 = kept + 19 labels→ trace; = labels .. nametrace .. ";"10endprint("min_length=" .. min_length)
13print("min_length=" .. min_length5)14print("kept=" .. kept1)15print("labels=" .. labelstrace;)outputmin_length=5 kept=1 labels=trace;