HPL/SQL - SELECT 문

HPL/SQL - SELECT 문

SELECT 문은 쿼리를 실행할 때 사용해요. HPL/SQL은 TOP, VALUES 등 여러 DB 스타일의 SELECT 기능을 Hive 문법으로 자동 변환해 줍니다.

출처: 문서

본문

SELECT TOP n

TOP 절을 사용한 SELECT 문을 지정할 수 있어요. PL/SQL이 이를 Hive용 LIMIT 절로 자동 변환합니다.

예제(Example):

SELECT TOP 3 name FROM sales;    -- SELECT name FROM sales LIMIT 3 is executed

SELECT TOP 3 name FROM sales;를 실행하면 실제로는 SELECT name FROM sales LIMIT 3이 실행돼요.

호환성(Compatibility): Microsoft SQL Server

FROM 절 없는 SELECT

FROM 절 없이 SELECT 문을 지정할 수 있어요. PL/SQL이 hplsql.dual.table 옵션에 정의된 테이블 이름을 사용해 FROM 절을 자동으로 추가합니다.

기본적으로 HPL/SQL은 default.dual 테이블 이름을 사용해요. 그런 테이블이 데이터베이스에 존재하면서 정확히 한 개의 행과 한 개의 컬럼만 가져야 합니다.

예제(Example):

SELECT unix_timestamp();    -- SELECT unix_timestamp() FROM default.dual is executed

호환성(Compatibility): Microsoft SQL Server, PostgreSQL, MySQL, Netezza

FROM TABLE (VALUES …) 절

TABLE (VALUES …) 절(행 생성자, row constructor)을 사용해 테이블 행을 만들 수 있어요.

문법:

FROM TABLE (VALUES row, ...) AS table_alias (col, ...)

예제 1:

SELECT * FROM TABLE (VALUES 1, 2, 3) AS rn(rownum);

rownum
------
1
2
3

예제 2:

SELECT * FROM (VALUES (1,1), (2,2), (3,3)) AS rn(c1, c2);

c1     c2
---------
1      1
2      2
3      3

참고로 HPL/SQL은 Hive에서 실행하기 전에 FROM (VALUES …) 절을 SELECT UNION ALL 서브쿼리로 변환해요:

SELECT * FROM
(SELECT 1 AS c1, 1 AS c2 FROM default.dual
 UNION ALL
 SELECT 2 AS c1, 2 AS c2 FROM default.dual
 UNION ALL
 SELECT 3 AS c1, 3 AS c2 FROM default.dual) rn

단일 행, 단일 컬럼의 dual 테이블은 hplsql.dual.table 옵션으로 지정할 수 있어요.

호환성(Compatibility): IBM DB2, Microsoft SQL Server

관련 문서(See also):

  • SELECT INTO

더 알아보기 (Learn more)

HPL/SQL은 여러 DB 문법을 Hive에 맞춰 변환해 주는 게 큰 장점이에요. INSERTFOR 문 등 다른 HPL/SQL 문법과 함께 보면 변환 규칙이 더 잘 이해됩니다.