Skip to content

Instantly share code, notes, and snippets.

@Exadra37
Last active August 29, 2015 14:12
Show Gist options
  • Save Exadra37/355b26e5d116861cfba4 to your computer and use it in GitHub Desktop.
Save Exadra37/355b26e5d116861cfba4 to your computer and use it in GitHub Desktop.
Import CSV file to database and creates a backup table.
#!/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