我需要在 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?
谢谢。
最佳答案
您可以尝试的一个选项是(根据需要调整):
文件: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` ...
关于linux - 加载参数化的数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45710376/