/var/log/laughingman7743.log

I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?

Python

PyAthenaでRedashのクエリランナー書いた

プルリクマージされました。ありがとうございます。 これでカジュアルにAthenaにクエリ投げまくりですね。 Enjoy!

Amazon AthenaのPythonクライアント書いた

AthenaがAPI/CLIに対応した*1ので boto3*2で少し使ってみたのですが、クエリ実行結果のパースが非常にめんどくさい。 もっとカジュアルにクエリを投げたいなってことで、PEP249*3に準拠したクライアント書きました。 使い方はJDBC版*4と変わらないです。コー…

PyAthenaJDBCでRedashのクエリランナー書いてみた

redash-athena-proxy*1を使ってRedashからAthenaにクエリを投げれる環境を作っていたのですが、どうもtimestamp型やdate型の戻り値が日付として上手く認識しない。。。 おそらくproxy側のGSONの日付型のシリアライズ設定の問題かと思われるのですが、調べる…

S3DistCpをリモート実行したい

S3DistCp*1をよく使うのですが、 複数のS3DistCpを実行する場合、クラスタにステップを追加する形だと1ステップづつシーケンシャルに実行され、かなり待たされることになります。 ステップを追加する形ではなく、SSHでリモート実行できると任意のタイミング…

PythonからAmazon AthenaにJDBC接続するラッパー

暇を持て余していたので作ってみました。 バージョン番号は諸事情により1.0.1となってしまいました。(心温かみのある手作業でのリリースはまずい。。。) 既知の問題点 Decimal型をフェッチすると落る ドライバのバグのようです。フォーラムにも上がってまし…

PythonでAmazon Athenaにつなぐ

Amazon Athena*1への接続は現状JDBCしかサポートされていない。。。やっぱりPythonからつなぎたいですよね! PythonからJDBCでつなぐには、Py4J*2やJPype*3あたりを使うと良さそうですが、Py4JはJavaでGatewayServerを作成し、別プロセスで起動しなければな…

AmazonECSデプロイスクリプトをPythonで再実装してみた

シェルスクリプト*1つらいってことでPythonで再実装してみました。基本的な使い方は変わらないです。(古いタスクが終了するまで待つとかなり時間がかかる場合があるので、forceフラグで新しいタスクのlastStatusがRUNNINGになったら古いタスクを強制的に止め…

PythonでRequestsを使ったSlackのAttachments通知でハマった

以下のようにattachmentsの中身をjosn.dumpsしてやればOK。 POST(application/x-www-form-urlencoded)で送っているので、ネストしたオブジェクトはJSON形式の文字列にする必要があります。 POSTでもContentTypeをapplication/jsonで、BodyをJSON形式で送るよ…

Redshift便利スクリプト

AWSLabsのGithubリポジトリにいろいろと便利なスクリプトがあります。 日次でVacuum処理やAnalyze処理を夜間に走らせたいということで、 Analyze & Vacuum Schema Utility*1をAirflow*2で使いたいなと思いましたが、 クラス化されていなかったり、ログがファ…

Boto3でEMR

最近HiveでETL処理とかするためにEMRをよくさわっています。Boto3からクラスタ起動したりステップ追加したりしています。 Boto2だとクラスタ作成時にセキュリティグループの設定等をapi_paramsに追加する形になり非常にわかりにくいです。 Boto3だとJSONライ…

Elasticsearchに空間データを突っ込む

例のごとく国土交通省のデータをダウンロードしてきてElasticsearchに突っ込んで検索してみます。 国土数値情報ダウンロードサービス GDALのドキュメント*1を参照するとogr2ogrコマンドでシェープファイルを直接Elasticsearchに投入できそうですが、 マッピ…

PythonでJinja2を使ったメール送信

Pythonでメール送信時に、CCやBCCを指定したい、さらに複数指定したい、差出人名を指定したい、返信先を指定したい、ファイルを添付したい、タイトルやメッセージを動的にしたい...etcといった場合に結構コードがとっ散らかってしまうので、かなり前に書いた…

PythonでPostGIS

GeoAlchemy2*1を使うと良さそう。 pipでPsycopg2*2、SQLAlchemy*3、GeoAlchemy2をインストールします。 PostgreSQLとQGISが使える環境が必要なので作ります。 MacでPostgreSQLやQGISの環境を作るには、HomebrewCask*4で簡単に済ませてしまうのが良いです。 P…

MacからPythonでOracleにつなぐ

cx_Oracle*1を使います。 cx_Oracleのビルド・インストール*2には、リンク先の通り少し環境を作る必要があります。 GCCが必要なので以下のコマンドでXcode Command Line Toolsをインストールします。 Oracleが配布しているInstant Client Package*3のBasicと…

PythonでRabbitMQ - Consumerの実装

Pika*1を使って非同期処理の実装をするのが良さそう。 ドキュメントに実装例が充実しています。 Usage Examples — pika 0.9.13 documentation 非同期処理の実装例もあるのでそれを利用します。 Asynchronous consumer example — pika 0.9.13 documentation R…

PythonライブラリのWindowsバイナリパッケージ

Python Extension Packages for Windows - Christoph Gohlke 非公式ですがバイナリパッケージを大量に提供してくれています。 pipでのインストールではVC++の環境が必要なライブラリもあったりするので非常にありがたいです。 Enjoy!

PythonでHTMLをPDF出力するたった1つの方法

HTMLをPDFに変換して出力するにはwkhtmltopdf*1を使うと言語問わず簡単に出力できますが、 PythonであればPyQt*2のQtWebkitを使うことでも出力できます。 どちらにしてもQtWebkitのレンダリングエンジンを使っていることに変わりはないです。PyQt4を使ってい…

Supervisorのインストール

RHEL6.5にインストールする機会があったのでその時のメモ インストール pip でインストール オフィシャルリポジトリからRHEL用設定ファイルを取得 SysVinit用起動スクリプトを登録 設定ファイル echo_supervisord_confコマンドで設定ファイルの雛形を出力 設…