1

我必须从一些文件中读取数据并将数据插入数据库中的不同表中。Unix shell 脚本是否强大到足以胜任这项工作?

在 shell 脚本中完成这项工作是否容易,还是我应该在 Java 中完成这项工作?

4

8 回答 8

3

如果您尝试导入的数据采用合理的格式(例如,逗号分隔)并且您的数据库服务器具有合理的命令行实用程序,那么这应该没有问题。MySQL 有“mysqlimport”命令行工具,可以接受描述文件格式的各种参数:

mysqlimport \
    --fields-terminated-by=, \
    --ignore-lines=1 \
    --fields-optionally-enclosed-by='"' < datafile.txt

通过 perl/sed/awk 单行程序传递数据有助于以正确的格式获取数据,并且 shell 脚本可以轻松处理提示文件名、处理参数等。

使用 Unix 提供的各种命令行工具是 bash 脚本的重点。Perl、mysql 等都是该工具包的一部分。

于 2008-09-16T13:10:00.467 回答
2

有可能:使用您的 unix shell 脚本,生成一个 sql 脚本并使用 cli 到数据库来执行 sql 脚本。

如果信息量足够小,您可以在内存中构建 SQL,但我建议您不要这样做,因为您永远不知道未来会发生什么(而且它可能是非常大量的数据)。每个请求使用一个调用不允许您从有时可用的批量操作中受益。

于 2008-09-16T12:43:46.660 回答
2

你可以,但它可能有点难看,例如,如果你使用 mysql 并假设你有一个 SQL 字符串存储在 $sql

echo $sql | mysql -u[user] -p[password] -h[host]

ps 告诉我们您使用的是什么数据库可能是个好主意,这样我们可以提供更具体的帮助:p

编辑:更改了示例行,使其实际工作

于 2008-09-16T12:44:10.823 回答
2

当然可以,前提是您手边有一个命令行 SQL 客户端!我已经用 Sybase 和 isql 命令行客户端完成了它。您甚至可以变得聪明并通过 awk 发送内容并发送脚本以即时生成命令。这可能不是做所有事情的最有效方式,但有很多机会来发挥你的 Unix 黑客魔力。

于 2008-09-16T12:50:34.943 回答
1

管道是你的朋友。

例如,在 MySQL 中:

echo 'load data infile /path/to/the/file into table table_name ...' | 
    mysql -u mysql_user_id -p 

应该做的工作。

如果您的文件以某种方式结构化,例如逗号/制表符分隔等。

有关详细信息,请查看您的数据库的手册。

于 2008-09-16T12:48:07.430 回答
0

现在无法测试,但类似:

echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | 
    mysql -u user -psecret -h host database

在 shell 脚本中应该可以工作。虽然不知道如何从中获取数据

于 2008-09-16T12:42:39.003 回答
0

这取决于您的数据库管理系统。他们中的大多数都有强大的 shell 工具来导入数据,甚至执行一些 ETL 功能。如果这些工具支持批量加载,它们甚至可能非常高效——通常 Java JDBC 不能那么容易地做到这一点。

于 2008-09-16T19:07:24.880 回答
-2

Shell 脚本(Bash 或类似)的主要目的不是处理数据库。选择 Java 甚至更好,利用这个机会学习 Python 或 Ruby 等脚本语言的基础知识。

于 2008-09-16T12:44:46.190 回答