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
500
地球と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
460
Other Decks in Programming
See All in Programming
ファインディの テックブログ爆誕までの軌跡
starfish719
2
1.1k
負債になりにくいCSSをデザイナとつくるには?
fsubal
9
2.3k
Writing documentation can be fun with plugin system
okuramasafumi
0
120
CloudNativePGがCNCF Sandboxプロジェクトになったぞ! 〜CloudNativePGの仕組みの紹介〜
nnaka2992
0
220
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
110
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
770
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
11
1.8k
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
260
Unity Android XR入門
sakutama_11
0
140
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
150
自分ひとりから始められる生産性向上の取り組み #でぃーぷらすオオサカ
irof
8
2.6k
Featured
See All Featured
The Cult of Friendly URLs
andyhume
78
6.2k
Building an army of robots
kneath
302
45k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
20
2.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
4 Signs Your Business is Dying
shpigford
182
22k
How STYLIGHT went responsive
nonsquared
98
5.3k
Producing Creativity
orderedlist
PRO
343
39k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
29
4.6k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Scaling GitHub
holman
459
140k
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ではデータエンジニアが 不足してます ◎ 地球が好きな人 ◎ データとアプリケーションの両方をやっていきたい人 ◎ 大量のデータを扱いたい人 ◎
不動産鑑定士の資格とか実は持ってる人 興味ある人は話しかけてください
ありがとうございました!