Import and Export Concepts
Stage Rows
Load Text Before Tables
An import workflow can stage raw text lines, then transform accepted rows into a typed table.
Program
Play the script to choose the minimum quantity accepted from staged comma-separated lines.
stage_csv_lines.sql
Replay: real traced execution (multi-file project)
CREATE TABLE raw_lines (line TEXT);
INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');
CREATE TABLE inventory (name TEXT, qty INTEGER);
WITH params(min_qty) AS (VALUES (2)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);
SELECT name, qty FROM inventory ORDER BY name;
CREATE TABLE raw_lines (line TEXT);
INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');
CREATE TABLE inventory (name TEXT, qty INTEGER);
WITH params(min_qty) AS (VALUES (1)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);
SELECT name, qty FROM inventory ORDER BY name;
CREATE TABLE raw_lines (line TEXT);
INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');
CREATE TABLE inventory (name TEXT, qty INTEGER);
WITH params(min_qty) AS (VALUES (4)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);
SELECT name, qty FROM inventory ORDER BY name;
tables ← 1 row
1CREATE TABLE raw_lines (line TEXT);2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');values this step1 rowtablesraw_lines ← 3 rows
1CREATE TABLE raw_lines (line TEXT);2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');3CREATE TABLE inventory (name TEXT, qty INTEGER);values this step3 rowsraw_linestables ← 2 rows
2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');3CREATE TABLE inventory (name TEXT, qty INTEGER);4WITH params(min_qty) AS (VALUES (2)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);values this step2 rowstablesinventory ← 2 rows
3CREATE TABLE inventory (name TEXT, qty INTEGER);4WITH params(min_qty) AS (VALUES (2)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);5SELECT name, qty FROM inventory ORDER BY name;values this step2 rowsinventoryresult ← 2 rows
4WITH params(min_qty) AS (VALUES (2)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);5SELECT name, qty FROM inventory ORDER BY name;values this step2 rowsresult
tables ← 1 row
1CREATE TABLE raw_lines (line TEXT);2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');values this step1 rowtablesraw_lines ← 3 rows
1CREATE TABLE raw_lines (line TEXT);2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');3CREATE TABLE inventory (name TEXT, qty INTEGER);values this step3 rowsraw_linestables ← 2 rows
2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');3CREATE TABLE inventory (name TEXT, qty INTEGER);4WITH params(min_qty) AS (VALUES (1)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);values this step2 rowstablesinventory ← 3 rows
3CREATE TABLE inventory (name TEXT, qty INTEGER);4WITH params(min_qty) AS (VALUES (1)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);5SELECT name, qty FROM inventory ORDER BY name;values this step3 rowsinventoryresult ← 3 rows
4WITH params(min_qty) AS (VALUES (1)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);5SELECT name, qty FROM inventory ORDER BY name;values this step3 rowsresult
tables ← 1 row
1CREATE TABLE raw_lines (line TEXT);2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');values this step1 rowtablesraw_lines ← 3 rows
1CREATE TABLE raw_lines (line TEXT);2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');3CREATE TABLE inventory (name TEXT, qty INTEGER);values this step3 rowsraw_linestables ← 2 rows
2INSERT INTO raw_lines VALUES ('notebook,3'), ('pen,1'), ('lamp,4');3CREATE TABLE inventory (name TEXT, qty INTEGER);4WITH params(min_qty) AS (VALUES (4)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);values this step2 rowstablesinventory ← 1 row
3CREATE TABLE inventory (name TEXT, qty INTEGER);4WITH params(min_qty) AS (VALUES (4)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);5SELECT name, qty FROM inventory ORDER BY name;values this step1 rowinventoryresult ← 1 row
4WITH params(min_qty) AS (VALUES (4)) INSERT INTO inventory SELECT substr(line, 1, instr(line, ',') - 1) AS name, CAST(substr(line, instr(line, ',') + 1) AS INTEGER) AS qty FROM raw_lines WHERE CAST(substr(line, instr(line, ',') + 1) AS INTEGER) >= (SELECT min_qty FROM params);5SELECT name, qty FROM inventory ORDER BY name;values this step1 rowresult
staging table
Raw import text is kept separate from the final typed table.
transform
`substr` and `instr` split each comma-separated line into columns.
load filter
The selector changes which parsed rows are accepted into `inventory`.