linux - 加载参数化的数据文件

标签 linux shell mariadb

我需要在 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/

相关文章:

linux - 我在哪里可以获得在 redhat linux 上安装 f2c 的文件?

linux - 从 bash 脚本将变量重新导出到环境

linux - 在 Linux 脚本中的内联 echo 命令中访问主机变量

linux - shell 脚本 : how to use getopts to get last arguments and unhandle arguments

linux - 在大文件中搜索并添加模式

java - 如何在Linux中执行Shell脚本?

mysql - 请求帮助通过 python 读取 mariadb 中的 blob 数据类型

Java 无法连接到本地主机上的 MariaDB 数据库

mysql - 在 Mysql/Mariadb 中删除 --temporary-- 索引

c++ - 我如何获得可用于在 Linux 上的异​​步套接字上读取的字节数?