Hive空間演算 -6-


その他、SQL ServerからWKT出して入れて見たりしたが、終端ポイント閉じてないとかで面認識されない?
(←この時点の認識 要は”が先頭・末尾にあると駄目って話。)

mount -t cifs //あいぴー/shared /mnt -o username=ゆーざ,password=ぱす
cp /mnt/json_data/jpn/jpnwkt.csv /tmp/json_data/jpn/jpnwkt.csv
umount /mnt

sudo -u hdfs hadoop fs -mkdir /user/hive/jpnwkt
sudo -u hdfs hadoop fs -put /tmp/json_data/jpn/jpnwkt.csv /user/hive/jpnwkt

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

hive

ADD JAR /usr/lib/hive/lib/esri-geometry-api.jar;
ADD JAR /usr/lib/hive/lib/spatial-sdk-hadoop.jar;

use test;

CREATE EXTERNAL TABLE IF NOT EXISTS 
jpnwkt
  (
  JCODE string
 ,KEN string
 ,SICHO string
 ,GUN string
 ,SEIREI string
 ,SIKUCHOSON string
 ,CITY_ENG string
 ,P_NUM DOUBLE
 ,H_NUM DOUBLE
 ,WKT string
  )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/hive/jpnwkt'
TBLPROPERTIES ("skip.header.line.count"="1")
;

create temporary function ST_GeomFromText as 'com.esri.hadoop.hive.ST_GeomFromText';
create temporary function ST_Contains as 'com.esri.hadoop.hive.ST_Contains';
create temporary function ST_Point as 'com.esri.hadoop.hive.ST_Point';

SELECT
 jpn.SIKUCHOSON 
FROM
 jpnwkt jpn
WHERE
 ST_Contains( ST_GeomFromText(jpn.WKT) , ST_Point(135, 35));

WKTポイントは認識する?何故だ。

SELECT
 addr.KEN
 ,addr.SHIKUTYOSON 
 ,addr.OOAZATYOU
 ,addr.GAIKU
 ,ST_Distance(ST_Point(135,35), ST_GeomFromText(addr.wkt)) dist
FROM
 addrwkt addr
ORDER BY
 dist ASC
LIMIT 10
;
…
兵庫県  西脇市  比延町  499     0.0031370575385204964
兵庫県  西脇市  比延町  245     0.0031370575385204964
Time taken: 105.962 seconds, Fetched: 10 row(s)

とよく見たらカンマセパレートでダブルクォートで囲まれてる。
区切り文字変えてやったら普通に通った。区切り文字と取り込み時のダブルクォートは注意かな。

mount -t cifs //あいぴー/shared /mnt -o username=ゆーざ,password=ぱす
cp /mnt/json_data/jpn/jpnwkt_new.txt /tmp/json_data/jpn/jpnwkt_new.txt
umount /mnt

sudo -u hdfs hadoop fs -mkdir /user/hive/jpnwkt_new
sudo -u hdfs hadoop fs -put /tmp/json_data/jpn/jpnwkt_new.txt /user/hive/jpnwkt_new

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

hive

ADD JAR /usr/lib/hive/lib/esri-geometry-api.jar;
ADD JAR /usr/lib/hive/lib/spatial-sdk-hadoop.jar;

use test;

CREATE EXTERNAL TABLE IF NOT EXISTS 
jpnwktnew
  (
  OBJECTID string
 ,JCODE string
 ,KEN string
 ,SICHO string
 ,GUN string
 ,SEIREI string
 ,SIKUCHOSON string
 ,CITY_ENG string
 ,P_NUM DOUBLE
 ,H_NUM DOUBLE
 ,WKT string
  )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
LOCATION '/user/hive/jpnwkt_new'
TBLPROPERTIES ("skip.header.line.count"="1")
;

create temporary function ST_GeomFromText as 'com.esri.hadoop.hive.ST_GeomFromText';
create temporary function ST_Contains as 'com.esri.hadoop.hive.ST_Contains';
create temporary function ST_Point as 'com.esri.hadoop.hive.ST_Point';

SELECT
 jpn.SIKUCHOSON 
FROM
 jpnwktnew jpn
WHERE
 ST_Contains( ST_GeomFromText(jpn.WKT) , ST_Point(135, 35));
カテゴリー: 開発, 設計 タグ: , パーマリンク