Загрузка данных в MemSQL не поддерживает шестнадцатеричный разделитель - PullRequest
0 голосов
/ 23 января 2019

С эта , команда MySQL load data infile хорошо работает с шестнадцатеричным разделителем, таким как X'01' или X'1e' в моем случае. Но та же команда не может быть запущена с той же командой load data infile в MemSQL.

Я пытался указать различные формы одного и того же разделителя \x1e, например:

  • '0x1e' или 0x1e
  • X'1e'
  • '\x1e' или 'x1e'

Все вышеперечисленное не работает и выдает syntax error или другую ошибку, подобную этой:

Это похоже на то, что разделитель не может быть правильно определен:

mysql> load data local infile '/container/data/sf10/region.tbl.hex' into table REGION CHARACTER SET utf8 fields terminated by '\x1e' lines terminated by '\n';
ERROR 1261 (01000): Row 1 doesn't contain data for all columns

Это синтаксическая ошибка:

mysql> load data local infile '/container/data/sf10/region.tbl.hex' into table REGION CHARACTER SET utf8 fields terminated by 0x1e lines terminated by '\n';   
ERROR 1064 (42000): 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 '0x1e lines terminated by '\n'' at line 1
mysql>

Данные на самом деле ограничены непечатаемым шестнадцатеричным символом из \x1e и строка заканчивается обычным \n. Использование cat -A позволяет увидеть символы с разделителями как ^^. Поэтому разделитель должен быть правильным.

$  cat -A region.tbl.hex 
0^^AFRICA^^lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to $
1^^AMERICA^^hs use ironic, even requests. s$

Есть ли правильный способ использовать шестнадцатеричные значения в качестве разделителя? Я не могу найти такую ​​информацию в документации.

В целях сравнения шестнадцатеричный разделитель (0x1e) может хорошо работать на MySQL:

mysql> load data local infile '/tmp/region.tbl.hex' into table region CHARACTER SET utf8 fields terminated by 0x1e lines terminated by '\n';
Query OK, 5 rows affected (0.01 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0

1 Ответ

0 голосов
/ 23 января 2019

MemSQL поддерживает шестнадцатеричные разделители, начиная с 6.7, формы в последнем блоке кода в вашем вопросе.До этого вам понадобится буквально заключенный в кавычки символ 0x1e в строке sql, что раздражает в CLI.Если вы используете более старую версию, вам может потребоваться обновление.

...