Использование sqlite3 Как установить ширину одного столбца в SQL-DB (или его CSV) - PullRequest
0 голосов
/ 05 мая 2018

Отчаянно по этому поводу:

Я пытаюсь ограничить ширину одного конкретного столбца в SQL-таблице шириной 7 символов. Точнее, я хотел бы обрезать каждый элемент в столбце, чтобы он был текстовым элементом не более 7 символов в ширину (если длиннее, он должен быть усечен).

Другая возможность - изменить количество символов в соответствующем столбце CSV перед созданием базы данных SQL.

Проблема: БД большая !!

(и, следовательно, изменение CSV (до создания базы данных SQL) невозможно при использовании наиболее распространенных инструментов, таких как Sublime, Atom или Excel)

Какие есть альтернативы? (может быть sqlite3 или какой-то терминал-cmd ??)

Мой CSV-файл (table1.txt) выглядит так:

some_text,some_id,stop_name
"Hello World1","1101069:0:1","MyName1"
"Hello World2","1333332","MyName2"
"Hello World3","1452339:0","MyName3"
"Hello World4","8334342:2:0","MyName4"

Столбец some_id должен быть ограничен 7 символами, в результате чего ...

some_text,some_id,stop_name
"Hello World1","1101069","MyName1"
"Hello World2","1333332","MyName2"
"Hello World3","1452339","MyName3"
"Hello World4","8334342","MyName4"

Мой файл создания sqlite3 (creationFile.sql) выглядит так:

CREATE TABLE table1 (some_text TEXT PRIMARY KEY, some_id TEXT, stop_name TEXT) WITHOUT ROWID;

.separator ,
.import table1.txt table1

Я использую следующий sqlite3 терминал cmd для создания БД:

sqlite3 myTable.db > creationFile.sql`

Теперь снова, ограничение ширины столбца уже может быть введено в CSV-файл. Но я думаю, что это довольно невозможно, поскольку ни один стандартный редактор не делает это больше из-за большого размера CSV-файла (> 10 миллионов строк). Есть ли способ, которым sqlite3 может справиться с этим во время создания БД? Или любой терминал cmd делает это до, во время или после создания БД ??

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы можете попробовать это. После создания table1 запустите этот оператор:

CREATE TABLE table2 AS
  SELECT some_text, SUBSTR(some_id, 1, 7) as some_id, stop_name
  FROM table1;

Примечание: не уверен в синтаксисе функции SUBSTR (). Лучше гуглить.

0 голосов
/ 05 мая 2018

Возможно, не самый эффективный способ, но, поскольку я не знаю инструмент, я вижу только один:

  1. Создайте базу данных и импортируйте все данные с полной длиной текста. Поскольку ваши типы столбцов text, это должно работать для любой длины текста.

  2. После этого обновите таблицу, чтобы обрезать тексты. Например, если текст, который вы хотите сократить, это текст столбца stop_name_text:

    UPDATE table1
           SET stop_name_text = substr(stop_name_text, 1, 7);
    

    Но будьте осторожны, когда вы хотите сделать это для some_text: вы объявили это как PRIMARY KEY. Сокращение может привести к двум одинаковым текстам в разных столбцах. Например. если у вас есть «Hello World» и «Hello Walter», оба приведут к «Hello W». Значения столбца, объявленного PRIMARY KEY, должны быть уникальными, поэтому в таком случае UPDATE завершится неудачей.

    Или, может быть, это была ошибка, и вы действительно хотели объявить some_id как PRIMARY KEY? Название предполагает, что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...