질의
질의 (Queries) — Hive 방언
Hive 방언(Hive dialect)은 Hive의 DQL 중 자주 사용되는 부분집합을 지원합니다. Flink SQL에서 Hive 방언으로 질의를 실행하면 HiveQL과 유사한 문법을 사용할 수 있습니다.
출처: 문서
본문
설명 (Description)
Hive 방언은 Hive의 DQL 중 자주 사용되는 부분집합을 지원합니다. 다음은 Hive 방언이 지원하는 HiveQL의 일부입니다.
- Sort/Cluster/Distributed BY
- Group By
- Join
- Set Operation
- Lateral View
- Window Functions
- Sub-Queries
- CTE
- Transform
- Table Sample
문법 (Syntax)
다음 섹션은 전체 질의 문법을 설명합니다. SELECT 절은 공통 테이블 표현식(CTE), 집합 연산(set operations), 그리고 다양한 다른 절을 포함하는 질의의 일부가 될 수 있습니다.
[WITH CommonTableExpression [ , ... ]]
SELECT [ALL | DISTINCT] select_expr [ , ... ]
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY col_list]
]
[LIMIT [offset,] rows]
SELECT문은 집합(set) 질의 또는 다른 질의의 서브쿼리(sub-query)의 일부가 될 수 있습니다CommonTableExpression은WITH절에 지정된 질의에서 파생된 임시 결과 집합입니다table_reference는 질의의 입력을 나타냅니다. 일반 테이블, 뷰, join 또는 서브쿼리(sub-query)일 수 있습니다.- 테이블 이름과 컬럼 이름은 대소문자를 구분하지 않습니다
WHERE 절
WHERE 조건은 불리언 표현식입니다. Hive 방언은 WHERE 절에서 다양한 연산자와 UDF를 지원합니다. WHERE 절에서는 몇 가지 유형의 서브쿼리가 지원됩니다.
GROUP BY 절
자세한 내용은 GROUP BY를 참고하세요.
ORDER BY 절
ORDER BY 절은 사용자가 지정한 순서대로 결과 행을 정렬하여 반환하는 데 사용됩니다. SORT BY와 달리 ORDER BY 절은 출력에서 전역 순서(global order)를 보장합니다.
경고 — 참고: 전역 순서를 보장하려면 최종 출력을 정렬하는 단일 태스크가 하나 있어야 합니다. 따라서 출력 행 수가 너무 많으면 완료하는 데 매우 오랜 시간이 걸릴 수 있습니다.
CLUSTER/DISTRIBUTE/SORT BY
자세한 내용은 Sort/Cluster/Distributed BY를 참고하세요.
ALL과 DISTINCT 절
ALL과 DISTINCT 옵션은 중복 행을 반환할지 여부를 지정합니다. 이 두 옵션 중 아무것도 주어지지 않으면 기본값은 ALL입니다(모든 일치 행이 반환됨). DISTINCT는 결과 집합에서 중복 행 제거를 지정합니다.
LIMIT 절
LIMIT 절은 SELECT 문이 반환하는 행 수를 제한하는 데 사용할 수 있습니다.
LIMIT는 하나 또는 두 개의 숫자 인자를 받으며, 둘 다 음이 아닌 정수 상수여야 합니다. 첫 번째 인자는 반환할 첫 행의 오프셋을, 두 번째 인자는 반환할 최대 행 수를 지정합니다. 단일 인자가 주어지면 최대 행 수를 의미하며 오프셋의 기본값은 0입니다.
예시 (Examples)
다음은 hive 방언을 사용해 몇 가지 질의를 실행하는 예시입니다.
경고 — 참고: Hive 방언은 더 이상 Flink SQL 질의를 지원하지 않습니다. Flink 문법으로 작성하고 싶다면 기본 방언으로 전환하세요.
Flink SQL> create catalog myhive with ('type' = 'hive', 'hive-conf-dir' = '/opt/hive-conf');
[INFO] Execute statement succeeded.
Flink SQL> use catalog myhive;
[INFO] Execute statement succeeded.
Flink SQL> load module hive;
[INFO] Execute statement succeeded.
Flink SQL> use modules hive,core;
[INFO] Execute statement succeeded.
Flink SQL> set table.sql-dialect=hive;
[INFO] Session property has been set.
FLINK SQL> set sql-client.execution.result-mode=tableau;
Flink SQL> select explode(array(1,2,3)); -- call hive udtf
+----+-------------+
| op | col |
+----+-------------+
| +I | 1 |
| +I | 2 |
| +I | 3 |
+----+-------------+
Received a total of 3 rows
Flink SQL> create table tbl (key int,value string);
[INFO] Execute statement succeeded.
Flink SQL> insert into table tbl values (5,'e'),(1,'a'),(1,'a'),(3,'c'),(2,'b'),(3,'c'),(3,'c'),(4,'d');
[INFO] Submitting SQL update statement to the cluster...
[INFO] SQL update statement has been successfully submitted to the cluster:
FLINK SQL> set execution.runtime-mode=batch; -- change to batch mode
Flink SQL> select * from tbl cluster by key; -- run cluster by
2021-04-22 16:13:57,005 INFO org.apache.hadoop.mapred.FileInputFormat [] - Total input paths to process : 1
+-----+-------+
| key | value |
+-----+-------+
| 1 | a |
| 1 | a |
| 5 | e |
| 2 | b |
| 3 | c |
| 3 | c |
| 3 | c |
| 4 | d |
+-----+-------+
Received a total of 8 rows