![](https://images.logmi.jp/media/article/331400/images/main_image_104958907d2aa387124e5b931e5af9bfeef2a68f.jpg?w=600)
2025.02.18
「売上をスケールする」AIの使い道とは アルペンが挑む、kintone×生成AIの接客データ活用法
Rust を Snowflake で活用しよう(全1記事)
リンクをコピー
記事をブックマーク
kenkoooo氏:じゃあ発表を始めていきたいと思います。「SnowflakeをRustで使おう!」ということで発表します。
先ほど自己紹介があったんですが、自己紹介スライドを作ってしまったのでちょっと見せます。株式会社estieという会社でスタッフエンジニアとして働いています。スタッフエンジニアをもしかしたら聞き慣れない方もいるかと思いますが、「estie スタッフエンジニア」でググるとそれらしい情報がいっぱい出てきます。経歴としては、estieは今はWebアプリの会社なんですが、ずっとWebアプリを作っていたわけではなくて。大学は情報系じゃなかったんですが、自宅で警備をしたり、研究所の技術職員をやったり。
あとは、Web広告もWebアプリではなくドライな広告を入札するシステムみたいなものだったりとか。あとAIスピーカーとか。求人検索はけっこうWeb寄りですが……。
そういう感じで、ソフトウェアエンジニアとして働きつつ、分野としてはいろいろやってきたよという感じで、今はestieで働いています。
estie自体は商業用不動産向けのWebアプリを作っている会社ですが、estieで僕がやっていることとしては、Webアプリを開発するという会社のメインの仕事もやりつつ、興味があって最近はデータ基盤のほうも触っています。
各Webアプリにどうやって正確で大量のデータを届けるかということに取り組んでいたり、あとそれを支えるWebアプリとか、いろいろなプロダクトを支えるプラットフォームを作ったりを最近やっているという感じで、今回話すのはデータ基盤に近いところかなというところです。
会社では「Snowflake」というデータウェアハウスを使っています。気持ちとしては、クソデカデータベースだと思ってもらえれば(良い)と思います。
普通のSQLインスタンスにデータベースをいっぱい作ってるようなことはまあまあやることがあります。あるいは、1インスタンス1データベースで運用していることもあると思います。
ただ、やはり1インスタンス1データベースだと、ぜんぜん違うチーム同士のデータをJOINしたい時とかにけっこう大変で。じゃあ今度は1個のSQLクラスターにいろいろなデータベースを入れると(すると)、こっちのチームのクエリのせいで別のチームのパフォーマンスが下がっちゃったりというところで、データはやはりSQLインスタンスとは別の場所にガッと貯めたいということで、いろいろなデータウェアハウスが世の中にいっぱいあって、それの1つでSnowflakeを我々は使っています。
estieでどんなふうに使われているかというと、本当にいろいろなチームがどんどんデータを入れていって。「このデータはこのチームの人しか見ちゃだめ」みたいな、そういうセンシティブな情報もいっぱいあるので、そのあたりの権限管理をSnowflakeでうまくやりつつ、いろいろなチームのデータをJOINして、また新しい価値を生み出すようなことは最近できるようになってきました。
ここ1年ぐらいで本当にSnowflakeがフルに使われるようになってきたので、もう「ここからっす」という感じです。
(デモ開始)
Snowflakeを動かす様子を実際にみなさんに見てもらおうと。(画面を示して)こんな感じです。
SQL文で書いてクエリを叩くと、こんな感じでデータが出てきます。これは市区町村の情報が入っていますが、こんな感じで、見た目は完全にSQLという感じです。
(デモ終了)
これでやっていて、このRust版Snowflakeクライアントを今回作りました。オープンソースで公開しているので、ぜひみなさん使ってもらって。
Snowflakeってエンタープライズ向けで、無料プランとかがあまりなくて。AWSみたいに「個人でも気軽に使えます」みたいな感じじゃないので、Snowflakeを会社で使っている人にしか刺さらないライブラリなんですが、けっこう使えると思うので、もしよければ使ってみてください。
今、PythonとかGoとかは公式のSDKがあるんですが、Rust版ではこれが今一番作り込まれていると思うので、使ってみて感想などもらえればと思います。
snowflake-connector-rsが実際に動く様子。
(デモ開始)
(画面を示して)実際どういうふうに使うかというと、こんな感じです。
おなじみのCargo.tomlにはライブラリを入れてもらって、あとはasyncのRuntimeとかも入れてみたいな。普通のやつと一緒です。
使う時はユーザー名とパスワードでログインするので、それを取ってきて。
Snowflakeのアカウント、テナントみたいなものがありますが、概念としてwarehouseというものがあって。これは「どのコンピューティングリソースを使うか?」みたいなやつですね。
データベースとかスキーマとかがあって、PostgreSQLっぽい感じですが、データベースがあって、その中にまた1つのname spaceがあるみたいな感じですね。その中にテーブルがあるというかたちになります。
あとはrole。roleで権限管理をしているので、このroleを設定することによってこっちのデータが見れるようになって、あるいはこっちが見えなくなったりみたいなことがあります。
クライアントで、create sessionという関数で実際にログインしてセッションを作ります。
横道に逸れちゃうのであまり気にせず聞き流してほしいんですが、セッションがどういうものかというと、Webアプリのセッションと基本的には同じですが、Snowflakeにはtemporary tableという概念があって。そのセッションの有効期間だけ生きてるテーブルみたいなものを作ったりできるんですね。
create sessionすると、このセッションがドロップするまでの間、生きてるテーブルみたいなものを作ることができますと。あとは、おなじみのSQLのクエリを書いてもらって実行すると、先ほどのテーブルでいうとIDとか名前とか、都道府県みたいなものが取れたりします。
先ほどのテーブルを叩いているので、実際にどういうふうに動くかというか……。(画面を示して)これは結果しか表示されないんですが、こんな感じですね。
先ほどのSnowflake上で実際に見たデータが、お手元のRustのコードでも取れるという感じになっています。
(デモ終了)
ここから内部の実装がどういうものになっているかを話します。Snowflakeって、SQLでクエリを書いて取ってくるみたいな、結果を取得してくる感じなので、「ほかのSQLとなんとなく一緒なのかな」みたいな。
普通にクライアント使っている分にはほかのSQLと同じように使えるんですが、実態としては、HTTPのAPIを叩いて結果を取得するみたいな仕組みです。
だから、中ではクエリをJSONに詰めてpostしてみたいなことが行われています。なので、SQL文をHTTPリクエストのbodyに入れて、結果はJSONで返ってくるみたいな。クラウド時代のデータウェアハウスでSQLっぽい(ことをしている)感じですね。
HTTPを使っていれば大量の結果を取得することはもちろんできるんですが、結果がJSONで返ってくるのであまりやりたくない。すごく巨大なbodyのJSONを返したくないとかはあって。
一応Webの技術で、大量のデータをずっと継続してレスポンスし続ける仕組みみたいなものはあるんですが、僕がSnowflakeで実装していておもしろいなと思ったのは、これもまたクラウドって感じで……。
最初の数行、数百行だけレスポンスをJSONに載せて返してくるんですが、残りは分割してS3にアップロードして、「S3のここにアップロードしたから、あとはお前がダウンロードして自分で結合してね」みたいな感じで、S3のファイルのリストが来ます。
という感じで、1レスポンスに全部の情報が一応入っていて、ユーザーは最初の数百行はレスポンスに含まれているので、残りの行は全部S3に行ってダウンロードして結合して使うという感じになっています。ライブラリではこのあたりは隠蔽されているんですが、興味があれば中身を読んでみてください。
ほかの公式のSDKとかを見ても、いろいろな工夫があって。我々もまだそのユースケースにたどり着いていないんですが、S3にアップロードするファイルの形式もgzip圧縮されているものだったり、あとは別の形式だったり。なんかいろいろな工夫をしているらしいです。なので、SQLでクエリを書いて、結果がS3に上がってくるということは、いかにも21世紀ですねという感じがしています。
そういう感じでライブラリを作ったので、ぜひ使ってほしいです。Snowflakeを契約している人しか使えないのでちょっと心苦しいんですが、契約している方はぜひ使ってみてください。
という感じで、私の発表は以上になります。ありがとうございました。
関連タグ:
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
2025.02.14
報連相ができない部下に対するコミュニケーションの取り方 「部下が悪い」で終わらせない、管理職のスキル向上のポイント
2025.02.13
上司からは丸投げ、部下からはハラスメント扱い、業務は増加…プレイングマネジャーを苦しめる「6つの圧力」とは
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
着想から2か月でローンチ!爆速で新規事業を立ち上げる方法
2025.01.21 - 2025.01.21
新人の報連相スキルはマネージメントで引きあげろ!~管理職の「他責思考」を排除~
2025.01.29 - 2025.01.29
【手放すTALK LIVE#45】人と組織のポテンシャルが継承されるソース原理 ~人と組織のポテンシャルが花開く「ソース原理」とは~
2024.12.09 - 2024.12.09
『これで採用はうまくいく』著者が語る、今こそ採用担当に届けたい「口説く」力のすべて
2024.11.29 - 2024.11.29
第20回エクゼクティブメンターイベント「今、「ひと」と組織が共創する〜働き方の未来へ」
2024.12.07 - 2024.12.07