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';

더 알아보기 (Learn more)