Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
地球とSQL
Search
onunu
February 07, 2018
Programming
2
470
地球とSQL
とあるサービスのリリースのためにSQLを書いていたら、地球を感じられたお話です
社内で行われたエンジニア懇親会の余興です
onunu
February 07, 2018
Tweet
Share
More Decks by onunu
See All by onunu
othlotech
onunu
1
3.1k
ビッグデータと機械学習の狭間で -データエンジニアに求められる役割-
onunu
5
1.3k
Railsと考えるデータベースのインデックス戦略
onunu
4
1.6k
Railtieでpluginを作ろう!
onunu
0
430
Other Decks in Programming
See All in Programming
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
Exploring: Partial and Independent Composables
blackbracken
0
100
Amazon S3 NYJavaSIG 2024-12-12
sullis
0
100
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
340
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
6
1.3k
useSyncExternalStoreを使いまくる
ssssota
6
1.1k
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
3
480
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
1
140
良いユニットテストを書こう
mototakatsu
8
2.7k
Keeping it Ruby: Why Your Product Needs a Ruby SDK - RubyWorld 2024
envek
0
190
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
5
700
Featured
See All Featured
Building Applications with DynamoDB
mza
91
6.1k
The Cult of Friendly URLs
andyhume
78
6.1k
Designing for Performance
lara
604
68k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
520
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
4 Signs Your Business is Dying
shpigford
181
21k
How STYLIGHT went responsive
nonsquared
95
5.2k
Making the Leap to Tech Lead
cromwellryan
133
9k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
RailsConf 2023
tenderlove
29
940
Transcript
地球とSQL Engineer Drink Up 2018 1Q @onunu
Hello! おぬまです @onunu IESHILでSQLを書く仕事をし てます:) Twitter: @onunu_ Github: onunu
2017年9月 IESHIL CONNECT がリリースされました!
IESHIL CONNECTってなに?
IESHIL CONNECTってなに? 不動産営業マン向けの エージェントツール 物件周辺の災害時のリ スク状況などがわかる 最近レポート機能が追加 されたよ (デフォルトでWordが出力 されてすごい)
Q. このサービスの本質はなにか?
◎ Raw data(アジア航測と提携) -> 5m dem ◦ 769,500,000 records ◎
Mesh Codes(地域メッシュ) -> 約250m^2 ◦ 364,800 records IESHIL CONNECTのデータ A . 詳細なデータと運用設計
None
地球感じられますね?
今日はそのデータの話 をします
IESHIL CONNECTのデータワークフロー
◎ Raw dataはTresureDataにいれておく ◎ 各タスクはdigdagでワークフロー定義 ◦ サービスのフロントDBに書き出すところまでがお仕 事 ◎ データの整形,
加工はSQLとembulkでやる IESHIL CONNECTのデータワークフロー 中身はこんな感じ(一部)
◎ TresureData製のワークフローエン ジン ◎ taskの並列実行/実行待ちをyaml 的な階層構造で表現する ◦ 拡張子は.dig, mapのキー順 序を維持する必要があるた
め、明示的に分けてる ◎ Taskの実行結果を状態としてもつ ◦ 異常終了した時、次回実行 時は成功したtaskをskipする digdagとは?
digdagとは? ◎ +hogeでタスク定義 ◎ fuga>は何かしらの処理 ◎ _piyoはprepared statement
Digdagいいぞ 使っていこう
ではSQLの話をします (ここからが本番)
Q. mesh codeの範囲(view port)をSQL によって計算したい Mesh code(地域メッシュ)
A. mesh codeの仕様はとてもアレです 頑張って計算します Mesh code(地域メッシュ)
Mesh code(地域メッシュ)とは ◎ 日本工業規格 JIS X 0410 ◎ 内容は以下 ◦
全国の地域を 1 度ごとの経 線と ◦ 偶数緯度及びその間隔を 3 等分した緯度における緯線 とによって ◦ 分割して第 1 次地域区画を 作る ◎ 紙の地図によくあるアレです http://www.sinfonica.or.jp/mesh/mimginfo.html
Mesh code(地域メッシュ)とは ◎ 1次地域区画 ◎ 南端緯度×1.5を上2桁 ◎ 西端経度の下2桁 ◎ 東京あたりは「5339」
◎ 2次地域区画 ◎ 1次地域区画の細分化(8x8) ◎ さっきの東京のメッシュでいくと ◦ 5339-23 Mesh code(地域メッシュ)とは
◎ 3次地域区画 ◦ 基準地域メッシュ ◎ 2次地域区画の細分化(10x10) ◦ 5339-23-43 Mesh code(地域メッシュ)とは
◎ 2分の1地域メッシュ ◦ (4次地域区画) ◎ 2次地域区画の細分化(2x2) ◎ 1桁で表す ◦ 5339-23-43-1
◎ n分の1地域メッシュは以下同じ Mesh code(地域メッシュ)とは
Mesh code(地域メッシュ)
Mesh code(地域メッシュ) これで南西端の緯度経度は計算できた あとは1meshの緯度経度を足せばviewport が計算できる!
Q. ある建物が、 震災時危険地域から50m以内にある時 フラグを立てたい 距離
A. ある建物と(最も)近い危険地域までの 測地距離(?)を頑張って計算します 距離
距離 ◎ 緯度経度わかっているわけなので ◎ 三平方の定理つかったらいけそう
でも地球は球なので(しかも回転楕円体) ちゃんと計算しないといけない 距離
距離 ◎ 回転楕円体上の距離計算にはいく つかの公式がある ◎ もっともよく使われるヒュベニの公式 (国土地理院とかでも使われてる)は 距離が長くなると精度おちるらしい ◦ もし日本全土がサービス提供圏
になっても大丈夫! ◎ IESHILでは測地線航海算法という 計算式をつかっています 測地線航海算法の証明しようと思ったけど インターネッツに情報がほとんどない。 (みんな距離の計算しないの?)
距離 A点(l A ,L A )と B点(l B ,L B
)の測地線長(ρ) (l A ,L A ): A点の測地緯度,測地経度 (l B ,L B ): B点の測地緯度,測地経度 X=cos-1[sinφ A ・sinφ B +cosφ A ・cosφ B ・cos(L A -L B )] 赤道半径と極半径を用いて化成緯度を作成することで回 転楕円体として 扁平率を考慮した計算にすることもできる (今のIESHILでは残念ながらそこまではせず、 球であることを前提として大圏航海算法になっています)
距離 X=cos-1[sinφ A ・sinφ B +cosφ A ・cosφ B ・cos(L
A -L B )] これをSQLで書くと、 三角関数用意されてるので余裕ですね:) (SQLで三角関数使うときはラジアンに変換する のを忘れないようにしましょう!)
勧誘 IESHILではデータエンジニアが 不足してます ◎ 地球が好きな人 ◎ データとアプリケーションの両方をやっていきたい人 ◎ 大量のデータを扱いたい人 ◎
不動産鑑定士の資格とか実は持ってる人 興味ある人は話しかけてください
ありがとうございました!