Как пропустить / пустые столбцы в mysqlsh importTable util? - PullRequest
0 голосов
/ 23 октября 2019

Я хочу указать список columns в importTable для LOAD DATA с mysqlsh:

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-parallel-table.html

import.js:

util.importTable("sample.csv", {schema: "myschema", table: "mytable", 
    showProgress: true, columns: ["id","firstname",@dummy,@dummy,"lastname"]});

Мой CSV содержит 5 столбцов. Но если моя финальная таблица содержит только id, firstname, lastname, я должен найти способ пропустить два столбца исходного csv,

Импорт с:

mysqlsh --user=root --password='rootpw' --socket=/var/run/mysqld/mysqld.sock < import.js

Проблема: SyntaxError: Invalid or unexpected token at STDIN:2:347. Ни @dummy, ни '@dummy', ни "@dummy" не работают.

Вопрос: как можно пропустить пустые столбцы? При использовании LOAD DATA он будет работать с использованием @dummy в опциях столбца.

1 Ответ

2 голосов
/ 30 октября 2019

К сожалению, в настоящее время util.importTable в MySQL Shell 8.0.18 не поддерживает пользовательские переменные, передаваемые в опции столбцов.

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

alter table names add column (dummy1 integer, dummy2 integer);

импортируйте ваши данные, например /tmp/names.csv [1]

util.importTable( "/tmp/names.csv", {table:"names", columns: ["id", "firstname", "dummy1", "dummy2", "lastname"], dialect: "csv-unix"})

и пропустите dummy столбцы:

alter table names drop column dummy1;
alter table names drop column dummy2;

или просто вызовитеLOAD DATA LOCAL INFILE SQL-команда:

LOAD DATA LOCAL INFILE '/tmp/sample.csv'
  INTO TABLE myschema.mytable
  (id, firstname, @dummy, @dummy, lastname);

[1] Пример данных /tmp/names.csv

1,"Nicole",71,29,"Tusk"
2,"Bob",49,66,"Schiffer"
3,"Susan",61,17,"Tusk"
4,"Bob",24,59,"Trump"
5,"Nicole",25,46,"Goldberg"
6,"Bob",16,71,"Goldberg"
7,"Mark",43,43,"Schiffer"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...