Unix シェル スクリプトをデータベース操作に使用できますか?

StackOverflow https://stackoverflow.com/questions/71775

  •  09-06-2019
  •  | 
  •  

質問

いくつかのファイルからデータを読み取り、そのデータをデータベース内の別のテーブルに挿入する必要があります。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 つの呼び出しを使用すると、場合によっては利用できる一括操作の恩恵を受けることができません。

コマンドライン SQL クライアントが手元にあれば、もちろんそれが可能です。私は Sybase と isql コマンドライン クライアントを使用してこれを実行しました。賢くなって、awk 経由でデータを送信したり、スクリプトを送信してその場でコマンドを生成したりすることもできます。すべてを行うのに最も効率的な方法ではないかもしれませんが、Unix ハッカーの考え方を変える機会はたくさんあります。

可能ですが、少し見苦しいかもしれません。たとえば、mysql を使用していて、SQL 文字列が $sql に保存されていると仮定する場合です。

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

追記より具体的なヘルプを提供できるように、使用しているデータベースを教えていただくとよいでしょう :p

編集:実際に動作するようにサンプル行を変更しました

パイプはあなたの友達です。

たとえば、MySQL では次のようになります。

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

仕事をすべきだ。

ファイルが何らかの方法で構造化されている場合、たとえばカンマ/タブ区切りなど。

詳細については、データベースのマニュアルを確認してください。

それはデータベース管理システムによって異なります。それらのほとんどには、データをインポートしたり、一部の ETL 機能を実行したりするための強力なシェル ツールが備わっています。これらのツールは、一括ロードをサポートしていれば非常にパフォーマンスが向上する可能性がありますが、通常、Java JDBC はこれをそれほど簡単に実行できません。

今はテストできませんが、次のようなものです。

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

シェルスクリプト内で動作するはずです。データの取り出しについてはわかりませんが、

シェル スクリプト (Bash など) の主な目的はデータベースを扱うことではありません。Java を選択するか、さらに良い方法として、この機会に Python や Ruby などのスクリプト言語の基本を学習してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top