Pythonは本当に必要か?Rustで作るデータパイプライン

はじめに 昨今のデータ基盤の流行りはELTだと思いますが、つまりT処理をBigQueryやSnowflakeといったDWHサービス上で実行してしまうケースが多く、ELはAPIやほかサービスからデータを引っこ抜いてDWHサービスに生データに近い形で登録しておきたいといったことがだいぶ多いのではないかと思っています。 そして最近はfivetran, troccoのような便利なSaaSもありその部分の実装を行う機会はだいぶ減ったとは思うのですが、それでもSaaSだと高い、オープンソースだと要件に合わないようなことも多くあり自前Pythonで実装だ!となることもまだまだあるのかと思います。 Pythonはデータ分野で超便利な言語で、チームのケイパビリティなどを考慮しても採用しやすいと思いますが、一方でしばしばシンプルな処理なのにメモリを食いつぶしツライ・・・みたいことが起こりがちだと思っています。 今回はデータパイプラインのEL処理をRustで実装することで、 どの程度性能面のメリットを得られる可能性があるのか? 実装はシンプルにできるのか? というところに焦点を当てて検証してみようと思います。 ※ Rustはこのために勉強した感じなので、色々とアレなところがあったらすみません(自衛) パフォーマンス比較 まずシナリオとして以下を想定して実験してみます ローカルにあるCSVをBigQueryにinsert BQ Loadではなく、メモリ上でCSVを解釈し逐次insertする BQにロードするための前処理をすることが多いという想定(ロードした時刻の付与とか、UTF変換とか) とりあえず少しまとまったデータが欲しかったので、雑にPythonに作らせます(ChatGPTに作ってもらいました) データ生成用コード(Python) 1import csv 2import random 3import time 4 5# Configuration 6num_rows = 1_000_000 7output_file = "large_data.csv" 8 9# Define sample data 10names = ["Alice", "Bob", "Charlie", "David", "Eve"] 11countries = ["USA", "Canada", "UK", "Australia", "Germany", "Japan"] 12 13# Generate CSV 14start_time = time.time() 15with open(output_file, mode="w", newline="") as file: 16 writer = csv....

2024-12-09

MBTIベーシックセッションの所感

前提 あくまで感想です これです https://www.jppjapan.com/session/ 他の方の話等もとても面白かったのですが、プライベートの含むため終わったあとの自分の考えだけに絞って書きます 自分の結論 自分の理解を深めるきっかけになりうる最高のセッションだった。 4文字の当てはめそのものには特に意味を感じなくなった 自分の4文字について 結論、利き手はINFPで良さそう これによりわかることは、自分は自然にしているとそういう認知モデルの中で動きがちということだけである 利き手だからうまいとは限らない。実際、僕はFiを悪いものと思い込んできたので、最近までうまく付き合えてなかった ただ、実際のところそう考えるのが自然なので、うまく付き合えないと当然良くはない ただ別に、生きていくためにINFPしていればいいかというとそんなわけもなく、都合よく生きていくためにはESTJも必要である 実際、自分の場合S/Tはそれなりに使う機会も多いと思う。そして別にそれはそれで僕は大切だと思っているので、ISFPでもINTPでもISTPでもぶっちゃけ構わない ただ、あの説明を読んだときにしっくりくるのがINFPというだけである まあただ、利き手は普通の人よりうまく使っていける可能性がある部分だとは思うので、INFPらしさも意識しながら、別にそれに固執しない今まで通りのスタイルではいようと思う 他人の4文字について 今回のようなセッションを通した上で、しっかり考えた4文字をお持ちの方の4文字は利き手として信じるのは良さそう そういう認知をしがちな人と思えばそれに合わせたコミュニケーションは取れる ただ別に、その人もそれが利き手ってだけで他のことをしないわけじゃない ということ思うと、コミュニケーションに活かそうとするとコンフリクトしたときはお互いがどういう軸で喋っているかを認知する軸にしたり、逆に意見は合うんだけどうまく行かない場合は別の側に盲点があると言った部分を精査するツールとして活かすことができればとても良さそうに思う まあなんで、私ENTPなんです!サイトが言ってました!とかは、ただの占いなのである あとしっかり考えた結果INFPの人がいて、例えば行動がINFPらしくなくてもそれはペルソナの中で行動しているだけで別にその人が本心からやりたくてやっているわけではないという点はしっかり注意する 利き手は右手です、だからといって左手が利き手のあなたより右手でうまく字がかけるとは限らない だから、自分がNも発達したSだとして、Nだが自分より未熟だったとしてその人がNではないという理由にはならないのである

2024-01-31

雑記

今週の考え事 コーヒーを最初に頑張ろうと思ったときのきっかけは、よくある話で毎回味のブレが大きくておいしかったり、とてもおいしくなかったりしたからである。 色々学んだ結果、完璧な計測はできないけれども同じ道具でちゃんと測って入れればそれなりに信頼できるデータが得られるというところで、 測れるもの(ポットのお湯の温度や粉の挽目、量、淹れるときの落ちる速度もそうだし、淹れるレシピも)は測るようにしているし、それからのほうがある程度安定した味わいになっているようには思う。 正確に言うと味的に外しても調整がしやすくなった、という印象である。 結局これは何にでも言える話で、正しいやり方を学びつつ実験しろっていうひたすらに当たり前な話なのだが、正しいやり方っていうのが少し難しいなぁと思った。 学校教育のお陰で「正解がある」ということを意識してしまっているため、その正解を探すのが癖になっているように思う。 実際、もしかすると突き詰めればどこかに正解があるのかもしれないが、そもそも解答はどうやっても見ることができない以上、正解をもとめるというよりは計測可能な方法を正しい方法として試していくしかないんだろうなぁ、と思う。 今週の本 コーヒーの科学 https://amzn.asia/d/gXdXkI8 上で書いた考え事は、結局この本を読んだ結果しっくり来たような気がする。とても良い本だった。 ビジュアル スペシャルティコーヒー大事典 2nd Edition 普及版 https://amzn.asia/d/iqneQY5 コーヒーの科学と同時に買って読み始め。 きれいで良い本なんだけど、コーヒーに関わる労働の話を読んでいて、俺はコーヒーを飲んでいていいんだろうか、という気持ちになった。 今週のピクミン4 長男(見る専)がやってるの見たいということで、体験版からの購入 ライトな感じなのと、やり直しがしやすいので死に覚えがしやすくとても良い。 日没の音楽が可愛いと評判 でかけた息子が祖母にねだって買ったらしい。妻には言わなかったらしくさすがである。

2024-01-28

雑記

今週のおうち インフルに振り回された。 (先週だけど) 1/13(土) 長男がインフルにかかる 1/15(月) この日までしっかり隔離しないとなので、休みとって長男と一日過ごす 1/16(火) 努力も虚しく次男もインフル 1/19(金) そして妻もインフル 1/20(土) 次男(11ヶ月)に後追いされて嬉しかった 今週の豆 China Yunnan Simao/Anaerobic Honey Process-Infused Strawberry/Light (Lonich, ) https://lonich.official.ec/items/82112362 香りはストロベリーチーズケーキ。 でも奥にシンプルなコーヒーらしい苦味がある。(中国雲南の豆の特徴らしい) ブレンドマロン(AMAMERIA ESPRESSO) https://heirroom.coffee/coffee/8879443542327 甘味を求めて。 温かいときの一口目よりも戻り香がすごい。チョコレートっぽいのかな。とても甘い。 覚めると苦い感じなので、温かいうちが特に良さそう。 今週のIT 都合の良いELツールを探し始めている とりあえず重たい系でAirbyte, 軽量系で sling, dltあたり。(前にdagsterのウェビナーで聞いた) なんとなく、slingは使い勝手良さそう。PythonSDKあるし。 Airbyteすごいけど、各コネクタのドキュメントlight-weightすぎん・・・? 今週の本 コーヒーの科学 https://amzn.asia/d/gXdXkI8 いま読むのにちょうどよい本。コーヒーの歴史から味わいがどういう形で生まれるかとか書いてある。 どうやって広がっていったとかは歴史含めて面白かったし、世界史をそういう視点でもう一度読み直したい気持ちになった 味わいや好みは主観だなと思ってたけど、それの理由(人はみんな一定は味盲的な話)等もわかってすごくすっきりした。 とりあえず半分くらいだけど、理屈で味わいたい人には良さそう

2024-01-20

感想

特に公開する意味はないですが、自分なりに読んだ感想をまとめておくことにしました。 あとから雑にまとめているので、雑です。 「プロダクトマネージャーがプロダクトマネジメントを失敗させる!?」大企業病の罠を乗り越え若々しいチームを実現する/Traps of Optimization in Product Management 2024 資料 https://speakerdeck.com/moriyuya/traps-of-optimization-in-product-management-2024 感想 前置きとして、現職がこういう状態という訳では無いが、可能性としてはあり得るというところを含めて以前より解像度高く読めたような気がする。 単に人を足しても人不足は解消しないのは感覚的に思っていたけど、一方で新しい人が入ってくるのは効くところと効かないところがあるなと思っていたところで以下のスライドが大変理解しやすかった。 上記スライドP.202より引用 緊急フロー構造はどこでも聞いたことあるし(圧倒的にJTC的なところはこればっかだった気がする) 役割分担がガイドではなくではなく厳守するルールになっているのも今振り返るとJTCで見たあれはそうだったんだろうなぁ…(だからガイドすら決めるの嫌いになっている) とか、事例を求め始めるとかも知ってるなぁと思いながら、 なるほど、こういう構造だったのかと言うのがとても良く理解できました。 30分でわかるデータ指向アプリケーションデザイン - Data Engineering Study #18 資料 https://speakerdeck.com/xerial/30fen-dewakarudetazhi-xiang-apurikesiyondezain-data-engineering-study-number-18 感想 とりあえず積読を解消したい気持ちになった。 データ指向を極めたい ひとりで作った「理想のタスク管理ツール」は5年でこうなった(なってない) 資料 https://note.com/gussietech/n/ndd769923d51a 感想 エンジニアなら憧れる自分で作って収益化する話。 実際にやったことないのですが、始まりからの5年間をリアリティ持って読めました。 こういうの読むといつか自分もやりたいと思うけど、ツールではないんだよなぁたぶん…というわけで、その前に本業を探しに行こうという気持ちになりました。 ちなみにrepsonaも登録してみましたが、たしかにUIは使いやすそうです。担当者とボール分けられるのとか良い。実際使ってみないことには、ではありますが。 スクラムとデッドライン壊れゆくチームをつなぎとめるもの/Scrum and Deadlines 資料 https://speakerdeck.com/kakehashi/kakehashi-scrum-and-deadlines?slide=5 感想 Xでとても話題になっていたので読みました。 品質 < 私が犠牲になろう じゃねーよ!!なんだけど、実際起きがちだなぁというのはあって、一旦品質を落として後で直そうという話はよくするが、結局新たにやらないといけないことは増えるので最初からある程度の品質を目指さないとだめでは・・・?みたいな気持ちになる。 ヘルプにチームで行くのは良さそうで、開発を止めて1つずつ消化できてそうな雰囲気が大変良さげに思いました。(チームに追加要件として1個乗るだけというパターンが多すぎる) 個別対応しちゃだめだよなぁ。

2024-01-14

Lonich,さんに行ってみた

Lonich,さん初上陸へ至る道 Lonich,行ってみたいな… — Masahiro Ishii (@marufeuille) January 4, 2024 という呟きをしたところ、丸山さんにご返信頂けたので直前にポストされていた夜営業についてこんな感じで教えていただいたからにはもう行かない言い訳はないだろう、と はい、夜営業はふらっとで大丈夫です! 日にちによっては満席近くになることがあるので、お席心配でしたら早めの時間の方が安心かと思います🫡 — 丸山伶介 / Heirroom(エアルーム) (@OCV_ryosuke) January 4, 2024 翌週夜食事をする予定だった先輩に連絡し、OKを頂いたので12日(金)に行くことになりました。 現地にて そして到着! 夜営業は粉の量が少なめかつ高温で少量の抽出とのこと。たくさん飲めました。 一杯目。確かコスタリカでBLACK DIAMOND(こっちだけちゃんと覚えてる) 二杯目、パナマゲイシャ(だったはず..) 三杯目はコロンビアのピンクブルボン サクッと貼りましたが、見て分かる通りエモいんですよね。 カフェで飲むコーヒーではない。 かつ、アナエロビック中心なので、いわゆるコーヒーらしくないものも多かったです。(僕も最後の一杯以外はアナエロビックです) 一緒に行った先輩から翌日、「今朝改めてコンビニのコーヒーのんだんだけど、別の飲み物だね」というメッセージを頂いたのも印象深かったです。 得られたもの とても美味しいコーヒー これは言わずもがな。最後に入れていただいたピンクブルボンも同じ豆で淹れたことがあったのですが、全く別物でした。 概ねのやり方は聞いてみたので、少し真似してみようかと思います。 コーヒーの知識 僕はとてつもない素人で、味わいも酸味苦味くらいはわかるもののちょっと専門的な表現はほとんど理解できていないと思うレベルです。 バリスタさんから「ボディが効いていて…」的な話があったときに「ボディってぶっちゃけなんですか?」というのを聞いても丁寧に説明してもらえたのはとても嬉しかったです。 また、お店ではLiliドリッパーを使っていましたが、フラットヘッドでーという話から「ぶっちゃけカリタウェーブと何が違うんですか?」みたいな質問も目の前で淹れながら説明してもらえたのでとても理解は深まりました。 他にも中国雲南の豆の味わいであったり、自分で淹れるときの調整の仕方だったり、普段だと絶対に得られない知識を得られたのでとても充実した気持ちでした。 また、たまたま先輩も私もバリスタさんもカメラ趣味というところがあって、GMasterやLeicaの話で盛り上がれたのも大変良かったです。エモい。 エモい空間(プライスレス) 上記のような空間もそうだし、コーヒーのサービングの仕方的な部分も内装整い方、カフェっぽくない空間、イケてるグラスからもうだめでした。 自分も家で淹れるときよりこういう部分を大切にしたいな、と思いました。 まとめ また行きます。

2024-01-13

最近飲んだ豆のまとめ

この1年位はすっかりコーヒーにハマっている気がする。 特に最近は少しずつ知識もついてきたのでその点でも楽しい。 まずは年末年始に飲んだ豆を振り返りようにまとめておきます。 年末年始色々飲んだのであんまり覚えてないから印象的なのだけ。 Colombia-Las Flores/Pink Bourbon/Fermented Washed/Light (Lonich,) https://lonich.official.ec/items/77897354 Heirroomさんの国内ロースタースターターセットに入っていた。 年末飲んだ中では一番おいしかった。 ピンクブルボンやばい そのうち注文する。 Ethiopia Chelchele - Bensa ALO COFFEE PLC 74165 - Underscreen Natural (Lonich,) エチオピアナチュラルが飲みたくて、まだ飲んだことのないアンダースクリーンが気になったので購入。 12月上旬に買ったけど去年のベストってくらいうまかった。まだちびちび飲んでる。 コロンビア サントゥアリオ農園 レッドブルボン ゴールドウォッシュド (Scrop) 福袋に入っていた。 レッドブルボンを意識して飲んだの初めてな気がするけど、まさに説明文にあったとおりの このコーヒーはゴールドウォッシュドといわれる新しい精選方法を使用し、他にはないフレーバーを感じることができるコーヒーとなっております。柑橘のような爽やかで甘酸っぱい風味に、スパイスを思わせるようなフレーバーを感じ取ることができます。 という感じで素晴らしい味わいだった。スパイシーですごくいい。 これもほしいけど、バラ売りしてなさそう… コロンビア サントゥアリオ農園 レッドブルボン ゴールドウォッシュド (Scrop) 福袋に同様に入っていた。 26クリックであら目に挽くと酸味強めだったけど、20クリックにすると一気に苦味とかチョコレート感でて来るのが面白かった。 パナマ ジャンソン農園 Lot.534 (Scrop) 憧れのパナマゲイシャ。 やはり 福袋産。 家族からは飲みやすいという評判だけど、個人的には少し物足りないかも。 Colombia Monteblanco Geisha Cold Washed 72h Lavender Light Roast (RED POISON) https://red-poison.com/item/6867/ 最初コマンダンテ 26クリックで挽いたときは、薄くてうーん?っていう感じだったけど、20クリックにしてみたら香りがよく出てきてとてもおいしかった。少しとろっとした感じある気がする。 とりあえず50gしか買ってなかったけど、これももうちょいほしい… ラ・ロカ ピンクブルボン 浅煎り (coffee post) https://coffeepost....

2024-01-04

CloudFlare Pagesに移行してみた

たまにブログを書こうとするとインフラからいじりたくなるのはある意味病気なのではないかと思う。そんな時間あるならコンテンツ書けばいいのに。 特に理由はないのだが、日頃から頭の中を吐き出す訓練として技術的な物を中心としつつ、色々なものを書いていこうと思う。

2024-01-04

Fivetran を触ってみて思ったことたち

はじめに 前回に引き続きELツールであるFivetranを試しており、ちょいちょい触って気づいたことを書き留めておきます。 一般的な話はドキュメントによく書かれているので、さわる中で気になった点にフォーカスして書いてみます。 所感 Transformations(dbt連携) 今回はfivetranのdbt連携を使い、オープンデータから稲作に関するデータと天気情報を持ってきてゴニョろうとする、みたいなデモを作ってみました。 Github 生データをlakeにいれ、少し加工したものをwarehouse、分析に使う段をmartとわけてます。 fivetran側でconnector/destinationの設定をして、githubにdbtのコードをアップロード、fivetran側で連携の設定を入れればあとは簡単に動作するようになります。 dbtを連携させるとこんな感じでソースからmartまでいい感じに可視化できました。 (文字等はあとから書き込んでいます) 手軽に使えるのはとても良いですね。 ログについて ログは以下のようにWeb UI上から確認できます。 また、ログの転送設定も可能で、例えば成功時のログは以下のようにjsonで構造化されてcloudlogginから確認できます。 dbtのログさえちゃんと構造化されているので、サクッとメトリックを作ったり通知するのもやりやすそうに見えます。 { "insertId": "9g7n20g1atrvd6", "jsonPayload": { "event": "dbt_run_succeeded", "created": "2022-09-10T07:14:44.435Z", "data": { "startTime": "2022-09-10T07:14:17.900Z", "result": { "stepResults": [ { "step": { "processBuilderCommand": [ "dbt", "test", "--models", "+sunshine_time", "+temperature" ], "name": "Scheduled: Test" }, "failedModelRuns": 0, "successfulModelRuns": 0, "success": true, "commandResult": { "error": "", "exitCode": 0, "output": "07:14:39 Running with dbt=1.2.0\n07:14:39 Partial parse save file not found....

2022-09-10

FivetranをTerraformで構成する方法

はじめに ELツールであるFivetranを試す機会があり、terraformも使えるということでどこまで使えるのか試してみました 構成 データの転送は CloudSQL(GCP) -> Fivetran -> BigQuery という経路で行うことにしました。 CloudSQLの準備 CloudSQLはコンソール上から適当に作成しています。 その上でデータは面倒だったのでこの手順で用意し、その上で以下のようにしてユーザを作成します。 CREATE USER 'fivetran'@'%' IDENTIFIED BY 'ぱすわーど' GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'fivetran'@'%' Terraform provider.tf api_key, api_secretはWebUI上から発行しておいてください 1terraform { 2 required_providers { 3 fivetran = { 4 source = "fivetran/fivetran" 5 version = "0.6.3" 6 } 7 } 8} 9 10 11provider "fivetran" { 12 api_key = "APIKEY" 13 api_secret = "APISECRET" 14} main.tf 1resource "fivetran_group" "group" { 2 name = "Terraform" 3} 4 5resource "fivetran_connector" "mysql" { 6 group_id = fivetran_group....

2022-09-08