Hoe importeer ik een CSV-bestand in een MySQL-tabel?

Ik heb een niet-genormaliseerd gebeurtenis-dagboek CSV van een client die ik in een MySQL-tabel probeer te laden, zodat ik deze kan refactoren in een normaal formaat. Ik heb een tabel gemaakt met de naam ‘CSVImport’ met één veld voor elke kolom van het CSV-bestand. De CSV bevat 99 kolommen, dus dit was op zich al moeilijk genoeg:

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

Er zijn geen beperkingen in de tabel en alle velden bevatten VARCHAR(256)-waarden, behalve de kolommen die tellingen bevatten (weergegeven door INT), ja/nee (weergegeven door BIT), prijzen (weergegeven door DECIMAL) en tekstvervagingen (weergegeven door TEXT).

Ik heb geprobeerd gegevens in het bestand te laden:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

De hele tabel is gevuld met NULL.

Ik denk dat het probleem is dat de tekstvervagingen meer dan één regel bevatten, en MySQL ontleedt het bestand alsof elke nieuwe regel zou overeenkomen met één databazse-rij. Ik kan het bestand probleemloos in OpenOffice laden.

Het bestand clientdata.csv bevat 2593 regels en 570 records. De eerste regel bevat kolomnamen. Ik denk dat het door komma’s wordt gescheiden en tekst blijkbaar wordt gescheiden door dubbele aanhalingstekens.

UPDATE:

Lees bij twijfel de handleiding: http:// dev.mysql.com/doc/refman/5.0/en/load-data.html

Ik heb wat informatie toegevoegd aan de LOAD DATA-instructie die OpenOffice slim genoeg was om af te leiden, en nu laadt het het juiste aantal records:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Maar er zijn nog steeds veel volledig NULL-records en geen van de geladen gegevens lijkt op de juiste plaats te staan.


Antwoord 1, autoriteit 100%

De kern van uw probleem lijkt de kolommen in het CSV-bestand overeen te laten komen met die in de tabel.

Veel grafische mySQL-clients hebben hele mooie importdialogen voor dit soort dingen.

Mijn favoriet voor deze baan is HeidiSQLop basis van Windows. Het geeft je een grafische interface om het LOAD DATAcommando te bouwen; je kunt het later programmatisch opnieuw gebruiken.

Screenshot: dialoogvenster “Tekstbestand importeren”

Om het dialoogvenster Tekstbestand importeren te openen, gaat u naar Tools > Import CSV file:


Antwoord 2, autoriteit 98%

Gebruik mysqlimportom een tabel in de database te laden:

mysqlimport --ignore-lines=1 \
            --fields-terminated-by=, \
            --local -u root \
            -p Database \
             TableName.csv

Ik vond het op http ://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

Om van het scheidingsteken een tab te maken, gebruik --fields-terminated-by='\t'


Antwoord 3, autoriteit 62%

De eenvoudigste manier waarop ik meer dan 200 rijen heb geïmporteerd, is het onderstaande commando in het phpmyadmin sql-venster

Ik heb een eenvoudige landtabel met twee kolommen
Land-ID,Landnaam

hier zijn .csv-gegevens

hier is het commando:

LOAD DATA INFILE 'c:/country.csv' 
INTO TABLE country 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

Houd één ding in gedachten, nooit verschijnen in de tweede kolom, anders stopt uw import


Antwoord 4, autoriteit 52%

Ik weet dat de vraag oud is, maar ik wil deze delen

Ik heb deze methode gebruikt om meer dan 100.000 records (~5MB) te importeren in 0.046sec

Zo doe je het:

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

Het is erg belangrijk om de laatste regel op te nemen, als u meer dan één veld heeft, d.w.z. normaal wordt het laatste veld overgeslagen (MySQL 5.6.17)

LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

Dan, ervan uitgaande dat u de eerste rij als titelvoor uw velden heeft, wilt u deze regel misschien ook opnemen

IGNORE 1 ROWS

Zo ziet het eruit als je bestand een koprij heeft.

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(field_1,field_2 , field_3);

Antwoord 5, autoriteit 23%

phpMyAdminkan CSV-import aan. Dit zijn de stappen:

  1. Bereid het CSV-bestand voor zodat de velden in dezelfde volgorde staan als de MySQL-tabelvelden.

  2. Verwijder de koprij uit de CSV (indien aanwezig), zodat alleen de gegevens in het bestand staan.

  3. Ga naar de phpMyAdmin-interface.

  4. Selecteer de tafel in het linkermenu.

  5. Klik op de importknop bovenaan.

  6. Blader naar het CSV-bestand.

  7. Selecteer de optie “CSV met LOAD DATA”.

  8. Voer “,” in in de “velden beëindigd door”.

  9. Voer de kolomnamen in dezelfde volgorde in als in de databasetabel.

  10. Klik op de knop GO en u bent klaar.

Dit is een opmerking dat ik heb voorbereid op mijn toekomstige gebruik en het delen hier als iemand anders kan profiteren.


6, Autoriteit 9%

U kunt dit oplossen door de kolommen in u te vermelden. Van de handmatig :

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

… Dus in uw geval moet u de 99 kolommen in de volgorde vermelden waarin ze in het CSV-bestand voorkomen.


7, Autoriteit 9%

Als u MySQL Workbench (momenteel 6.3-versie) gebruikt, kunt u dit doen door:

  1. Klik met de rechtermuisknop op “Tables”;
  2. koos voor tabelgegevens import wizard;
  3. Kies uw CSV-bestand en volg de instructies (JON kan ook worden gebruikt);
    Het goede ding is dat u een nieuwe tabel kunt maken op basis van het CSV-bestand dat u gegevens wilt importeren of laden naar een bestaande tabel


8, Autoriteit 6%

Probeer dit, het werkte voor mij

   LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 ROWS;

Negeer 1 rijen Hier negeert de eerste rij die de veldnamen bevat. Merk op dat voor de bestandsnaam het absolute pad van het bestand moet typen.


9, Autoriteit 5%

De opdrachtregel van MySQL is vatbaar voor te veel problemen bij import. Hier is hoe u het doet:

  • Gebruik Excel om de kopnamen te bewerken om geen spaties te hebben
  • Opslaan als .csv
  • Gebruik gratis Navicat Lite SQL-browser om te importeren en automatisch een nieuwe tabel te maken (geef het een naam)
  • Open de nieuwe tabel Plaats een primaire automatische nummerkolom voor ID
  • Wijzig het type van de kolommen zoals gewenst.
  • gedaan!

10, Autoriteit 4%

Ik zie iets vreemds. U gebruikt voor het ontsnappen van hetzelfde personage dat u gebruikt voor het omsluiten. Dus de motor weet niet wat ik moet doen als het een ” ‘is en ik denk dat dat is waarom niets op de juiste plek lijkt te zijn.
Ik denk dat als je de lijn van ontsnapping verwijdert, geweldig zou moeten worden. Zoals:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Tenzij u (handmatig, visueel, …) uw CSV analyseert en vindt welk karakter gebruikt voor ontsnapping. Soms is ‘\’. Maar als u het niet hebt, gebruik het dan niet.


11, Autoriteit 2%

Hoe CSV-bestanden importeren naar SQL-tabellen

Voorbeeldbestand: Overseas_trade_indexData CSV-bestand

Stappen:

  1. Noodzaak om de tabel te maken voor Overseas_trade_index.

  2. Noodzaak om kolommen met betrekking tot CSV-bestand te maken.

    SQL-query:

    ( id int not null primary key auto_increment,
    series_reference varchar (60),
    period varchar (60),
    data_value decimal(60,0),
    status varchar (60),
    units varchar (60),
    magnitude int(60),
    subject text(60),
    group text(60),
    series_title_1 varchar (60),
    series_title_2 varchar (60),
    series_title_3 varchar (60),
    series_title_4 varchar (60),
    series_title_5 varchar (60),
     );
    
  3. Noodzaak om MySQL-database in Terminal te verbinden.

    =>show databases;
    =>use database;
    =>show tables;
    
  4. Voer deze opdracht in om de CSV-gegevens te importeren naar MySQL-tabellen.

    load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5);
    
  5. Zoek deze overzeese indexgegevens op SQLDATABase:

    select * from trade_index;
    

Antwoord 12

Als u een Windows-machine gebruikt waarop een Excel-spreadsheet is geladen, is de nieuwe mySql-plug-in voor Excel fenomenaal. De mensen bij Oracle hebben echt goed werk geleverd met die software. U kunt de databaseverbinding rechtstreeks vanuit Excel maken. Die plug-in analyseert uw gegevens en stelt de tabellen voor u op in een formaat dat consistent is met de gegevens. Ik had een aantal monster grote csv-bestanden met gegevens om te converteren. Deze tool was een grote tijdsbesparing.

http://dev.mysql.com/downloads/windows/excel/

U kunt vanuit Excel updates maken die online in de database worden ingevuld. Dit werkte buitengewoon goed met mySql-bestanden die waren gemaakt op ultragoedkope GoDaddy shared hosting. (Merk op dat wanneer u de tabel bij GoDaddy maakt, u een aantal niet-standaard instellingen moet selecteren om externe toegang tot de database mogelijk te maken…)

Met deze plug-in heb je pure interactiviteit tussen je XL-spreadsheet en online mySql-gegevensopslag.


Antwoord 13

In het geval dat u Intellij . gebruikt
https://www.jetbrains.com/datagrip/features/importexport.html


Antwoord 14

Ik gebruik mysql workbench om hetzelfde werk te doen.

  1. nieuw schema maken
  2. open nieuw gemaakt schema
  3. klik met de rechtermuisknop op “Tabellen” en selecteer “Wizard Tabelgegevens importeren”
  4. geef het csv-bestandspad en de tabelnaam op en configureer ten slotte uw kolomtype omdat de wizard het standaardkolomtype heeft ingesteld op basis van hun waarden.

Opmerking: bekijk het logbestand van mysql workbench op eventuele fouten met behulp van “tail -f [mysqlworkbenchpath]/log/wb*.log”


Antwoord 15

Hier is een voorbeeld van een schermafdruk van een Excel-bestand:

Opslaan als en kies .csv.

En je hebt zoals hieronder getoonde .csv-gegevensschermafbeelding als je opent met Notepad++ of een ander Kladblok.

Zorg ervoor dat u de koptekst verwijdert en de kolomuitlijning in .csv heeft zoals in de mysql-tabel.
Vervang mapnaam door uw mapnaam

LOAD DATA LOKAAL INFILE
‘D:/mapnaam/mijnbestandsnaam.csv’
IN TABEL mail
VELDEN BEINDIGD DOOR ‘,’
(fname,lname,e-mail, telefoon);

Als het om big data gaat, kun je koffie nemen en deze laten laden!

Dat is alles wat je nodig hebt.


Antwoord 16

PHP-query voor import csv-bestand naar mysql-database

$query = <<<EOF
            LOAD DATA LOCAL INFILE '$file'
             INTO TABLE users
             FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             IGNORE 1 LINES
            (name,mobile,email)
    EOF;
if (!$result = mysqli_query($this->db, $query))
   {
        exit(mysqli_error($this->db));
   }

**Voorbeeld CSV-bestandsgegevens **

name,mobile,email
Christopher Gritton,570-686-3439,[email protected]
Brandon Wilson,541-309-5149,[email protected]
Craig White,516-795-8065,[email protected]
David Whitney,713-214-3966,[email protected]

Antwoord 17

Wijzig servernaam, gebruikersnaam, wachtwoord, dbnaam, pad van uw bestand, tabelnaam en het veld in uw database dat u wilt invoegen

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bd_dashboard";
    //For create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    $query = "LOAD DATA LOCAL INFILE 
                'C:/Users/lenovo/Desktop/my_data.csv'
                INTO TABLE test_tab
                FIELDS TERMINATED BY ','
                LINES TERMINATED BY '\n'
                IGNORE 1 LINES
                (name,mob)";
    if (!$result = mysqli_query($conn, $query)){
        echo '<script>alert("Oops... Some Error occured.");</script>';
        exit();
            //exit(mysqli_error());
       }else{
        echo '<script>alert("Data Inserted Successfully.");</script>'
       }
    ?>

Antwoord 18

Ik deed het op een eenvoudige manier met phpmyadmin. Ik volgde de stappen van @Farhan, maar alle gegevens werden in één kolom gewijzigd.
Hoe ik het deed:

  1. Een CSV-bestand gemaakt en de koprij met kolomnamen verwijderd. Alleen gegevens bewaard.
  2. Ik heb een tabel gemaakt met kolomnamen die overeenkomen met de csv-kolommen.
  3. Vergeet niet de juiste typen toe te wijzen aan elke kolom.
  4. Ik heb zojuist de import geselecteerd en ben naar het import-tabblad gegaan.
  5. In bladeren heb ik het CSV-bestand geselecteerd en alle opties behouden zoals het is.
  6. Tot mijn verbazing zijn alle gegevens succesvol geïmporteerd in de juiste kolommen.

Other episodes