我必須從某些文件讀取數據並將數據插入到數據庫中的不同表中。 Unix shell腳本足以勝任這項工作嗎?Unix shell腳本可以用來操作數據庫嗎?
在shell腳本中做這項工作很容易,還是應該在Java中做這個工作?
我必須從某些文件讀取數據並將數據插入到數據庫中的不同表中。 Unix shell腳本足以勝任這項工作嗎?Unix shell腳本可以用來操作數據庫嗎?
在shell腳本中做這項工作很容易,還是應該在Java中做這個工作?
如果您要導入的數據格式合理(例如逗號分隔),並且數據庫服務器具有合理的命令行實用程序,則這應該不成問題。 MySQL的有「mysqlimport的」命令行工具,將接受描述文件的格式的各種參數:
mysqlimport \
--fields-terminated-by=, \
--ignore-lines=1 \
--fields-optionally-enclosed-by='"' < datafile.txt
通過傳遞數據的Perl/SED/AWK單行可以得到它在正確的格式幫助,並且shell腳本可以輕鬆處理文件名提示,處理參數等。
使用Unix提供的各種命令行工具是bash腳本的完整點。 Perl,mysql等都是該工具包的一部分。
現在不能測試,但這樣的:
echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" |
mysql -u user -psecret -h host database
在shell腳本應該工作。不知道如何獲取數據雖然
它是可能的: 使用您的UNIX腳本,生成一個SQL腳本,並使用CLI到數據庫執行SQL腳本。
如果信息量足夠小,您可以在內存中構建SQL,但是我建議您不要這樣做,因爲您永遠不知道未來會發生什麼(並且數據量可能非常大)。每個請求使用一個呼叫不允許您從有時可用的批量操作中受益。
可以,但如果你使用MySQL它可能是一個有點難看,例如和假設你已經存儲在$ SQL
echo $sql | mysql -u[user] -p[password] -h[host]
附:SQL字符串這可能是一個好主意,告訴我們什麼數據庫您使用的,所以我們可以提供更具體的幫助:P
編輯:改變的例子線所以它的實際工作
殼牌腳本(bash或類似)主意圖不是處理數據庫。選擇Java甚至更好,藉此機會學習Python或Ruby等腳本語言的基礎知識。
管是你的朋友。
例如,在MySQL:
echo 'load data infile /path/to/the/file into table table_name ...' |
mysql -u mysql_user_id -p
應該做的工作。
如果您的文件以某種結構構建,例如逗號/製表符分隔等。
有關詳細信息,請查看數據庫手冊。
格式化提示:所有行以至少3個空格開頭的段落將被格式化爲「代碼」。我建議用你的例子來做這件事,因此它更加突出。這是一個很好的答案! – 2008-09-16 14:58:17
當然,你可以,假設你有一個命令行SQL客戶端方便!我已經用Sybase和isql命令行客戶端完成了它。你甚至可以聰明地通過awk發送東西,併發送腳本來即時生成命令。它可能並不是最有效的方法,但是有很多機會來展示你的Unix黑客魔咒。
這取決於您的數據庫管理系統。他們中的大多數具有強大的shell工具來導入數據,甚至可以完成一些ETL功能。如果這些工具支持批量加載,那麼這些工具甚至可能非常高效 - 通常Java JDBC不能那麼容易地完成。
unix shell是一種腳本語言,您並不總是有更好的腳本語言可用。 Java不會那麼容易,並且可能不如 (woohoo評論現在在IE6中工作) – Jean 2008-09-16 12:48:44