Hive 에 UDF 등록
DistanceCalculator UDF 를 생성했으므로, 천문 데이터를 처리하는 데 사용할 수 있도록 Hive 에 등록해야 합니다.
먼저, 다음 명령을 실행하여 Hive 셸을 시작합니다.
hive
Hive 셸에 들어가면, DistanceCalculator UDF 를 사용하여 임시 함수를 생성합니다.
ADD JAR /home/hadoop/udfs/distance_calculator.jar;
CREATE TEMPORARY FUNCTION distance_calculator AS 'DistanceCalculator';
ADD JAR 명령은 컴파일된 UDF 를 포함하는 JAR 파일을 Hive 환경에 추가하고, CREATE TEMPORARY FUNCTION 명령은 DistanceCalculator 클래스를 참조하는 distance_calculator라는 임시 함수를 생성합니다.
이제 Hive 쿼리에서 distance_calculator 함수를 사용할 수 있습니다. 예를 들어, celestial_objects라는 샘플 테이블을 생성하고 두 객체 간의 거리를 계산해 보겠습니다.
CREATE TABLE celestial_objects (
name STRING,
x DOUBLE,
y DOUBLE,
z DOUBLE
);
이 쿼리는 천체의 이름과 좌표에 대한 열이 있는 celestial_objects 테이블을 생성합니다.
INSERT INTO celestial_objects VALUES
('Earth', 0.0, 0.0, 0.0),
('Moon', 384400.0, 0.0, 0.0),
('Mars', 227940000.0, 0.0, 0.0);
그런 다음 지구, 달, 화성에 대한 샘플 데이터를 삽입합니다.
SELECT
o1.name AS object1,
o2.name AS object2,
distance_calculator(o1.x, o1.y, o1.z, o2.x, o2.y, o2.z) AS distance
FROM celestial_objects o1
CROSS JOIN celestial_objects o2
WHERE o1.name < o2.name;
마지막으로, 모든 객체 쌍 간에 교차 조인 (cross join) 을 수행하고 distance_calculator UDF 를 사용하여 그 사이의 거리를 계산합니다.
출력은 다음과 유사해야 합니다.
object1 object2 distance
Earth Moon 384400.0
Mars Moon 2.275556E8
Earth Moon 384400.0
...