Подтвердить что ты не робот

Как импортировать данные из текстового файла в базу данных mysql

У меня есть файл 350 Мбайт с именем text_file.txt, содержащий данные с разделителями табуляции:

345868230   1646198120  1531283146  Keyword_1531283146  1.55    252910000
745345566   1646198120  1539847239  another_1531276364  2.75    987831000
...

MySQL Имя базы данных: Xml_Date

Таблица базы данных: PerformanceReport

Я уже создал таблицу со всеми полями назначения.

Я хочу импортировать данные этого текстового файла в MySQL. Я googled и нашел некоторые команды как LOAD DATA INFILE и довольно запутался в том, как его использовать.

Как импортировать данные этого текстового файла?

4b9b3361

Ответ 1

Это должно быть так просто, как...

LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;

По умолчанию LOAD DATA INFILE использует табуляцию с разделителями, по одной строке на строку, поэтому она должна быть в порядке.

Ответ 2

Пошаговое руководство по использованию команды MySQL LOAD DATA:

  • Создайте таблицу:

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
    
  • Создайте свой файл с разделителями табуляции (обратите внимание, что между столбцами есть вкладки):

    1   Heart disease kills     1.2
    2   one out of every two    2.3
    3   people in America.      4.5
    
  • Используйте команду данных загрузки:

    LOAD DATA LOCAL INFILE '/tmp/foo.txt' 
    INTO TABLE foo COLUMNS TERMINATED BY '\t';
    

    Если вы получите предупреждение о том, что эта команда не может быть запущена, вам нужно включить параметр --local-infile=1, описанный здесь: Как я могу исправить ошибку загрузки MySQL

  • Строки вставлены:

    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
    
  • Проверьте, не сработало ли это:

    mysql> select * from foo;
    +------+----------------------+-----------+
    | myid | mymessage            | mydecimal |
    +------+----------------------+-----------+
    |    1 | Heart disease kills  |    1.2000 |
    |    2 | one out of every two |    2.3000 |
    |    3 | people in America.   |    4.5000 |
    +------+----------------------+-----------+
    3 rows in set (0.00 sec)
    

Как указать, какие столбцы загружать столбцы текстового файла:

Вот так:

LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
(@col1,@col2,@col3) set [email protected],[email protected];

Содержимое файла помещается в переменные @col1, @col2, @col3. myid получает столбец 1, а mydecimal получает столбец 3. Если это было выполнено, оно опускает вторую строку:

mysql> select * from foo;
+------+-----------+-----------+
| myid | mymessage | mydecimal |
+------+-----------+-----------+
|    1 | NULL      |    1.2000 |
|    2 | NULL      |    2.3000 |
|    3 | NULL      |    4.5000 |
+------+-----------+-----------+
3 rows in set (0.00 sec)

Ответ 3

Если ваша таблица разделена другими, чем вкладками, вы должны указать ее как...

LOAD DATA LOCAL 
    INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport 
    COLUMNS TERMINATED BY '\t'  ## This should be your delimiter
    OPTIONALLY ENCLOSED BY '"'; ## ...and if text is enclosed, specify here

Ответ 4

Оператор LOAD DATA INFILE читает строки из текстового файла в таблицу с очень высокой скоростью.

LOAD DATA INFILE '/tmp/test.txt' 
INTO TABLE test
FIELDS TERMINATED BY ','
LINES STARTING BY 'xxx';

Если файл данных выглядит так:

xxx"abc",1
something xxx"def",2
"ghi",3

Результирующие строки будут ( "abc", 1) и ( "def", 2). Третья строка в файле пропускается, поскольку она не содержит префикса.

LOAD DATA INFILE 'data.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'

Вы также можете загружать файлы данных с помощью утилиты mysqlimport; он работает, отправив инструкцию LOAD DATA INFILE на сервер

mysqlimport -u root -ptmppassword --local test employee.txt

test.employee: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

Ответ 5

Вы должны установить опцию:

local-infile=1

в вашу [mysql] запись файла my.cnf или вызовите клиент mysql с опцией --local-infile:

mysql --local-infile -uroot -pyourpwd yourdbname

Вы должны быть уверены, что этот же параметр определен и в вашем разделе [mysqld], чтобы включить серверную часть "локального infile".

Это ограничение безопасности.

LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;

Ответ 6

1. если это текстовый файл с разделителями табуляции:

ЗАГРУЗИТЬ ДАННЫЕ ЛОКАЛЬНЫЙ ИНФИЛЬ Событие 'D: /MySQL/event.txt' INTO TABLE

ЛИНИИ, ПРЕКРАЩЕННЫЕ '\ r\n';

2. в противном случае:

ЗАГРУЗИТЬ ДАННЫЕ ЛОКАЛЬНЫЙ ИНФИЛЬ Событие 'D: /MySQL/event.txt' INTO TABLE

ПОЛЯ, ПРЕКРАЩЕННЫЕ 'x' (здесь x может быть запятой ',', табуляция '\ t', точка с запятой ';', пробел '')

ЛИНИИ, ПРЕКРАЩЕННЫЕ '\ r\n';

Ответ 7

LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
  • IGNORE 1 LINES для пропуска начальной строки заголовка, содержащей имена столбцов
  • ОБЛАСТИ, ЗАКЛЮЧЕННЫЕ ',', должны прочитать файл с разделителями-запятыми
  • Если вы сгенерировали текстовый файл в системе Windows, вам, возможно, придется использовать LINES TERMINATED BY '\ r\n', чтобы правильно прочитать файл, потому что программы Windows обычно используют два символа в качестве ограничителя строки. Некоторые программы, такие как WordPad, могут использовать \r в качестве ограничителя строки при записи файлов. Чтобы прочитать такие файлы, используйте LINES TERMINATED BY '\ r'.

Ответ 8

enter image description here

Для меня, просто добавив ключевое слово "LOCAL", получилось, см. прикрепленное изображение для более простого решения.

Мое прикрепленное изображение содержит оба варианта использования:

(а) Где я получал эту ошибку. (б) Где ошибка была решена просто добавив ключевое слово "Local".

Ответ 9

Не работает с Mysql 8.

/* ERROR 1148 (42000): The used command is not allowed with this MySQL version
 */