【发布时间】:2016-04-19 05:06:52
【问题描述】:
有没有办法在 mysql db 中自动将 .csv 导入 SQL 表?我知道如何手动执行此操作,但有一种情况是每晚从 PeopleSoft 导出 .csv,我们希望将其自动导入到 Linux 环境中的 SQL 表中。请给我一个示例脚本来做到这一点.. 如果有办法,谁能指出我的方向(我不是 SQL 专家)!!
【问题讨论】:
有没有办法在 mysql db 中自动将 .csv 导入 SQL 表?我知道如何手动执行此操作,但有一种情况是每晚从 PeopleSoft 导出 .csv,我们希望将其自动导入到 Linux 环境中的 SQL 表中。请给我一个示例脚本来做到这一点.. 如果有办法,谁能指出我的方向(我不是 SQL 专家)!!
【问题讨论】:
您可以尝试创建存储过程, 将加载 csv 查询写入 SP。 创建事件以调用 SP。 我希望这有帮助。
CREATE EVENT IF NOT EXISTS `load_csv_event`
ON SCHEDULE EVERY 23 DAY_HOUR
DO CALL my_sp_load_csv();
另外,您可以直接创建一个事件并将加载查询写入其中。
【讨论】:
您可以创建一个 crontab 作业,例如:
* * * * * /path/to/load_script.sh
load_script.sh 可能是这样的(别忘了让它可执行):
#!/bin/bash
IMPORTED_FILE_PATH=/path/to/your/imported/file.csv
TABLENAME=target_table_name
DATABASE=db_name
TMP_FILENAME=/tmp/${TABLENAME}.cvs
# do nothing if imported file does not exist
[ -f "$IMPORTED_FILE_PATH" ] || exit 0
# if temporary file exists, then it means previous import job is running. Also do nothing
[ -f "$TMP_FILENAME" ] && exit 0
# Move it to tmp and rename to target table name
mv "$IMPORTED_FILE_PATH" "$TMP_FILENAME"
mysqlimport --user=mysqlusername --password=mysqlpassword --host=mysqlhost --local $DATABASE $TMP_FILENAME
rm -f "$TMP_FILENAME"
这只是一个例子(未经测试)。您应该添加错误处理、日志记录等。 另请查看mysqlimport的手册
【讨论】: