Last active
August 29, 2015 14:12
-
-
Save Exadra37/355b26e5d116861cfba4 to your computer and use it in GitHub Desktop.
Import CSV file to database and creates a backup table.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# @author Paulo Silva <exadra37atgmailpointcom> | |
# @since 2014/08/20 | |
echo -e "\n Import CSV File to Database \n"; | |
error=0; | |
if [ "$1" != "-h" ] || [ "$1" != "--help" ] | |
then | |
{ | |
if [ $1 ] | |
then | |
user="$1"; | |
else | |
echo -e " ERROR: please provide the database user \n"; | |
error=1; | |
fi | |
if [ $2 ] | |
then | |
database="$2"; | |
else | |
echo -e " ERROR: please provide the database name \n"; | |
error=1; | |
fi | |
if [ $3 ] | |
then | |
table="$3"; | |
else | |
echo -e " ERROR: please provide the table name \n"; | |
error=1; | |
fi | |
if [ $4 ] && [ $5 ] | |
then | |
{ | |
if [ "$5" == "--pretend" ] || [ "$5" == "--import" ] | |
then | |
{ | |
path="$4"; | |
} | |
else | |
{ | |
tableBackup="$4"; | |
} | |
fi | |
} | |
else | |
{ | |
if [ "$5" == "--pretend" ] || [ "$5" == "--import" ] | |
then | |
{ | |
echo -e " ERROR: please provide the path to csv file \n"; | |
} | |
else | |
{ | |
echo -e " ERROR: please provide the backup table name \n"; | |
} | |
fi | |
if [ !$5 ] | |
then | |
{ | |
echo -e " ERROR: please provide the type of interaction: --pretend, --import or --rollback \n"; | |
} | |
fi | |
error=1; | |
} | |
fi | |
if [[ $error -eq 1 ]] | |
then | |
exit 1; | |
fi | |
if [ "$5" == "--pretend" ] | |
then | |
{ | |
pretend='_pretend'; | |
tablePretend="$table$pretend"; | |
query=" | |
USE $database; | |
DROP TABLE IF EXISTS $tablePretend; | |
CREATE TABLE $tablePretend LIKE $table; | |
LOAD DATA LOCAL INFILE '$path' | |
INTO TABLE $tablePretend | |
FIELDS TERMINATED BY ',' | |
ENCLOSED BY '\"' | |
LINES TERMINATED BY '\n' | |
IGNORE 1 ROWS; | |
SELECT COUNT(*) FROM $table; | |
SELECT COUNT(*) FROM $tablePretend; | |
"; | |
echo -e " Query: $query \n"; | |
echo -e "NOTE: First result for COUNT is for original table $table \n"; | |
echo -e " Second result for COUNT is for pretend table $tablePretend \n"; | |
} | |
fi | |
if [ "$5" == "--rollback" ] | |
then | |
{ | |
if [ $4 ] | |
then | |
{ | |
tableBackup="$4"; | |
query=" | |
USE $database; | |
DROP TABLE IF EXISTS $table; | |
CREATE TABLE $table LIKE $tableBackup; | |
INSERT $table SELECT * FROM $tableBackup; | |
SELECT COUNT(*) FROM $table; | |
"; | |
} | |
else | |
{ | |
echo -e " ERROR: please provide the backup table name \n"; | |
exit 1; | |
} | |
fi | |
} | |
fi | |
if [ "$5" == "--import" ] | |
then | |
{ | |
if [ $4 ] | |
then | |
path="$4"; | |
else | |
{ | |
echo -e " ERROR: please provide the path to csv file \n"; | |
exit 1; | |
} | |
fi | |
datetime=$(date +"%Y%m%d_%H%M%S"); | |
tableBackup="$table$datetime"; | |
query=" | |
USE $database; | |
CREATE TABLE $tableBackup LIKE $table; | |
INSERT $tableBackup SELECT * FROM $table; | |
TRUNCATE TABLE $table; | |
LOAD DATA LOCAL INFILE '$path' | |
INTO TABLE $table | |
FIELDS TERMINATED BY ',' | |
ENCLOSED BY '\"' | |
LINES TERMINATED BY '\n' | |
IGNORE 1 ROWS; | |
SELECT COUNT(*) FROM $table; | |
"; | |
echo -e " Query: $query \n"; | |
echo -e "NOTE: First result for COUNT is for original table $table \n"; | |
echo -e " Second result for COUNT is for backup table $tablePretend \n"; | |
} | |
fi | |
mysql -u $user -p -e "$query"; | |
} | |
fi | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment