Загрузить данные из двух (или более) файлов в одну таблицу

0

У меня есть одна таблица:

CREATE TABLE t (
  id INT NOT NULL PRIMARY KEY,
  x INT NOT NULL,
  y INT NOT NULL );

Данные находятся в двух файлах: у одного файла есть пара значений (id, x), а в другом файле есть пара значений (id, y). В каждой из них около 20 миллионов строк. Большинство значений id, которые появляются в файле x, также отображаются в файле y и наоборот.

Можете ли вы предложить, как загрузить значения id, x и y из двух файлов в t?

Теги:

2 ответа

1

Если вы работаете на Unix-машине, у вас может быть доступ к "join", который может объединить ваши 2 файла вместе и создать их на stdout. Массовая загрузка стандарта непосредственно в mysql. Это уменьшит количество операций записи на диск.

  • 0
    Это интересно. Я попробую. Кстати, согласно man-странице, join (1) требует, чтобы входные файлы сортировались (1) по ключевому столбцу.
  • 0
    @fsb, я использовал ssh / gzip / dump / load для колокейшна. Вы, конечно, можете загрузить 2 файла в MySQL, а затем соединить их в другую таблицу. Мне нравится использовать каналы для уменьшения дискового ввода-вывода, однако это, вероятно, не имеет значения.
Показать ещё 3 комментария
0

Загрузите каждый из файлов в две отдельные таблицы, используя LOAD DATA INFILE. Затем используйте INSERT INTO... SELECT для вставки данных в таблицу t.

  • 0
    Если в одной таблице есть строка с (id=23, x=55) а в другой есть строка с (id=23, y=126) , мне нужно получить строку (id=23, x=55, y=126) в t . Вставить первое в t просто. Но при вставке со второго появятся дубликаты ключей. Работает ли INSERT INTO SELECT ... ON DUPLICATE KEY UPDATE y = ... для этого?
  • 0
    Нет, это не так, но вы можете выполнить полное внешнее объединение в своем SELECT (к сожалению, это немного трудоемко, если UNIONing объединяет RIGHT и LEFT, поскольку MySQL пока не поддерживает синтаксис FULL OUTER join)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню