CSV Storage 엔진을 사용하여 CSV 파일에서 직접 mysql 테이블을 생성하시겠습니까?
MySQL에는 기본 CSV 스토리지 엔진이 있어 테이블당 쉼표로 구분된 값 파일에 데이터를 저장한다는 사실을 방금 알게 되었습니다.
업로드된 CSV 파일에서 다음과 같은 테이블을 직접 작성할 수 있습니까?
CREATE TABLE USERS < PATH/USERS.CSV
어디에users.csv
사용자가 업로드 했습니까?
방금 CSV 파일용 Unix 명령줄 도구 세트인 csvkit을 발견했습니다.Mac에 설치했습니다.pip install csvkit
명령어는 다음과 같습니다.
csvsql --dialect mysql --snifflimit 100000 bigdatafile.csv > maketable.sql
또는 DB 연결 문자열을 제공하여 테이블을 직접 로드할 수 있습니다.
이건 불가능해.테이블을 작성하려면 테이블 스키마가 필요합니다.당신이 가지고 있는 것은 데이터 파일입니다.스키마를 만들 수 없습니다.
파일에 헤더 행이 있는지 확인하고 이 경우 해당 헤더 행을 사용하여 테이블을 수동으로 작성할 수 있습니다.
그러나 MySQL 매뉴얼의 주석 섹션에서 John Swapceinski가 설명한 배치 파일을 사용하여 테이블 생성 문을 생성하는 방법이 있습니다.
John Swapceinski에 의해 2011년 9월 5일 오전 5시 33분에 게시되었습니다.
.csv 파일의 헤더를 사용하여 테이블을 만듭니다.
#!/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) );"
데이터 Import는 MySQL Workbench를 사용하는 것이 좋습니다.Workbench를 사용하면 CSV 또는 JSON 형식의 파일에서 새 테이블을 만들 수 있습니다.마법사를 통해 몇 번의 클릭만으로 테이블 스키마 및 데이터 가져오기를 처리할 수 있습니다.
MySQL Workbench에서 테이블리스트의 컨텍스트메뉴를 사용하여Table Data Import Wizard
.
자세한 내용은 MySQL Workbench 6.5.1 테이블 데이터 내보내기 및 가져오기 마법사 설명서를 참조하십시오.MySQL Workbench를 다운로드하십시오.
"CSV를 SQL로 변환"이 도움이 되었습니다.CSV 파일을 추가하면 바로 사용할 수 있습니다.
MySQL 프런트 엔드로 phpMyAdmin을 사용하는 경우 보다 쉬운 방법이 있습니다.
- 기본 설정으로 데이터베이스를 만듭니다.
- 데이터베이스를 선택합니다.
- 화면 상단의 [Import](가져오기)를 클릭합니다.
- "Format" 아래에서 "CSV"를 선택합니다.
- CSV 파일에 적합한 옵션을 선택하고 텍스트 편집기에서 CSV 파일을 열어 참조하면 "적절한" 옵션을 얻을 수 있습니다.
문제가 있는 경우 데이터베이스를 삭제하고 다시 시도하십시오.
언급된 다른 솔루션과 더불어, Mac 사용자는 SQL Pro에 CSV 가져오기 옵션이 있어 상당히 잘 작동하고 유연하다는 점에 주목해야 합니다. Import 시 열 이름과 필드 유형을 변경할 수 있습니다.새 표를 선택하십시오. 그렇지 않으면 첫 번째 대화 내용이 다소 낙담할 수 있습니다.
Sequel Pro - MySQL 데이터베이스 작업을 위한 데이터베이스 관리 응용 프로그램입니다.
PHP 솔루션을 찾고 있는 경우는, 「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();
이 bash 스크립트를 사용할 수 있습니다.
실행하다
./convert.sh -f example/mycsvfile.csv
shiplu.mokadd.im의 스크립트를 제 요구에 맞게 채택했습니다.관계자:
#!/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));"
이것은 불가능하지만 기존 테이블 파일을 덮어쓸 수 있습니다.다만, 파일내의 행의 엔딩은, Windows 의 스타일(\r\n 로 끝남)이 아니고, Windows 로 끝남(\r\n 로 끝남)인 것을 확인해 주세요.
Python을 사용해도 괜찮으시다면 Panda가 잘 작동했습니다(csvsql은 영원히 교수형에 처했습니다).예를 들어 다음과 같습니다.
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:pass@host/db', echo=False)
df.to_sql(table_name, dwh_engine, index=False)
또, 질문의 일부였던 「CSV 엔진 사용」부분도 해결이 되지 않습니다만, 저도 도움이 될지도 모릅니다.
바로 이 기능을 하는 Windows 명령줄 도구를 만들었습니다.
여기서 다운로드할 수 있습니다.
http://commandline.dk/csv2ddl.htm
사용방법:
C:\Temp>csv2ddl.exe mysql test.csv test.sql
또는
C:\Temp>csv2ddl.exe mysql advanced doublequote comma test.csv test.sql
MySQL for Excel 플러그인이 도움이 됩니다.
http://dev.mysql.com/doc/refman/5.6/en/mysql-for-excel.html
CSV 파일을 Excel로 엽니다.이 플러그인을 사용하여 Excel 데이터를 원격 또는 로컬 mysql 서버의 새 테이블로 내보낼 수 있습니다.데이터(상위 100~1000행)를 분석하여 대응하는 테이블 스키마를 만듭니다.
CSV 파일 목록을 MySQL 데이터베이스에 로드하는 스크립트입니다.여기에는 파일의 첫 번째 줄을 기반으로 한 테이블 작성도 포함됩니다.
#!/bin/bash
CREDENTIALS="--user=root --password=password --host=localhost --port=3306"
CSVOPTIONS="$CREDENTIALS --local --delete --lock-tables --fields-terminated-by=; --fields-optionally-enclosed-by=\" --lines-terminated-by=\n"
FOLDER='my/folder'
files=(
foo.csv
bar.csv
)
for i in "${files[@]}"
do
# get table name from file name
TABLE="$(basename -- $i)"
TABLE="${TABLE%.*}"
# create the table
COMMAND="DROP TABLE IF EXISTS $TABLE; CREATE TABLE $TABLE ( $(head -1 $FOLDER/$i | sed -e 's/;/ varchar(255),\n/g') varchar(255) );"
mysql $CREDENTIALS $DB -e "$COMMAND"
# fill in data
mysqlimport $CSVOPTIONS --ignore-lines=1 $DB "$FOLDER/$i"
done
언급URL : https://stackoverflow.com/questions/9998596/create-mysql-table-directly-from-csv-file-using-the-csv-storage-engine
'source' 카테고리의 다른 글
Mariadb의 동적 열 필드에서 중첩된 개체를 추출합니다. (0) | 2022.09.27 |
---|---|
두 사전을 하나의 식에 병합하려면 어떻게 해야 합니까? (1) | 2022.09.27 |
vue 지시문에 삽입된 것과 바인딩된 것의 차이점은 무엇입니까? (0) | 2022.09.27 |
대문자 및 숫자를 사용한 랜덤 문자열 생성 (0) | 2022.09.27 |
php에서 변수로 이름 붙여진 오브젝트 속성에 어떻게 접근할 수 있나요? (0) | 2022.09.27 |