HPL/SQL 레퍼런스
HPL/SQL 레퍼런스 (Reference)
HPL/SQL(Hive Hybrid Procedural SQL On Hadoop)은 Hive에서 절차적 SQL(procedural SQL)을 구현할 수 있게 해주는 도구예요. Hive 2.0.0부터 사용할 수 있고(HIVE-11055), 거의 모든 절차적 SQL 방언의 문법과 의미를 이해하는 하이브리드·이종 언어라서 기존 PL/SQL이나 Transact-SQL 경험을 그대로 Hadoop에 옮겨올 수 있답니다.
출처: 문서
본문
Hive Hybrid Procedural SQL On Hadoop(HPL/SQL)은 Hive를 위한 절차적 SQL을 구현하는 도구예요. Hive 2.0.0에서 사용할 수 있어요(HIVE-11055).
HPL/SQL은 Apache Hive, SparkSQL, Impala 뿐만 아니라 다른 어떤 SQL-on-Hadoop 구현체, NoSQL, RDBMS를 위한 절차적 SQL 언어를 구현하는 오픈 소스 도구(Apache License 2.0)예요.
HPL/SQL은 거의 모든 기존 절차적 SQL 방언의 문법과 의미를 이해하는 하이브리드·이종 언어로, 어떤 데이터베이스와도 함께 사용할 수 있어요. 예를 들어 기존 Oracle PL/SQL 코드를 Apache Hive와 Microsoft SQL Server에서 실행하거나, Transact-SQL을 Oracle, Cloudera Impala, Amazon Redshift에서 실행할 수 있어요.
HPL/SQL 언어는 Oracle PL/SQL, ANSI/ISO SQL/PSM(IBM DB2, MySQL, Teradata 등), PostgreSQL PL/pgSQL(Netezza), Transact-SQL(Microsoft SQL Server와 Sybase)과 상당 부분 호환돼서, 기존 SQL/DWH 스킬과 익숙한 접근 방식을 활용해 Hadoop에 데이터 웨어하우스 솔루션을 구현할 수 있어요. 또한 기존 비즈니스 로직을 Hadoop으로 마이그레이션하기도 쉬워요.
HPL/SQL은 Hadoop에서 ETL 프로세스를 구현하는 효율적인 방법이에요.
처음에는 독립 실행형(command line) 도구로 제공됐지만, (HIVE-24230)의 일부로 HPL/SQL은 HiveServer(HS2)에 통합되는 방식으로 재구성됐어요. Beeline 같은 JDBC 클라이언트에서 HiveServer에 연결하면, 인터프리터가 파서에서 생성된 추상 구문 트리(AST)를 실행해요. Hive metastore는 함수와 프로시저 코드를 안전하게 영구 저장해요. 프로시저는 필요할 때 인터프리터 메모리에 요청 시 로드되고 캐시돼요. 세션을 닫거나 HiveServer를 다시 시작해도 정의가 유실되지 않아요.
시작하기 (Getting Started)
사용자 가이드 (User Guide)
- Configuration
- User-Defined Functions and Stored Procedures
- On-the-Fly SQL Conversion
- UDF to Run HPL/SQL Scripts from Hive Queries
- Error Handling
- Native and Managed Temporary Tables
언어 요소 (Language Elements)
- Data Types
- Declaration
- Assignment
- DATE Literal
- TIMESTAMP Literal
- INTERVAL Expressions
- CASE Expressions
- %TYPE Attribute
- %ROWTYPE Attribute
- %ISOPEN, %FOUND and %NOTFOUND Cursor Attributes
- Exceptions
연산자 (Operators)
속성 및 내장 변수 (Attributes and Built-in Variables)
| 이름 | 설명 |
|---|---|
| ACTIVITY_COUNT | 마지막 SQL 문의 영향을 받은 행 수 |
| SQLCODE | 마지막 SQL 문의 반환 코드 |
| SQLSTATE | 마지막 SQL 문의 반환 상태 |
문 (Statements)
| 문 | 설명 |
|---|---|
| ALLOCATE CURSOR | 프로시저 결과 집합을 위한 커서 할당 |
| ASSOCIATE RESULT SET LOCATOR | 프로시저 결과 집합을 위한 locator 정의 |
| BREAK | 루프 종료 |
| CALL | 저장 프로시저 실행 |
| CLOSE | 커서 닫기 |
| CMP | 테이블의 데이터 비교 |
| CREATE DATABASE | 데이터베이스 생성 |
| CREATE FUNCTION | 사용자 정의 SQL 함수 생성 |
| CREATE LOCAL TEMPORARY TABLE | 세션 수준 임시 테이블 생성 |
| CREATE PACKAGE | 프로그램 패키지 생성 |
| CREATE PROCEDURE | 사용자 정의 SQL 프로시저 생성 |
| CREATE TABLE | 테이블 생성 |
| CREATE VOLATILE TABLE | 세션 수준 임시 테이블 생성 |
| DECLARE | 변수 선언 |
| DECLARE CONDITION | 조건(condition) 선언 |
| DECLARE CURSOR | 커서 선언 |
| DECLARE HANDLER | 조건 핸들러 선언 |
| DECLARE TEMPORARY TABLE | 임시 테이블 선언 |
| DESCRIBE | 데이터베이스 객체 설명 |
| DROP DATABASE | 데이터베이스 삭제 |
| DROP TABLE | 테이블 삭제 |
| EXEC / EXECUTE / EXECUTE IMMEDIATE | 동적 SQL 문 또는 프로시저 실행 |
| EXIT WHEN | 루프 종료 |
| FETCH | 커서에서 다음 행 가져오기 |
| FOR cursor | FOR 문 (커서 루프) |
| FOR range | FOR 문 (정수 범위) |
| GET DIAGNOSTICS | 실행 정보 가져오기 |
| IF | IF 문 |
| INCLUDE | 다른 스크립트의 문 포함 |
| INSERT | INSERT 문 |
| INSERT DIRECTORY | 쿼리 결과를 파일로 쓰기 |
| LEAVE | 루프 종료 |
| OPEN | 커서 열기 |
| LOOP | 무조건 루프 |
| MAP OBJECT | 객체 이름을 커넥션 프로파일에 매핑 |
| NULL | no-op(아무것도 안 함) 문 |
| 한 줄 출력 | |
| RESIGNAL | 예외 다시 발생 |
| RETURN | 루틴에서 반환 |
| SELECT | SELECT 문 |
| SELECT INTO | 쿼리에서 값 할당 |
| SIGNAL | 조건 또는 예외 발생 |
| SET | 변수에 값 할당 |
| SET Session Option | 세션 옵션 설정 |
| TRUNCATE | 테이블 비우기 |
| UPDATE | UPDATE 문 |
| USE | 기본 데이터베이스 변경 |
| VALUES INTO | 변수에 값 할당 |
| WHILE | WHILE 루프 |
함수 (Functions)
| 함수 | 설명 |
|---|---|
| CAST | 데이터 타입으로 변환 |
| CHAR | 문자열로 변환 |
| COALESCE | 첫 번째 NULL이 아닌 값 반환 |
| CONCAT | 두 개 이상의 문자열 연결 |
| CURRENT_DATE | 현재 날짜(년, 월, 일) 가져오기 |
| CURRENT_TIMESTAMP | 현재 날짜와 시간 가져오기 |
| CURRENT_USER | 현재 사용자 이름 가져오기 |
| DATE | 날짜로 변환 |
| DECODE | IF-THEN-ELSE 로직 구현 |
| DBMS_OUTPUT.PUT_LINE | 한 줄 출력 |
| FROM_UNIXTIME | 1970-01-01 이후 초수를 타임스탬프로 변환 |
| INSTR | 문자열에서 부분 문자열의 인덱스 찾기 |
| LOWER | 문자열을 소문자로 변환 |
| LEN | 끝의 공백을 제외한 문자열 길이 |
| LENGTH | 문자열 길이 |
| MAX_PART_STRING | 최대 파티션 값(문자열) 가져오기 |
| MIN_PART_STRING | 최소 파티션 값(문자열) 가져오기 |
| MAX_PART_INT | 최대 파티션 값(int) 가져오기 |
| MIN_PART_INT | 최소 파티션 값(int) 가져오기 |
| MAX_PART_DATE | 최대 파티션 값(date) 가져오기 |
| MIN_PART_DATE | 최소 파티션 값(date) 가져오기 |
| NOW | 현재 날짜와 시간 가져오기 |
| NVL | 첫 번째 NULL이 아닌 값 반환 |
| NVL2 | 첫 번째 피연산자가 NULL이면 3번째, 아니면 2번째 반환 |
| PART_LOC | 파티션 위치 가져오기 |
| PART_COUNT | 파티션 개수 가져오기 |
| PART_COUNT_BY | 파티션 개수 가져오기 (그룹별) |
| REPLACE | 문자열 교체 |
| SUBSTR | 부분 문자열 반환 |
| SUBSTRING | 부분 문자열 반환 |
| SYSDATE | 현재 날짜와 시간 가져오기 |
| TIMESTAMP_ISO | 문자열을 타임스탬프로 변환 |
| TO_CHAR | 문자열로 변환 |
| TO_TIMESTAMP | 문자열을 타임스탬프로 변환 |
| TRIM | 앞뒤 문자 제거 |
| UNIX_TIMESTAMP | 1970-01-01 이후 초 단위의 현재 날짜·시간 가져오기 |
| UPPER | 문자열을 대문자로 변환 |
| USER | 현재 사용자 이름 가져오기 |
파일 I/O 연산 (File I/O Operations)
호환성 (Compatibility)
더 알아보기 (Learn more)
- HPL/SQL Get Started에서 HPL/SQL 사용을 시작하는 방법을 확인할 수 있어요.
- HPL/SQL Key Features에서 주요 기능 개요를 볼 수 있어요.
- Built-in Variables, Functions, Statements 페이지에서 각 항목의 자세한 내용을 확인할 수 있어요.