日記_20240307

今日も今日とて障害対応。
朝イチで夜間処理のログの確認を行い、ビジネス部の偉い人向けに報告資料を作成した。確認作業そのものより資料に貼るためのキャプチャを取ったり、資料の体裁を整えたりといった部分の方が時間が掛かってしまったように感じるが、自分で確認作業をしていない人が見るだけで分かる資料を作ろうと思うとまぁそんなものなのかもしれない。
雑に貼り付けると数字だけで構成される文字列の先頭の0を捨てたり、文字列長が長い場合は指数表記にしてしまったりとExcelくんには困ったものです……。(特徴を把握しきれていない僕が9割くらい悪い気はしている、ごめん。)
それはそれとして重複排除や入力ファイルと出力結果の突合などではだいぶお世話になっているので上手く付き合っていきたいところ。
手に馴染んだエディタでの正規表現による置換等と併用して使い分けていくのがベストだろうか。

上の人向けへの資料作成や、その資料を投影しながら説明している中で情報の出し分けはやはり難しいなぁと感じた。その人の役職やパーソナリティを踏まえて、関心のある/伝えなければならない情報は異なるものの、毎回「あなたが知りたいことは何ですか」という問答をするのも流石にナンセンスなので気合いで汲み取っていく必要がある。(伝えてくれれば楽なのは間違いないけど。)
同僚と一緒にログ解析等の作業を行っている際には、その辺りを気にしなければならないオーバーヘッドは特に感じなかったので、同じ役職かつ付き合いも長くお互いの波長も分かっている相手というのは非常にありがたいなと感じた。
障害対応中ということでだいぶピリピリしていたので、その部分で楽をさせてもらえたのはかなり大きいと思う。
自分が伝える側の時は相手の欲しがってるところにアンテナを立てること、自分が聞く側の時は逆に「こういった理由で、この情報が欲しい」というのを表明していくこと、この2点を頑張っていきましょう。

ログ解析には例によって例のごとく、AWSのサービスであるAthena(およびGlue)を使い倒した。
これらを使うとS3に放り込んだログファイルなどをSQLで検索・集計が出来る優れもので、本当に素晴らしい。これが無ければ危うくgrep職人になるところだった。
ログの形式の問題でglueで上手くスキーマに落とし込めないところもあったが、AthenaからSQLを投げてログの特定行を抽出→CSVでDL→いつものvscodeでエイヤソイヤ→さらにそれを自前のプログラムで成形、というパターンもあったが、膨大の量のログから必要な行の抽出を行うのをSQLで記述でき、処理性能に不満が無いレベルだったのでとても助かった。
Athenaの素敵なところはWHERE句でパーティションの値を指定すると、検索対象の範囲をそのパーティションの中に絞り、費用・時間の面で最適化されるところ。

If you query a partitioned table and specify the partition in the WHERE clause, Athena scans the data only from that partition. For more information, see Table location and partitions.

https://docs.aws.amazon.com/athena/latest/ug/partitions.html#partitions-considerations-limitations

……なのだが、パーティションを絞ったつもりでもINやOR演算子で指定するとインデックスが効かないという仕様もあるので注意が必要そう。
不等号よりINやORの方がパフォーマンスが良さそうという先入観でクエリを書いていたが、ドキュメントによるとパーティションの絞り込みが使える分不等号の方がこうパフォーマンスみたい。
(日記を書きながら調べて知った。クエリをチューニングした気でいたけどあんまり意味ないことしてたみたい……)
パーティションは分かっているけど複数に跨り、かつ、不等号やbetweenでも適切なレンジにできない場合はクエリを分けて実行し、その抽出結果を自分でマージしてからこねくり回すのが良さそう?

Indexes on Numeric, String, and Date data types support =, >, >=, <, <= and between operators. The indexing solution currently only supports the AND logical operator. Sub-expressions with the operators "LIKE", "IN", "OR", and "NOT" are ignored in the expression for filtering using an index. Filtering for the ignored sub-expression is done on the partitions fetched after applying index filtering.

https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html#partition-index-limitations


機械翻訳の日本語ドキュメントが分かりづらくて原文の方がマシというケースは多々あるけど、それはそれとして英語が苦手なので、どうにかしないとこの先厳しそうな匂いがしてきて参った。


小さな勇気 / えのぐ

えのぐちゃんの新EPより。
また素敵な曲が出てきて嬉しいなぁ……としみじみしながらクレジットを見ていたら出典に「えのぐ合同会社」の文言があって涙が零れた。これからも応援していきます。
まだチケ握れてるわけじゃないけど、まずはVRide!めちゃくちゃ楽しみにしています。

この記事が気に入ったらサポートをしてみませんか?