Jac*_*b H 3 sql unix sqlite shell import-csv
我的问题很简单.想象一下,您在CSV中有以下数据:
Name, Age, Gender
Jake, 40, M
Bill, 17, M
Suzie, 21, F
Run Code Online (Sandbox Code Playgroud)
导入上述CSV时是否可以排除Age变量?我目前的方法是简单地使用cut
shell命令.
更新
iluvcapra对小型CSV有很好的答案.但是,对于非常大的CSV,这种方法效率很低.例如,假设上面的CSV非常大,30Gb可以说.仅加载所有Age数据以立即删除是浪费时间.考虑到这一点,是否有更有效的方法将列子集加载到sqlite数据库?
我怀疑最好的选择是使用shell命令cut
来剔除不必要的列.这种直觉是否正确?使用shell命令将CSV文件预处理成更多sqlite友好版本是否常见?
谢谢!
使用age列创建一个临时表,然后使用INSERT ... SELECT将数据从临时表移动到主表中:
CREATE TEMP TABLE _csv_import (name text, age integer, gender text);
.separator ","
.import file.csv test
INSERT INTO names_genders (name, gender) SELECT name, gender
FROM _csv_import WHERE 1;
DROP TABLE _csv_import;
Run Code Online (Sandbox Code Playgroud)
编辑:使用幻像年龄列更新到视图中:
CREATE VIEW names_ages_genders AS
SELECT (name, 0 AS age ,gender) FROM names_genders;
CREATE TRIGGER lose_age
INSTEAD OF INSERT ON names_ages_genders
BEGIN
INSERT INTO names_genders (name, gender)
VALUES (NEW.name, NEW.gender)
END;
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为的视图names_ages_genders
,它会说每个人都是零岁,并且会默默地从任何INSERT
调用它的语句中删除age字段.没测试过!(我实际上不确定.import
可以导入视图.)