it-swarm.com.de

MySQL-Tabelle direkt aus der CSV-Datei mit der CSV-Speicher-Engine erstellen?

Ich habe gerade erfahren, dass Mysql eine native CSV-Speicher-Engine hat , die Daten pro Tabelle in einer Comma Separated Value-Datei speichert.

Kann eine Tabelle direkt aus einer hochgeladenen CSV-Datei erstellt werden, etwa:

CREATE TABLE USERS <PFAD/USERS.CSV

wo Benutzer.csv vom Benutzer hochgeladen wird?

49
Jonathan

Das ist nicht möglich. Um eine Tabelle zu erstellen, benötigen Sie ein Tabellenschema. Was Sie haben, ist eine Datei. Schema kann nicht damit erstellt werden. Sie können überprüfen, ob Ihre Datei eine Kopfzeile hat. In diesem Fall können Sie eine Tabelle mit dieser Kopfzeile aber manuell erstellen.

Es gibt jedoch eine Möglichkeit, eine create table -Anweisung durch eine Batchdatei zu generieren, wie von John Swapceinski im Kommentarabschnitt des MySQL-Handbuchs beschrieben.

Gepostet von John Swapceinski am 5. September 2011 um 5:33 Uhr.
Erstellen Sie eine Tabelle mit dem Header der CSV-Datei:

#!/bin/sh
# pass in the file name as an argument: ./mktable filename.csv
echo "create table $1 ( "
head -1 $1 | sed -e 's/,/ varchar(255),\n/g'
echo " varchar(255) );"
38
Shiplu Mokaddim

Ich habe gerade csvkit entdeckt, eine Reihe von Unix-Befehlszeilentools für CSV-Dateien. Auf meinem Mac mit pip install csvkit installiert und der Befehl lautete:

 csvsql --dialect mysql --snifflimit 100000 bigdatafile.csv > maketable.sql

Sie können alternativ eine DB-Verbindungszeichenfolge angeben und die Tabelle direkt laden.

79
prototype

Ich weiß, dass dies ein wenig altmodisch ist, aber es gibt einen einfacheren Weg - WENN - Sie verwenden phpmyadmin als Ihr MySQL-Frontend. 

1) Erstellen Sie eine Datenbank mit nur Standardeinstellungen.

2) Wählen Sie die Datenbank aus.

3) Klicken Sie oben im Bildschirm auf "Importieren".

4) Wählen Sie CSV unter "Format".

5) Wählen Sie die für Ihre CSV-Datei geeigneten Optionen (öffnen Sie die CSV-Datei in einem Texteditor und referenzieren Sie sie, um die entsprechenden Optionen zu erhalten).

Wenn Sie es vermasseln, kein Problem, löschen Sie einfach die Datenbank und versuchen Sie es erneut.

9
Bill Isaacs

Es wird empfohlen, MySQL Workbench zu verwenden, wo Daten importiert werden. In Workbench kann der Benutzer eine neue Tabelle aus einer Datei im CSV- oder JSON-Format erstellen. Der Tabellenschema- und Datenimport kann mit wenigen Klicks durch den Assistenten durchgeführt werden.

Verwenden Sie in MySQL Workbench das Kontextmenü in der Tabellenliste und klicken Sie auf Table Data Import Wizard.

MySQL Workbench image

Mehr aus der MySQL-Workbench 6.5.1 Export und Import von Tabellendaten Wizard . Laden Sie MySQL Workbench hier herunter .

7
Jan Damek

Das hat mir geholfen. Fügen Sie einfach Ihre CSV-Datei hinzu und schon können Sie loslegen.

http://www.convertcsv.com/csv-to-sql.htm

6
pal4life

Zusätzlich zu den anderen genannten Lösungen möchten Mac-Benutzer möglicherweise darauf hinweisen, dass SQL Pro über eine CSV-Importoption verfügt, die ziemlich gut funktioniert und flexibel ist. Sie können beim Import die Spaltennamen und Feldtypen ändern. Wählen Sie eine neue Tabelle, ansonsten kann der erste Dialog etwas entmutigend wirken.

SQL Pro: http://www.sequelpro.com Sequel Pro - Datenbankverwaltungsanwendung für die Arbeit mit MySQL-Datenbanken 

5
Tim Green

wenn jemand nach php solutin sucht:

Paket: https://github.com/uzi88/PHP_MySQL_wrapper

$db = new MySQL_wrapper(MySQL_Host, MySQL_USER, MySQL_PASS, MySQL_DB);
$db->connect(); 

// this sample gets column names from first row of file
//$db->createTableFromCSV('test_files/countrylist.csv', 'csv_to_table_test');

// this sample generates column names 
$db->createTableFromCSV('test_files/countrylist1.csv', 'csv_to_table_test_no_column_names', ',', '"', '\\', 0, array(), 'generate', '\r\n');

/** Create table from CSV file and imports CSV data to Table with possibility to update rows while import.
 * @param   string      $file           - CSV File path
 * @param   string      $table          - Table name
 * @param   string      $delimiter      - COLUMNS TERMINATED BY (Default: ',')
 * @param   string      $Enclosure      - OPTIONALLY ENCLOSED BY (Default: '"')
 * @param   string      $escape         - ESCAPED BY (Default: '\')
 * @param   integer     $ignore         - Number of ignored rows (Default: 1)
 * @param   array       $update         - If row fields needed to be updated eg date format or increment (SQL format only @FIELD is variable with content of that field in CSV row) $update = array('SOME_DATE' => 'STR_TO_DATE(@SOME_DATE, "%d/%m/%Y")', 'SOME_INCREMENT' => '@SOME_INCREMENT + 1')
 * @param   string      $getColumnsFrom - Get Columns Names from (file or generate) - this is important if there is update while inserting (Default: file)
 * @param   string      $newLine        - New line delimiter (Default: \n)
 * @return  number of inserted rows or false
 */
// function createTableFromCSV($file, $table, $delimiter = ',', $Enclosure = '"', $escape = '\\', $ignore = 1, $update = array(), $getColumnsFrom = 'file', $newLine = '\r\n')

$db->close();
2
rjanjic

Ich habe das Skript von shiplu.mokadd.im an meine Bedürfnisse angepasst. Wen es interessiert:

#!/bin/bash
if [ "$#" -lt 2 ]; then
    if [ "$#" -lt 1 ]; then 
        echo "usage: $0 [path to csv file] <table name> > [sql filename]"
        exit 1
    fi
    TABLENAME=$1
else
    TABLENAME=$2
fi
echo "CREATE TABLE $TABLENAME ( "
FIRSTLINE=$(head -1 $1)
# convert lowercase characters to uppercase
FIRSTLINE=$(echo $FIRSTLINE | tr '[:lower:]' '[:upper:]')
# remove spaces
FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/ /_/g')
# add tab char to the beginning of line
FIRSTLINE=$(echo "\t$FIRSTLINE")
# add tabs and newline characters
FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/,/,\\n\\t/g')
# add VARCHAR
FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/,/ VARCHAR(255),/g')
# print out result
echo -e $FIRSTLINE" VARCHAR(255));"
2
Johann Horvat

MySQL für Excel-Plugin kann Ihnen dabei helfen.

http://dev.mysql.com/doc/refman/5.6/de/mysql-for-Excel.html

Öffnen Sie Ihre CSV-Datei in Excel. Sie können dieses Plugin verwenden, um Excel-Daten in eine neue Tabelle eines entfernten oder lokalen MySQL-Servers zu exportieren .. __ Sie analysiert Ihre Daten (obere 100 bis 1000 Zeilen) und erstellt ein entsprechendes Tabellenschema.

1
Ian Chang

Ich habe ein Windows-Befehlszeilentool erstellt, das genau das tut. 

Sie können es hier herunterladen: http://commandline.dk/csv2ddl.htm

Verwendungszweck:

C:\Temp>csv2ddl.exe mysql test.csv test.sql

Oder

C:\Temp>csv2ddl.exe mysql advanced doublequote comma test.csv test.sql
1
Jacob

Dies ist nicht möglich, Sie können jedoch eine vorhandene Tabellendatei überschreiben. Stellen Sie jedoch sicher, dass die Zeilenenden in Ihrer Datei im Unix-Stil (nur mit\n endend) und nicht im Windows-Stil (mit\r\n endend) sind, unabhängig davon, ob Sie unter Windows arbeiten oder nicht. 

0
fancyPants

Wenn Sie mit Python einverstanden sind, hat Pandas großartig für mich funktioniert (csvsql hängt für meinen Fall für immer). So etwas wie:

from sqlalchemy import create_engine
import pandas as pd

df = pd.read_csv('/PATH/TO/FILE.csv')
# Optional, set your indexes to get Primary Keys
df = df.set_index(['COL A', 'COL B'])

engine = create_engine('mysql://user:[email protected]/db', echo=False)

df.to_sql(table_name, dwh_engine, index=False)

Dies löst auch nicht den Teil "using CSV engine", der Teil der Frage war, könnte aber auch nützlich sein.

0
ivansabik