CREATE 문
CREATE 문 (CREATE Statements)
Hive dialect에서는 현재 다음과 같은 CREATE 문을 지원합니다:
- CREATE DATABASE
- CREATE TABLE
- CREATE VIEW
- CREATE MARCO
- CREATE FUNCTION
출처: 문서
본문
CREATE DATABASE
설명
CREATE DATABASE 문은 지정된 이름의 데이터베이스를 만드는 데 사용됩니다.
문법
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
예제
CREATE DATABASE db1;
CREATE DATABASE IF NOT EXISTS db1 COMMENT 'db1' LOCATION '/user/hive/warehouse/db1'
WITH DBPROPERTIES ('name'='example-db');
CREATE TABLE
설명
CREATE TABLE 문은 기존 데이터베이스에 테이블을 정의하는 데 사용됩니다.
문법
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[(col_name data_type [column_constraint] [COMMENT col_comment], ... [table_constraint])]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[
[ROW FORMAT row_format]
[STORED AS file_format]
]
[LOCATION fs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statment];
data_type
: primitive_type
| array_type
| map_type
| struct_type
primitive_type
: TINYINT
| SMALLINT
| INT
| BIGINT
| BOOLEAN
| FLOAT
| DOUBLE
| DOUBLE PRECISION
| STRING
| BINARY
| TIMESTAMP
| DECIMAL
| DECIMAL(precision, scale)
| DATE
| VARCHAR
| CHAR
array_type
: ARRAY < data_type >
struct_type
: STRUCT < col_name : data_type [COMMENT col_comment], ... >
row_format:
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char]
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, ...)]
file_format:
: SEQUENCEFILE
| TEXTFILE
| RCFILE
| ORC
| PARQUET
| AVRO
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
column_constraint:
: NOT NULL
table_constraint:
: [CONSTRAINT constraint_name] PRIMARY KEY (col_name, ...)
참고:
- 임시 테이블 생성은 아직 지원되지 않습니다.
예제
-- 비파티션 테이블 생성
CREATE TABLE t1(key string, value string);
-- 파티션 테이블 생성
CREATE TABLE pt1(key string, value string) PARTITIONED BY (year int, month int);
-- 특정 포맷으로 테이블 생성
CREATE TABLE t1(key string, value string) STORED AS ORC;
-- 특정 행 포맷으로 테이블 생성
CREATE TABLE t1(m MAP<BIGINT, STRING>)
ROW FROMAT DELIMITED COLLECTION ITEMS TERMINATED BY ';'
MAP KEYS TERMINATED BY ':';
-- select as 테이블 생성
CREATE TABLE t2 AS SELECT key, COUNT(1) FROM t1 GROUP BY key;
CREATE VIEW
설명
CREATE VIEW는 주어진 이름으로 뷰를 생성합니다. 열 이름이 제공되지 않으면 뷰의 열 이름은 정의하는 SELECT 식에서 자동으로 파생됩니다. (SELECT가 x+y 같은 별칭 없는 스칼라 식을 포함하면 결과 뷰 열 이름은 _C0, _C1 등으로 생성됩니다.) 열 이름을 바꿀 때 열 주석도 선택적으로 제공할 수 있습니다. (주석은 기본 열에서 자동으로 상속되지 않습니다.)
참고로 뷰는 저장소가 없는 순수 논리적 객체입니다. 쿼리가 뷰를 참조하면, 쿼리가 추가 처리할 행 집합을 만들기 위해 뷰의 정의가 평가됩니다.
문법
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name, ...) ]
[COMMENT view_comment]
[TBLPROPERTIES (property_name = property_value, ...)]
AS SELECT ...;
예제
CREATE VIEW IF NOT EXISTS v1
(key COMMENT 'key')
COMMENT 'View for key=1'
AS SELECT key FROM src
WHERE key = '1';
CREATE MARCO
설명
CREATE TEMPORARY MACRO 문은 식의 입력으로 사용할 선택적 열 목록을 받는 매크로를 생성합니다. 매크로는 현재 세션 기간 동안 존재합니다.
문법
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
예제
CREATE TEMPORARY MACRO fixed_number() 42;
CREATE TEMPORARY MACRO string_len_plus_two(x string) length(x) + 2;
CREATE TEMPORARY MACRO simple_add (x int, y int) x + y;
CREATE FUNCTION
설명
CREATE FUNCTION 문은 class_name에 의해 구현되는 함수를 생성합니다.
문법
임시 함수 생성 (Create Temporary Function)
CREATE TEMPORARY FUNCTION function_name AS class_name [USING [JAR|ARTIFACT] 'file_uri'];
함수는 현재 세션 기간 동안 존재합니다.
영구 함수 생성 (Create Permanent Function)
CREATE FUNCTION [db_name.]function_name AS class_name
[USING [JAR|ARTIFACT] 'file_uri'];
함수는 metastore에 등록되어 함수가 삭제되지 않는 한 모든 세션에 존재합니다.
파라미터
[USING [JAR|ARTIFACT] 'file_uri']사용자는 이 절을 사용해 함수 생성 시 함수 구현과 그 의존성을 포함하는 Jar를 추가할 수 있습니다.file_uri는 로컬 파일 또는 분산 파일시스템에 있을 수 있습니다. Flink는 쿼리에서 함수를 사용할 때 원격 jar를 자동으로 다운로드하며, 다운로드된 jar는 세션이 종료되면 제거됩니다.
예제
-- 클래스 `SimpleUdf`가 클래스패스에 이미 있다고 가정하고 함수 생성
CREATE FUNCTION simple_udf AS 'SimpleUdf';
-- 클래스 `SimpleUdf`가 클래스패스에 없다고 가정하고 jar를 사용해 함수 생성
CREATE FUNCTION simple_udf AS 'SimpleUdf' USING JAR '/tmp/SimpleUdf.jar';
-- 원격 jar를 사용해 함수 생성
CREATE FUNCTION simple_udf AS 'SimpleUdf' USING JAR 'hdfs://namenode-host:port/path/SimpleUdf.jar';