public note

Python

Python のユニットテストで decorator に patch をあてる

ユニットテストでデコレータを差し替える方法を学びました。 このような、print や sleep するデコレータを例にとります。 import time def my_decorator(message="hi", sleep=0): def _my_decorator(func): def wrapper(*args, **kwargs): print("before") …

PyPI への Python パッケージリリース

いつも、どうやっているのだっけ...となるので備忘録代わりに。パッケージ管理ツールは Poetry を使っています。 (初回のみ) TestPyPI リポジトリの追加 poetry config repositories.testpypi https://test.pypi.org/legacy/ パッケージのビルド poetry buil…

PyCon APAC 2023 Day1 で ModuleNotFoundError に関する発表をしました

参加記はまた別で書きます。 会場では 30 名くらい?の方々が聴きにきてくれました。ありがとうございます。 発表したこと タイトル 2023/10/27 16:20 ~ 16:35 (Asia/Tokyo) ModuleNotFoundErrorの傾向と対策:仕組みから学ぶImport 2023-apac.pycon.jp スラ…

sqlparse で SELECT 文をパースする

SELECT 文にあるエイリアスを特定したくて、sqlparse を使ってパースしてみました。 github.com sqlparse の主要クラス sqlparse でクエリをパースするときに、下記のクラス構造を把握しておくと挙動を掴みやすくなると思います。クラスごとの一文は、実装を…

Apache Beam の Side input パターンで LEFT JOIN する

Apache Beam で複数のデータソースから取得したデータを、SQL でいう LEFT JOIN する方法を試しました。 一方がストリーミングデータで、もう一方がデータウェアハウスから取得したデータといった場面を想定しています。 どうやるのか調べたところ、1つのパ…

Poetry dev-dependencies が v1.2 で deprecated になっていたのでこれからは group を使う

いつの間にか、poetry add --dev や poetry install --no-dev などで指定する開発用パッケージを示す dev-dependencies が Deprecated になっていることに気づきました。 python-poetry.org 1.2 より前は [tool.poetry.dev-dependencies] という TOML テーブ…

Apache Beam Python SDK でパイプラインのテストコードを書く

Apache Beam SDK には testing パッケージが用意されており、これを使うことで Beam パイプラインに対するテストコードを書けます。 この記事では、Python SDK でのテストを試してわかったことをまとめています。誤りがありましたらご指摘いただけると嬉しい…

poetry publish コマンドで keyring の ModuleNotFoundError が起きたときの対応メモ

Poetry は依存するパッケージの管理だけでなく、PyPI に公開するのも簡単にできるのでとても便利です。 そんな中、poetry publish コマンドでエラーが発生するようになってしまいました。暫定対応により、現在は publish できています。そのときの対応メモが…

Stairlight v0.3.0: データソースとして Redash に対応しました

データリネージツール Stairlight の v0.3.0 を公開しました。 Stairlight とは テーブルレベルのデータリネージツールです。詳しくはこちらの記事をご参照ください。 ts223.hatenablog.com ts223.hatenablog.com 主なアップデート データソースとして Redas…

Stairlight v0.2.0 を公開しました

データリネージツール Stairlight の v0.2.0 を公開しました。 Stairlight とは テーブルレベルのデータリネージツールです。詳しくはこちらの記事をご参照ください。 ts223.hatenablog.com ts223.hatenablog.com 主なアップデート ラベル機能 同じテーブル…

データリネージツール Stairlight でテーブルの依存関係をグラフにする

この記事は、datatech-jp Advent Calendar 2021 の6日目の記事です。 こんにちは、GMOペパボ株式会社でデータエンジニアをしています、@tosh2230 と申します。 5日目は よしむらさんのデータマネジメント成熟度アセスメント、データ利活用機運アセスメントを…

Stairlight というデータリネージツールをつくった

Stairlight*1 という、テーブルレベルのデータリネージができるツールをつくりましたので、その特徴や使い方について書きます。 github.com 背景 ETL(Extract, Transform, Load) と呼ばれる一連のデータ加工プロセスにおいて、バッチ処理での Transform は、…

"Loggingモジュールではじめるログ出力入門" で PyCon JP 2021 に登壇した

この度、PyCon JP 2021 で発表をするという機会に恵まれました。 発表内容やプロポーザルを出した動機、感想と振り返り、そして多方面への謝辞を述べます。 発表資料 ソースコード 発表内容 プロポーザルを出した動機 感想と振り返り 謝辞 @amedama さま、@n…

Python logging levelを示す数値とその名称はlogging.getLevelNameで相互変換できる

結論 Python の logging.getLevelName 関数で、ログレベルを表す数値とその名称に当たる文字列を相互変換することができます。関数名の印象だと 数値 -> 名称 の一方向っぽいのですが 、実は双方向で変換できます。 $ python Python 3.8.11 (default, Jul 31…

Cloud Dataflow と Cloud Pub/Sub で Exactly-once なストリーミングインサートを

[前回の記事](https://ts223.hatenablog.com/entry/dataflow-beam) では、Cloud Dataflow と Apache Beam に入門しました。その続きとして、今回は BigQuery に対してストリーミングインサートをしてみます。また、Cloud Pub/Sub と組み合わせることで Exact…

Cloud Dataflow と Apache Beam に入門した

BigQuery にストリーミングインサートしたい気持ちが高まってきて Cloud Dataflow と Apache Beam に入門しました。Cloud Pub/Sub -> Cloud Dataflow -> BigQuery のルートで取り込むにあたり、事前知識を得ることが目的です。 Apache Beam 特徴 Tour of Bea…

CentOS 7 に PyAudio をインストール

Cent OS 7 に PyAudio を インストールしたときにちょっともたついたのでメモ。 PyAudio は、マイクから得た音声データを Python でリアルタイムに取得できるライブラリ。 pypi.org pip install pyaudio や poetry add pyaudio すればいいと思いきやだめだっ…

Amazon SQS と Cloud Pub/Sub のインターフェースを統一する

はじめに 小品ですが、ライブラリをつくっています。 その特徴やつくっている背景、解決したいことについてまとめています。 github.com 特徴 名前のとおり、キューのハブです。 Amazon SQS と Google Cloud Pub/Sub を同一のインターフェースで扱うことがで…

Cloud Pub/Sub でキューの長さを確認する

Cloud Pub/Sub で作成したTopicのサイズを確認する方法を調べていたのだが、ちょっと癖があったのでメモ。 Python での実装 import os from datetime import datetime from google.cloud import monitoring_v3 from google.cloud.monitoring_v3 import query…

sfb v0.1.3

SQL tester and cost estimator for Google BigQuery pypi.org v0.1.3 更新内容 yaml 設定ファイルにGlobalsが加わり、デフォルト設定を記述できるようにしました。 これにより、SQLファイルごとに何度も同じ設定を繰り返さなくてよくなりました。

sfb v0.1.2 を公開した

公開しました(してました)。 sfb? v0.1.2 v0.1.1 sfb? BigQueryに対するクエリ静的解析、クエリコスト試算を簡単にできるツールです。 pypi.org v0.1.2 標準入力を受け取れるようになりました。 SQLファイル、クエリ文字列のどちらが来ても自動で判別します…

BigQueryのオンデマンドクエリ料金を見積るPythonパッケージをつくった

BigQueryのオンデマンドクエリ料金を見積もるPythonパッケージをつくりました。 経緯 つくったもの これはなにか 導入方法 実行方法 入力 出力 想定ユースケース 今後の予定 Development Status 経緯 BigQueryをオンデマンドクエリ料金で運用していると、作…

pandas MultiIndex DataFrameからの抽出方法、ついでにMatplotlib

pandasのマルチインデックスなDataFrame(以下、MultiIndex)からデータを抽出する方法と、Matplotlibでの可視化について書きます。 これまであまり経験がなく、別にいつもと変わらないっしょ!とやってみたところ(案の定)うまくいかなかったので、 そこで得た…