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
530
地球と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.7k
Railtieでpluginを作ろう!
onunu
0
480
Other Decks in Programming
See All in Programming
フロントエンドテストの育て方
quramy
11
2.9k
SQL Server ベクトル検索
odashinsuke
0
170
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
710
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
230
Devin入門と最近のアップデートから見るDevinの進化 / Introduction to Devin and the Evolution of Devin as Seen in Recent Update
rkaga
9
4.8k
リアクティブシステムの変遷から理解するalien-signals / Learning alien-signals from the evolution of reactive systems
yamanoku
3
1.2k
AHC 044 混合整数計画ソルバー解法
kiri8128
0
330
AIコーディングワークフローの試行 〜AIエージェント×ワークフローでの自動化を目指して〜
rkaga
2
3.4k
「影響が少ない」を自分の目でみてみる
o0h
PRO
2
990
地域ITコミュニティの活性化とAWSに移行してみた話
yuukis
0
230
Chrome Extension Techniques from Hell
moznion
1
160
Develop Faster With FrankenPHP
dunglas
2
3.2k
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
How to Think Like a Performance Engineer
csswizardry
23
1.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
520
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
Navigating Team Friction
lara
184
15k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
13
1.4k
Producing Creativity
orderedlist
PRO
344
40k
Making Projects Easy
brettharned
116
6.1k
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ではデータエンジニアが 不足してます ◎ 地球が好きな人 ◎ データとアプリケーションの両方をやっていきたい人 ◎ 大量のデータを扱いたい人 ◎
不動産鑑定士の資格とか実は持ってる人 興味ある人は話しかけてください
ありがとうございました!