MySQL: сжатие данных в один столбец при использовании LOAD DATA - PullRequest
0 голосов
/ 24 августа 2018

В базе данных MySQL я использую поля BLOB для хранения сжатых данных из потенциально длинных текстовых строк, которые я иногда хочу отображать пользователям моего веб-приложения, но которые никогда не будут использоваться для поиска или чего-либо ещеОсновная идея заключается в экономии места на диске.

Я пытаюсь заполнить свои таблицы, используя LOAD DATA и файлы tsv.Проблема в том, что я использую табличные файлы, содержащие текст , но один из столбцов (BLOB один) необходимо сжать.

Я попробовал следующее, но безуспешно.В этом примере файл table_name.tsv tsv содержит данные, которые я хочу вставить в table_name, а текст, который я хочу сжать, находится в столбцах col4.

mysql -h <host> -u <user> -p <pwd> <db_name>  --execute="LOAD DATA LOCAL INFILE 'table_name.tsv' INTO TABLE table_name(col1, col2, col3, @col4_comp_data) SET col4=COMPRESS(@col4_comp_data) FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' IGNORE 1 LINES; SHOW WARNINGS"

Я получил ошибку:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' IGNORE 1 LINES' at line 1

Есть идеи, можно ли сжимать данные при загрузке с помощью LOAD DATA?

1 Ответ

0 голосов
/ 24 августа 2018

У вас неправильный порядок синтаксиса.
Часть LINES TERMINATED BY '\\n' IGNORE 1 LINES должна идти перед частью настройки столбца.

Правильный порядок

Код BNF (форма Бэкуса – Наура)

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT},
        [, col_name={expr | DEFAULT}] ...]

источник http://dev.mysql.com/doc/refman/8.0/en/load-data.html.

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