我需要在linux环境中将平面文件中的数据加载到mariaDB中。 我打算将mariaDB脚本放在shell文件中。然后从cron调用shell。
mariadb脚本如下所示:
set @path = (select path_file from param);
set @tbl = (select table_name from param);
set @x = concat(
'LOAD DATA LOCAL INFILE ',
@path,
' INTO TABLE ', @tbl,
' (@row) set id = trim(substr(@row,1,2)), name = trim(substr(@row,3,19)), address= trim(substr(@row,22,20))'
);
prepare y from @x;
execute y;
deallocate prepare y;
当我直接在heidisql上执行脚本时, 错误显示:
this command is not supported in the prepared statement protocol yet
是否有人有更好的方法在不使用任何ETL工具的情况下定期(预定)在linux环境中将数据从平面文件加载到MariaDB中?
感谢。
答案 0 :(得分:0)
您可以尝试的一个选项是(根据需要调整):
档案:load_data.sh
path=$(mysql -u ${mysql_user} -p${mysql_password} -s -N <<GET_PATH
SELECT '/path/to/file/data.csv';
GET_PATH
)
tbl=$(mysql -u ${mysql_user} -p${mysql_password} -s -N <<GET_TABLE
SELECT 'table';
GET_TABLE
)
# mysql -u ${mysql_user} -p${mysql_password} -s -N <<LOAD_DATA
# LOAD DATA LOCAL INFILE '${path}'
# INTO TABLE \`${tbl}\` ...
# LOAD_DATA
# TEST
cat <<LOAD_DATA
LOAD DATA LOCAL INFILE '${path}'
INTO TABLE \`${tbl}\` ...
LOAD_DATA
命令行:
$ ls -l
-r-x------ load_data.sh
$ ./load_data.sh
LOAD DATA LOCAL INFILE '/path/to/file/data.csv'
INTO TABLE `table` ...
答案 1 :(得分:0)
为清楚起见,将尽可能多的SQL写入STORED PROCEDURE
。 然后使用bash来调用该SP。