Hive Language 안내
Hive Language 안내 (Language)
Hive의 언어(language) 관련 문서들을 안내하는 개요 페이지예요. HPL/SQL부터 SQL Conformance, LanguageManual의 각 주제(DDL, DML, Select, Join 등)까지 Hive 언어 전반의 하위 문서들을 정리하고 있습니다.
출처: 문서
본문
HPL/SQL Reference
Hive Hybrid Procedural SQL On Hadoop(HPL/SQL)은 Hive를 위한 절차적 SQL(procedural SQL)을 구현하는 도구예요. Hive 2.0.0(HIVE-11055)부터 사용 가능하며, Apache License 2.0의 오픈소스입니다.
HPL/SQL은 Apache Hive, SparkSQL, Impala뿐 아니라 다른 SQL-on-Hadoop 구현체, 어떤 NoSQL, 어떤 RDBMS에서도 사용할 수 있는 절차적 SQL 언어를 구현해요. 하이브리드(hybrid)이자 이종(heterogeneous) 언어로, 거의 모든 기존 절차적 SQL 방언의 구문·시맨틱을 이해합니다. 예를 들어 기존 Oracle PL/SQL 코드를 Apache Hive와 Microsoft SQL Server에서 실행하거나, Transact-SQL을 Oracle, Cloudera Impala, Amazon Redshift에서 실행할 수 있습니다.
Write Ordering
Write ordering은 테이블 파일 내 데이터의 물리적 배치를 제어해요. 쿼리 실행 중 데이터를 정렬하는 SORT BY와 달리, write ordering은 쓰기 시점에 적용되어 저장된 파일에 지속됩니다. Iceberg 테이블에서 지원되며 테이블 생성 시 지정할 수 있습니다.
Hive는 두 가지 write ordering 전략을 지원합니다.
- Type-Native Ordering: 지정한 순서로 하나 이상의 컬럼을 정렬
- Z-Ordering: 공간 채움 곡선(space-filling curves)을 사용한 다차원 클러스터링
Type-Native Column Ordering은 Hive 4.1.0에서 도입되었습니다.
Apache Hive SQL Conformance
이 페이지는 Apache Hive가 SQL 표준의 어떤 부분을 지원하는지 문서화해요. 버전별로 구분되어 있어 사용자는 자신에게 가용한 기능을 빠르게 파악할 수 있습니다. 현재 SQL 표준의 공식 명칭은 ISO/IEC 9075 "Database Language SQL"이고, 최근 갱신판은 2016년에 나와 SQL:2016으로 불립니다. Hive의 SQL Conformance 페이지는 SQL:2016 표준의 Feature ID 값을 기준으로 SQL 기능을 참조해요.
CAST...FORMAT (SQL:2016 datetime formats)
CAST(<timestamp/date> AS <varchar/char/string> [FORMAT <template>])
CAST(<varchar/char/string> AS <timestamp/date> [FORMAT <template>])
예:
select cast(dt as string format 'DD-MM-YYYY')
select cast('01-05-2017' as date format 'DD-MM-YYYY')
패턴은 AM/PM과 T/Z를 제외하고는 대소문자를 구분하지 않습니다. 문자열 → datetime 변환에서는 중복 형식 토큰이 허용되지 않아요 (의미는 같지만 길이가 다른 "Y"/"YY", 동작이 다른 "RR"/"YY" 등).
Common Table Expression (CTE)
CTE는 SELECT나 INSERT 키워드 바로 앞의 WITH 절에 지정된 단순 쿼리에서 파생된 임시 결과 집합이에요. CTE는 단일 문의 실행 범위 안에서만 정의됩니다. 하나 이상의 CTE를 Hive의 SELECT, INSERT, CREATE TABLE AS SELECT, CREATE VIEW AS SELECT 문에서 사용할 수 있어요. CTE는 HIVE-1180으로 Hive 0.13.0에 추가되었습니다.
Compaction pooling
컴팩션 요청과 워커를 풀(pool)에 할당할 수 있는 개념이에요. 특정 풀에 할당된 워커는 그 풀의 컴팩션 요청만 처리합니다. 풀 미지정 워커와 요청은 기본 풀에 속합니다. 예를 들어 'high priority compaction' 풀을 만들고 자주 수정되는 테이블을 할당한 뒤 전용 워커 세트를 이 풀에 배정하면, 기본 큐에 더 먼저 들어온 요청이 있더라도 이 테이블들의 컴팩션 요청이 전용 워커에 즉시 처리됩니다.
Datasketches Integration
Apache DataSketches( https://datasketches.apache.org/ )가 HIVE-22939를 통해 Hive에 통합됐어요. 이를 통해 정규 SQL 문으로 다양한 sketch 연산을 수행할 수 있습니다.
모든 sketch 함수는 ds_{sketchType}_{functionName} 형태의 명명 규칙으로 등록돼요. 예를 들어 ds_hll_estimate는 hll sketch의 distinct 값을 추정하는 데 쓸 수 있습니다.
Enhanced Aggregation, Cube, Grouping and Rollup
SELECT 문의 GROUP BY 절에 대한 강화된 집계 기능을 문서화해요. Grouping sets, CUBE와 ROLLUP 연산자, GROUPING__ID 함수는 Hive 0.10.0에 추가되었습니다 (HIVE-2397, HIVE-3433, HIVE-3471, HIVE-3613). GROUPING__ID는 Hive 2.3.0부터 다른 SQL 엔진의 시맨틱과 호환되며(HIVE-16102), SQL grouping 함수도 2.3.0에 추가됐어요 (HIVE-15409).
Exchange Partition
EXCHANGE PARTITION 명령은 파티션을 원본 테이블에서 대상 테이블로 이동시키고 각 테이블의 메타데이터를 변경해요. HIVE-4095의 일부로 구현되었으며, 여러 파티션 교환은 Hive 1.2.2/1.3.0/2.0.0+에서 지원됩니다 (HIVE-11745). 명령 실행 시 HDFS의 원본 테이블 파티션 폴더가 대상 테이블 파티션 폴더로 이동하도록 이름이 바뀌고, metastore가 원본·대상 테이블의 메타데이터를 갱신합니다.
GenericUDAFCaseStudy
UDAF(사용자 정의 집계 함수) 작성 튜토리얼이에요. Hive는 simple과 generic 두 종류의 UDAF를 지원합니다. Simple UDAF는 쓰기 쉽지만 Java Reflection 때문에 성능 저하가 있고 가변 길이 인자 목록 같은 기능을 지원하지 않아요. Generic UDAF는 이런 기능을 모두 지원하지만 Simple UDAF만큼 직관적으로 쓰기는 어렵습니다.
Hive Operators
연산자 우선순위(Precedences)와 예시를 다루는 문서예요. A[B], A.identifier(요소 선택자·점), -A(단항), A IS [NOT] (NULL TRUE FALSE), A ^ B(비트 xor), A * B(곱/나눗셈/mod/div), A + B(덧셈/뺄셈), A & B(비트 and), 비트 or 등을 설명합니다. 관계형 연산자(Relational Operators)는 피연산자를 비교해 비교가 성립하는지에 따라 TRUE 또는 FALSE 값을 생성합니다.
Hive UDFs
Hive 사용자 정의 함수(UDF)는 Java로 개발되어 Apache Hive와 매끄럽게 통합되는 커스텀 함수예요. UDF는 파라미터를 받아 특정 동작을 실행하고 결과 값을 반환하는 루틴입니다. 반환 값은 UDF의 코드와 구현된 인터페이스에 따라 단일 스칼라 행 또는 완전한 결과 집합일 수 있어요. Apache Hive에는 사용자가 활용할 수 있는 다양한 내장 UDF가 포함되어 있으며, 필요에 따라 커스텀 UDF를 추가해 풍부한 UDF 세트를 확장할 수도 있습니다.
HivePlugins (Plugins)
커스텀 UDF를 만들려면 UDF를 상속하고 evaluate라는 메서드를 하나 이상 가진 새 클래스를 만들어야 해요.
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Lower extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
(이 기능에는 이미 내장 함수가 있으니 쉬운 예시일 뿐입니다.)
HiveQL
이 페이지는 deprecated되었으며, HiveQL Language Manual을 참고하세요.
LanguageManual (Hive Language Manual)
이것은 Hive Language Manual입니다. 다른 Hive 문서는 Hive wiki의 Home page를 참고하세요. 다루는 주제는 다음과 같아요.
- Commands and CLIs: Commands, Hive CLI(구), Beeline CLI(신), Variable Substitution, HCatalog CLI
- File Formats: Avro Files, ORC Files, Parquet, Compressed Data Storage, LZO Compression, Data Types
- Data Definition Statements: DDL Statements, Bucketed Tables, Write Ordering(Type-Native & Z-Order), Statistics(Analyze and Describe), Indexes, Archiving
- Data Manipulation Statements: DML: Load, Insert, Update, Delete; Import/Export
- Data Retrieval: Queries
LanguageManual Archiving
파일 수 감소를 위한 아카이빙이에요. HDFS 설계상 파일시스템의 파일 수는 namenode의 메모리 소비에 직접 영향을 줍니다. 소규모 클러스터에선 보통 문제가 안 되지만, 파일이 5천만~1억 개를 넘으면 단일 머신의 접근 가능 메모리 한계에 도달할 수 있습니다. 이런 상황에서는 파일 수를 최대한 줄이는 것이 유리해요.
LanguageManual Authorization
인증(Authorization)은 사용자가 특정 행동을 수행할 권한이 있는지 확인하는 것이며, 인증(Authentication, 사용자 신원 확인)과는 다릅니다. Hive 커맨드 라인 같은 도구의 강력한 인증은 Kerberos를 통해 제공되며, HiveServer2 사용자에게는 추가 인증 옵션이 있어요. 서로 다른 사용 사례를 만족시키는 세 가지 Hive 인가 모드가 있습니다.
LanguageManual Cli
$HIVE_HOME/bin/hive는 Hive 쿼리를 대화형 또는 배치 모드로 실행하는 셸 유틸리티예요. HiveServer2(0.11 도입)에는 SQLLine 기반 JDBC 클라이언트인 Beeline이라는 자체 CLI가 있습니다. 개발이 HiveServer2에 집중되면서 Hive CLI는 곧 Beeline을 위해 deprecated될 예정이에요 (HIVE-10511).
LanguageManual Commands
명령(Commands)은 속성 설정이나 리소스 추가 같은 비-SQL 문장이에요. HiveQL 스크립트나 CLI·Beeline에서 직접 사용할 수 있습니다.
| Command | Description |
|---|---|
| quit, exit | 인터랙티브 셸 종료 |
| reset | 설정을 기본값으로 재설정 (Hive 0.10: HIVE-3202). set 또는 -hiveconf로 설정한 파라미터가 초기화됨 |
set <key>=<value> |
특정 구성 변수(key)의 값 설정. 잘못 입력해도 에러 표시 안 됨 |
| set | 사용자/Hive가 오버라이드한 구성 변수 목록 출력 |
| set -v | 모든 Hadoop·Hive 구성 변수 출력 |
add FILE[S]/JAR[S]/ARCHIVE[S] <filepath>* |
분산 캐시에 파일/jar/아카이브 추가 |
| list FILE[S]/JAR[S]/ARCHIVE[S] | 분산 캐시에 추가된 리소스 출력 |
delete FILE[S]/JAR[S]/ARCHIVE[S] <filepath>* |
분산 캐시에서 리소스 제거 |
! <command> |
Hive 셸에서 셸 명령 실행 |
dfs <dfs command> |
Hive 셸에서 dfs 명령 실행 |
<query string> |
Hive 쿼리 실행 및 표준 출력으로 결과 출력 |
source FILE <filepath> |
CLI 안에서 스크립트 파일 실행 |
compile <groovy string> AS GROOVY NAMED <name> |
인라인 Groovy 코드를 컴파일해 UDF로 사용 (Hive 0.13.0부터) |
| show processlist | HiveServer2에서 실행 중인 연산 정보 표시. HIVE-27829에서 도입 |
LanguageManual DDL
HiveQL DDL 문을 문서화해요. CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX, DROP ..., TRUNCATE TABLE, ALTER ..., MSCK REPAIR TABLE(또는 ALTER TABLE RECOVER PARTITIONS), SHOW ..., DESCRIBE ... 등을 다룹니다. 키워드(Keywords), 비예약 키워드(Non-reserved Keywords), 예약 키워드(Reserved Keywords)에 대한 버전별 정보를 포함합니다.
LanguageManual DDL BucketedTables
버킷 테이블 생성·채우기 예시에요. 버킷 테이블은 비버킷 테이블보다 훨씬 효율적인 샘플링을 허용하고, 나중에 mapside join 같은 시간 절약 연산을 가능하게 합니다. 다만 테이블 생성 시 지정한 버킷팅은 쓰기 시점에 강제되지 않으므로, 메타데이터가 실제 레이아웃과 다른 속성을 광고할 수 있어 주의해야 합니다.
LanguageManual DML
Hive 데이터 조작 언어(DML)예요. 파일을 테이블에 로드하는 동안 Hive는 어떤 변환도 하지 않으며, 로드 연산은 데이터 파일을 Hive 테이블 위치로 옮기는 순수 복사/이동 연산입니다.
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)
Hive 3.0 이전의 Load 연산은 순수 copy/move 연산입니다.
LanguageManual Explain
EXPLAIN 명령은 쿼리 실행 계획을 보여줘요.
EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query
- AUTHORIZATION: HIVE 0.14.0부터 (HIVE-5961)
- VECTORIZATION: Hive 2.3.0부터 (HIVE-11394)
- LOCKS: Hive 3.2.0부터 (HIVE-17683)
- AST는 HIVE-13533에서 EXPLAIN EXTENDED에서 제거됐고, HIVE-15932에서 별도 명령으로 부활.
- EXTENDED 사용 시 파일 이름 같은 물리적 정보를 포함한 추가 정보가 생성됩니다.
LanguageManual GroupBy
groupByClause: GROUP BY groupByExpression (, groupByExpression)*
groupByExpression: expression
groupByQuery: SELECT expression (, expression)* FROM src groupByClause?
groupByExpression에서 컬럼은 위치 번호가 아니라 이름으로 지정돼요. Hive 0.11.0 이상에서는 위치로도 지정 가능합니다 (0.11.0~2.1.x: hive.groupby.orderby.position.alias=true, 2.2.0+: hive.groupby.position.alias=true).
LanguageManual ImportExport
EXPORT와 IMPORT 명령은 Hive 0.8.0에 추가되었고(HIVE-1918), 복제 확장은 Hive 1.2.0에 추가됐어요 (HIVE-7973). EXPORT 명령은 테이블 또는 파티션의 데이터와 메타데이터를 지정한 출력 위치로 내보내며, 그 위치를 다른 Hadoop/Hive 인스턴스로 옮긴 뒤 IMPORT 명령으로 가져올 수 있습니다.
LanguageManual Indexing
인덱싱은 3.0에서 제거되었어요 (HIVE-18448). 대안으로는 자동 재작성이 있는 물리화된 뷰(Hive 2.3.0+), 컬럼형 파일 포맷(Parquet, ORC)입니다. Hive 인덱스의 목표는 특정 컬럼의 조회 속도 향상이었습니다.
LanguageManual JoinOptimization
Hive 0.11.0에 추가된 join 최적화 (HIVE-3784) 문서예요. join의 효율을 높이고 사용자 힌트의 필요를 줄이도록 쿼리 실행 계획을 최적화합니다. 한쪽이 메모리에 맞는 join, star-schema join 등에서 map join이 자동으로 선택되도록 개선했어요.
LanguageManual Joins
join_table:
table_reference [INNER] JOIN table_factor [join_condition]
| table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition
| table_reference LEFT SEMI JOIN table_reference join_condition
| table_reference CROSS JOIN table_reference [join_condition] (as of Hive 0.10)
table_reference:
table_factor
| join_table
table_factor:
tbl_name [alias]
| table_subquery alias
| ( table_references )
join_condition:
ON expression
LanguageManual LateralView
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*
Lateral view는 explode() 같은 사용자 정의 테이블 생성 함수(UDTF)와 함께 사용됩니다. UDTF는 각 입력 행에 대해 0개 이상의 출력 행을 생성해요. lateral view는 먼저 UDTF를 base table의 각 행에 적용한 뒤, 결과 출력 행을 입력 행과 조인해 지정된 테이블 별칭을 가진 가상 테이블을 형성합니다.
LanguageManual LZO
LZO는 압축률보다 속도를 선호하는 무손실 데이터 압축 라이브러리예요. http://www.oberhumer.com/opensource/lzo 와 http://www.lzop.org 에 일반 정보가 있습니다.
LanguageManual ORC
ORC(Optimized Row Columnar) 파일 포맷은 Hive 데이터를 저장하는 매우 효율적인 방법으로, Hive 0.11.0에 도입되었습니다. 다른 Hive 파일 포맷의 한계를 극복하도록 설계됐어요. RCFile과 비교해 많은 장점이 있습니다.
LanguageManual Sampling
TABLESAMPLE 절은 전체 테이블 대신 데이터 샘플에 대한 쿼리를 작성하게 해줘요.
table_sample: TABLESAMPLE (BUCKET x OUT OF y [ON colname])
버킷은 1부터 번호가 매겨지고, colname은 샘플링할 컬럼(비파티션 컬럼 또는 rand())을 나타냅니다. 행은 colname에 따라 y개 버킷(1~y)에 무작위로 버킷팅되고, 버킷 x에 속한 행이 반환됩니다.
LanguageManual Select
[WITH CommonTableExpression (, CommonTableExpression)*] (Note: Only available starting with Hive 0.13.0)
SELECT [ALL | DISTINCT] select_expr, 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 문은 union 쿼리나 다른 쿼리의 서브쿼리의 일부가 될 수 있어요. 테이블·컬럼 이름은 대소문자를 구분하지 않습니다. Hive 0.13 이후에는 백틱(`) 안의 컬럼 이름이 문자 그대로 취급되며, 백틱 안의 백틱은 이중 백틱으로 표현합니다.
LanguageManual SortBy
ORDER BY, SORT BY, CLUSTER BY, DISTRIBUTE BY 절의 구문을 설명해요.
LanguageManual SubQueries
FROM 절의 서브쿼리:
SELECT ... FROM (subquery) name ...
SELECT ... FROM (subquery) AS name ... (Note: Only valid starting with Hive 0.13.0)
Hive 0.12까지는 FROM 절에서만 서브쿼리를 지원합니다. 서브쿼리는 FROM 절의 모든 테이블에 이름이 있어야 하므로 이름을 붙여야 해요. UNION이 있는 쿼리 표현식도 될 수 있고, 임의 깊이의 서브쿼리를 지원합니다.
LanguageManual Transform
Transform/Map-Reduce 구문이에요. Hive 언어가 네이티브로 지원하는 기능을 사용해 데이터 스트림에 커스텀 매퍼·리듀서를 플러그인할 수 있습니다. TRANSFORM 절로 mapper·reducer 스크립트를 임베드합니다.
LanguageManual Types
Hive가 지원하는 모든 데이터 타입을 나열해요. 숫자 타입(TINYINT, SMALLINT, INT/INTEGER, BIGINT, FLOAT, DOUBLE, DOUBLE PRECISION, DECIMAL, NUMERIC), 날짜/시간 타입(TIMESTAMP, DATE) 등을 다룹니다.
LanguageManual Union
select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...
UNION은 여러 SELECT 문의 결과를 단일 결과 집합으로 결합합니다. Hive 1.2.0 이전은 UNION ALL만 지원했으며, 1.2.0 이상에서는 기본적으로 UNION이 중복 행을 제거합니다. DISTINCT는 중복 제거를, ALL은 중복 제거 없이 모든 행을 포함합니다.
LanguageManual VariableSubstitution
Hive는 배치·인터랙티브 쿼리에 사용되며, 변수 치환(Variable Substitution)을 통해 환경별 구성 변수를 코드와 분리하는 작업을 가능하게 합니다. Hive 시작 시간(수 초)이 수천 번의 hive -e 호출에서는 무시할 수 없는 비용이 되므로 치환 메커니즘을 제공해요.
LanguageManual VirtualColumns
Hive 0.8.0은 두 가상 컬럼을 제공합니다. INPUT__FILE__NAME(매퍼 태스크의 입력 파일 이름)과 BLOCK__OFFSET__INSIDE__FILE(현재 전역 파일 위치)입니다. 이후 ROW__OFFSET__INSIDE__BLOCK, RAW__DATA__SIZE, ROW__ID, GROUPING__ID가 추가됐어요. 이 가상 컬럼들은 다른 용도로 사용할 수 없습니다.
LanguageManual WindowingAndAnalytics
Hive 0.11에 도입된 윈도우잉·분석 함수 강화 문서예요. LEAD, LAG, FIRST_VALUE, LAST_VALUE, RANK, ROW_NUMBER, DENSE_RANK, CUME_DIST, PERCENT_RANK, NTILE 등을 다룹니다.
LanguageManual XPathUDF
XPath 관련 내장 UDF 문서예요. xpath, xpath_short, xpath_int, xpath_long, xpath_float, xpath_double, xpath_number, xpath_string 함수를 제공하며, XPath 표현식으로 XML 데이터를 파싱하는 데 사용합니다. 버전: 0.6.0
더 알아보기 (Learn more)
이 페이지는 Hive 언어 전반의 목차 역할을 해요. 실제로 학습할 때는 각 주제의 개별 문서(HPL/SQL Reference, LanguageManual의 각 항목)를 참고하세요. Hive의 언어 기능 대부분은 이 개요에서 바로 아래 문서들로 이어집니다.