読者です 読者をやめる 読者になる 読者になる

ログマニアックス

日々学んだこと、気づいたことをメモ代わりに残していければ。カバー範囲は割と広めです。

ShellとPythonとSQLと…

運用

テキストデータを集約して、DBに格納するのに、

あんまりイケてないけど、

ShellスクリプトPythonとストアド・プロシージャを組み合わせて簡単にスクリプトを書いてみた。

基本パクリコードの塊だけど。

メモ的にエントリー。多分以外と同じことしたい人は多い気もする

## Shellでデータ取得と全体処理

* コメントでつけている通り、scpで帯域をしぼりつつデータをコピー

* 事前に必要に応じて公開鍵などをコピーしておく

* パスワードを聞かれる際にexpectコマンドで自動対応

* 取得したファイルは圧縮されているので、順繰りに解凍

* 解凍したファイル名が同じだと上書きされてしまうので、ファイルごとにフォルダを作って対応

* 出力されたファイルのマージにはcatコマンドを利用。

* マージされるファイルの順番は一定じゃないかもしれないけど、気にしない

## Pythonでストアド・プロシージャをキック

* pymssqlモジュールでサーバーに接続

* やっていることは単にストアド・プロシージャをキックするだけ

* コマンドラインSQLサーバーへのアクセスが使えるならそれでいい気もするけど。

## ストアド・プロシージャでデータ取り込み

* UNIXで作成したデータのため、改行コードは'0x0a'を利用

* MERGEコマンドでいわゆるUPSERT処理を行なっている

## 参考サイト群

* [scp を使う方法](http://www.sodan.ecc.u-tokyo.ac.jp/2000/FAQ/filetransfer/scp.html)

* [expectで対話型シェル - runny egg’s diary](http://d.hatena.ne.jp/lake_michigan/20110412/1302600915)

* その他いろいろ

* [pymssql - simple MS SQL Python extension module](http://pymssql.sourceforge.net/)

* [sql 1="-" 2="bulk" 3="insert" 4="imports" 5="one" 6="line," 7="then" 8="terminates" 9="-" 10="Stack" 11="Overflow" language="server"][/sql](http://stackoverflow.com/questions/11247437/bulk-insert-imports-one-line-then-terminates)

* [MERGE を使用したデータの挿入、更新、および削除](http://msdn.microsoft.com/ja-jp/library/bb522522(v=sql.105).aspx)

* [SQL Server 2008から使えるようになったMERGEの記述方法を教えてください - Yahoo!知恵袋](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1456609759)