Hive에서 마이그레이션
Hive에서 마이그레이션 (Migrating from Hive)
Trino는 ANSI SQL 문법과 의미론을 사용해요. 반면 Hive는 SQL과 비슷하지만 MySQL을 느슨하게 본떠 만든(그리고 MySQL 자체도 ANSI SQL과 차이가 많지만) HiveQL이라는 언어를 사용해요.
출처: 문서
본문
배열의 동적 인덱스 접근은 UDF 대신 서브스크립트로 (Use subscript for accessing a dynamic index of an array instead of an udf)
SQL의 서브스크립트(subscript) 연산자는 완전한 표현식을 지원해요. Hive는 상수만 지원하죠. 따라서 이런 쿼리를 쓸 수 있어요:
SELECT my_array[CARDINALITY(my_array)] as last_element
FROM ...
SELECT IF(CARDINALITY(my_array) >= 3, my_array[3], NULL)
FROM ...
SELECT my_array[1] AS first_element
FROM ...
SELECT ARRAY[1, 2, 3] AS my_array
다음은 몇 가지 전환 예시예요. 큰따옴표로 감싸거나 예약어 이름을 쓰는 테이블:
SELECT name AS "User Name"
FROM "7day_active"
WHERE name = 'foo'
SELECT *
FROM "7day_active"
문자열 결합은 || 연산자를 사용해요:
SELECT a || b || c
FROM ...
HiveQL의 cast와 일치하는 타입 변환:
SELECT
CAST(x AS varchar)
, CAST(x AS bigint)
, CAST(x AS double)
, CAST(x AS boolean)
FROM ...
정수 나눗셈으로 소수를 얻으려면 먼저 DOUBLE로 캐스트해요:
SELECT CAST(5 AS DOUBLE) / 2
결과 처리를 위해 CTE가 편리할 수 있어요:
WITH a AS (
SELECT substr(name, 1, 3) x
FROM ...
)
SELECT *
FROM a
WHERE x = 'foo'
Hive의 LATERAL VIEW explode는 Trino의 CROSS JOIN UNNEST로 대체해요. HiveQL:
SELECT student, score
FROM tests
LATERAL VIEW explode(scores) t AS score;
Trino:
SELECT student, score
FROM tests
CROSS JOIN UNNEST(scores) AS t (score);
날짜 더하기. HiveQL:
SELECT cast('2000-08-19' as date) + 14 days;
Trino:
SELECT cast('2000-08-19' as date) + INTERVAL '14' day;
날짜 차이. HiveQL 함수 시그니처:
datediff(string enddate, string startdate) -> integer
직관적인 인자 순서 호출:
datediff(enddate, startdate)
Trino의 date_diff:
date_diff('day', startdate, enddate)
기존 파티션 덮어쓰기. 기존 파티션에 삽입할 때 OVERWRITE 동작을 원하면:
SET SESSION hdfs.insert_existing_partitions_behavior = 'OVERWRITE';
INSERT INTO hdfs.schema.table ...
더 알아보기 (Learn more)
Hive 커넥터의 세부 설정이 궁금하다면 Hive 커넥터 문서를 이어서 읽어 보세요.