Hive空間演算 -2-


何かが間違っていたのかと言う事で各処理確認

取り敢えず
com.esri.hadoop.hive.serde.JsonSerdeとか
Json系の変換が遅いのかと言う事でサンプル通りCSVを入れ込む。
※UTF-8にするのは忘れず。

mount -t cifs //ipあどれす/shared /mnt -o username=ゆーざ,password=ぱす
cp /mnt/json_data/addr/addrwkt.csv /tmp/json_data/addr/addrwkt.csv
umount /mnt

sudo -u hdfs hadoop fs -mkdir /user/hive/addrwkt
sudo -u hdfs hadoop fs -put /tmp/json_data/addr/addrwkt.csv /user/hive/addrwkt

sudo -u hdfs hadoop fs -chmod -R 777 /user

ヘッダ付なので一応飛ばしてCreate。

use test;

CREATE EXTERNAL TABLE IF NOT EXISTS 
addrwkt
  (
   KEN string
  ,SHIKUTYOSON string
  ,OOAZATYOU string
  ,GAIKU string
  ,KEI INT
  ,X DOUBLE
  ,Y DOUBLE
  ,lat DOUBLE
  ,lon DOUBLE
  ,JyukyoCode INT
  ,DaihyoCode INT
  ,PreCode INT
  ,PostCode INT
  ,WKT string
  ,ID INT
  )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/hive/addrwkt'
TBLPROPERTIES ("skip.header.line.count"="1")
;

取り敢えず文字列検索

SELECT
 addr.KEN
 ,addr.SHIKUTYOSON 
 ,addr.OOAZATYOU
 ,addr.GAIKU
FROM
 addrwkt addr
WHERE
 addr.OOAZATYOU LIKE '%銀座%';

結果こんな感じで異常なし

…
福岡県  北九州市戸畑区  銀座二丁目      5
福岡県  北九州市戸畑区  銀座二丁目      9
Time taken: 36.336 seconds, Fetched: 1613 row(s)

一応面側も確認

SELECT
 jpn.KEN
 ,jpn.SIKUCHOSON 
FROM
 jpn71 jpn
WHERE
 jpn.KEN LIKE '%島%';

異常なさそう

…
鹿児島県        与論町
鹿児島県        所属未定地
Time taken: 15.836 seconds, Fetched: 176 row(s)

一応空間検索

SELECT
 jpn71.SIKUCHOSON 
FROM
 jpn71
WHERE
 ST_Contains(jpn71.shape, ST_Point(135, 35));

異常なし

西脇市
Time taken: 16.882 seconds, Fetched: 1 row(s)

ポイント側も空間演算

create temporary function ST_Distance as 'com.esri.hadoop.hive.ST_Distance';

SELECT
 addr.KEN
 ,addr.SHIKUTYOSON 
 ,addr.OOAZATYOU
 ,addr.GAIKU
 ,ST_Distance(ST_Point(135,35), ST_Point(addr.lon, addr.lat)) dist
FROM
 addrwkt addr
ORDER BY
 dist ASC
LIMIT 1
;

異常なし

兵庫県  西脇市  上比延町        334     0.0012340927841963895
Time taken: 98.296 seconds, Fetched: 1 row(s)

やはり結合だと重いのかな。。

カテゴリー: 開発, 設計 タグ: , パーマリンク