Я пытаюсь вставить 1,5 миллиарда слов Crackstation (15 гигов) в таблицу базы данных. Я пробовал SQLite и Postgres оба безуспешно до сих пор через командную строку.
Оба расстраиваются из-за того, что данные содержат некоторые двоичные значения, разбросанные по всему файлу. Данные , кажется, не быть только UTF-8 символов.
UltraEdit обнаруживает это как UTF-8.
Однако команда linux file говорит:
$ file crackstation.txt -I
crackstation.txt: application/octet-stream; charset=binary
Как я могу получить эти данные в Postgres или SQLite, чтобы я мог проанализировать / запросить их?
Есть ли способ, которым я могу сначала очистить / преобразовать данные, чтобы вставка работала ... или каким-то другим способом я могу выполнить импорт в базы данных, чтобы он работал?
Вот что я попробовал:
SQLite:
sqlite> .mode csv
sqlite> .separator "\n"
sqlite> .import crackstation.txt passwords
Ответом на это являются миллионы unescaped " character
сообщений" и только одна строка, вставленная в таблицу (что является просто пустым строковым значением).
Postgres:
psql> COPY passwords FROM 'crackstation.txt' WITH (FORMAT TEXT, NULL '', ENCODING 'UTF-8');
Ответом на это является ERROR: invalid byte sequence for encoding "UTF8": 0xf6 blah blah
с номером строки, в которой он был найден. Дело в том, что txt-файл имеет 15 гигабайт, так что я смог открыть его только в UltraEdit, и даже при этом очень медленно добраться до этой строки, удалить ее, снова запустить команду psql, промыть и повторить ... отсюда и почему сейчас задаю вопрос.