Как импортировать файл tsv с помощью SQLite3

У меня есть tsv (файл, разделенный табуляцией), который я хотел бы импортировать с помощью sqlite3. Кто-нибудь знает четкий способ сделать это?

Я установил sqlite3, но еще не создал базу данных или таблицы.

Я пробовал команду

.import /path/filename.tsv my_new_table

но выдает ошибку: нет такой таблицы: my_new_table.

Однако из того, что я читал, таблица должна автоматически создаваться, если она не существует. Означает ли это, что мне нужно сначала создать и использовать базу данных, или есть еще один способ импортировать файл .tsv в sqlite?


person bsuire    schedule 26.09.2014    source источник


Ответы (2)


Вы должны создать таблицу, установить разделитель и импортировать данные sqlite wiki.

Пример для ТСВ:

data.tsv (табуляция как разделитель):

Bob 30  1000
Wendy   20  900

1) Создайте таблицу и установите TAB в качестве разделителя:

sqlite> create table people (name text, param1 int, param2 int);
sqlite> .separator "\t"

2) Импорт данных:

sqlite> .import data.tsv people

И результат:

sqlite> select * from people;
Bob 30  1000
Wendy   20  900
person Grigorii Chudnov    schedule 26.09.2014
comment
Обратите внимание, что использование .separator "\t" означает, что sqlite по-прежнему будет использовать правила стиля csv для интерпретации кавычек, что, вероятно, не то, что вам нужно. Лучшим вариантом является использование режима tabs, описанного в ответе adius. - person Miles; 19.06.2017
comment
Кажется, в названиях есть какая-то логика. После .separator\t мне также пришлось переименовать из .csv в .tsv - person Punnerud; 07.08.2018
comment
Не нужно создавать таблицу. Импорт сделает это за вас. Если вы счастливы, что каждый тип столбца будет выбран для вас. Я сделал это, и все было «текстом». Это может подойти для ситуаций, когда вы вручную изучаете данные, чтобы потом их выбросить. - person Martin Capodici; 02.08.2019
comment
Ваша вики-ссылка больше не работает; Я думаю, что sqlite.org/cli.html#csv_import сейчас может быть правильной ссылкой - person Nathan Friedly; 06.09.2019

На самом деле существует специальный режим для импорта файлов, разделенных табуляцией:

sqlite> .mode tabs
sqlite> .import data.tsv people

Кроме того, если вы включите строку заголовка в свой файл tsv, вы можете позволить sqlite автоматически создать таблицу. Просто используйте неиспользуемое имя таблицы во время импорта и измените файл tsv на:

name    param1  param2
Bob 30  1000
Wendy   20  900
person adius    schedule 17.02.2016
comment
не ставьте точку с запятой в конце оператора импорта, как это сделал я :) - person Neil McGuigan; 23.08.2016
comment
.help .mode говорит, что его задача — «установить режим вывода», но .help .import поясняет в примечании: «Если не используются ни --csv, ни --ascii, режим ввода получается из режима вывода .mode». - person andrewdotn; 03.07.2021