いくつかのファイルからデータを読み取り、そのデータをデータベース内の別のテーブルに挿入する必要があります。Unix シェル スクリプトは、仕事をするのに十分強力ですか?
シェルスクリプトで仕事をするのは簡単ですか、それともJavaでこれをやるべきですか?
インポートしようとしているデータが適切な形式 (カンマ区切りなど) であり、データベース サーバーに適切なコマンド ライン ユーティリティがある場合、これは問題ありません。MySQL には、ファイルの形式を記述するさまざまな引数を受け入れる「mysqlimport」コマンドライン ツールがあります。
mysqlimport \
--fields-terminated-by=, \
--ignore-lines=1 \
--fields-optionally-enclosed-by='"' < datafile.txt
perl/sed/awk ワンライナーを介してデータを渡すと、データを適切な形式にするのに役立ち、シェル スクリプトは、ファイル名のプロンプト、引数の処理などを簡単に処理できます。
Unix が提供するさまざまなコマンドライン ツールを使用することが、bash スクリプト作成の要点です。Perl、mysql などはすべてそのツールキットの一部です。
可能です:UNIXシェルスクリプトを使用してSQLスクリプトを生成し、データベースへのcliを使用してSQLスクリプトを実行します。
情報量が十分に小さい場合は、メモリ内に SQL を構築できますが、将来がどうなるかわからない (そして非常に大量のデータになる可能性がある) ため、使用しないことをお勧めします。リクエストごとに 1 つの呼び出しを使用しても、場合によっては利用可能な一括操作を利用することはできません。
できますが、たとえば mysql を使用していて、$sql に SQL 文字列が格納されていると仮定すると、少し見苦しいかもしれません。
echo $sql | mysql -u[user] -p[password] -h[host]
ps より具体的なヘルプを提供できるように、使用しているデータベースを教えていただくことをお勧めします :p
編集:実際に機能するように例の行を変更しました
もちろん、コマンド ライン SQL クライアントが手元にあると仮定すると、可能です。私は、Sybase と isql コマンドライン クライアントを使ってそれを行いました。巧妙になり、awk を介して送信したり、スクリプトを送信してその場でコマンドを生成したりすることもできます。すべてを行うのに最も効率的な方法ではないかもしれませんが、Unix ハッカーのモジョを曲げる機会はたくさんあります。
パイプはあなたの友達です。
たとえば、MySQL では次のようになります。
echo 'load data infile /path/to/the/file into table table_name ...' |
mysql -u mysql_user_id -p
仕事をするべきです。
ファイルが何らかの形で構造化されている場合 (カンマ/タブ区切りなど)。
詳細については、データベースのマニュアルを確認してください。
今はテストできませんが、次のようなものです。
echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" |
mysql -u user -psecret -h host database
シェルスクリプトで動作するはずです。ただし、データを取得することについてはわかりません
データベース管理システムによって異なります。それらのほとんどには、データをインポートするための強力なシェル ツールがあり、一部の ETL 機能も実行します。これらのツールは、一括読み込みをサポートしている場合、非常にパフォーマンスが高くなる可能性があります。通常、Java JDBC ではそれほど簡単には実行できません。
シェル スクリプト (Bash など) の主な目的は、データベースを処理することではありません。Java をお勧めします。この機会に参加して、Python や Ruby などのスクリプト言語の基礎を学びましょう。