Hive创建表的三种形式

Hive创建表的三种形式,是根据实际也的业务需要进行表的设计及创建,参考Hive官方文档
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

语法

Hive创建表的三种形式_第1张图片

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];

data_type
: primitive_type
| array_type
| map_type
| struct_type
| union_type -- (Note: Available in Hive 0.7.0 and later)

primitive_type
: TINYINT
| SMALLINT
| INT
| BIGINT
| BOOLEAN
| FLOAT
| DOUBLE
| DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later)
| STRING
| BINARY -- (Note: Available in Hive 0.8.0 and later)
| TIMESTAMP -- (Note: Available in Hive 0.8.0 and later)
| DECIMAL -- (Note: Available in Hive 0.11.0 and later)
| DECIMAL(precision, scale) -- (Note: Available in Hive 0.13.0 and later)
| DATE -- (Note: Available in Hive 0.12.0 and later)
| VARCHAR -- (Note: Available in Hive 0.12.0 and later)
| CHAR -- (Note: Available in Hive 0.13.0 and later)

array_type
: ARRAY < data_type >

map_type
: MAP < primitive_type, data_type >

struct_type
: STRUCT < col_name : data_type [COMMENT col_comment], ...>

union_type
: UNIONTYPE < data_type, data_type, ... > -- (Note: Available in Hive 0.7.0 and later)

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] -- (Note: Available in Hive 0.13 and later)
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

file_format:
: SEQUENCEFILE
| TEXTFILE -- (Default, depending on hive.default.fileformat configuration)
| RCFILE -- (Note: Available in Hive 0.6.0 and later)
| ORC -- (Note: Available in Hive 0.11.0 and later)
| PARQUET -- (Note: Available in Hive 0.13.0 and later)
| AVRO -- (Note: Available in Hive 0.14.0 and later)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

constraint_specification:
: [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ]
[, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE

方式一

基础创建法

CREATE TABLE IF NOT EXISTS default.merit_log20180304
(
ip string COMMENT 'remote ip address',
user string ,
req_url string COMMENT 'user request url'
)
COMMENT 'merit web access log'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/merit_log20180304'
说明:
COMMENT 'merit web access log':表描述
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ':行数据边界以空格作为分割线
STORED AS TEXTFILE:作为文本文件存储
LOCATION 'user/merit/hive/warehouse/merit_log20180304':文件在hdfs中的存储路径

Hive创建表的三种形式_第2张图片
create

方式二

根据已有表拆分字段建表,例如只创建某个母表中的3个字段的子表。

CREATE TABLE IF NOT EXISTS default.merit_log20180304_rs
as select ip ,user from default.merit_log20180304;
说明:as 是关键字
as select ip ,user from default.merit_log20180304; 创建merit_log20180304_rs的查询语句

方式三

根据已存在的表创建新表,like是关键字

语法:CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];

样例:
CREATE TABLE IF NOT EXISTS default.merit_log20180305
LIKE merit_log20180304
LOCATION '/user/hive/warehouse/merit_log20180305';

加载数据到表中

  • 创建日志表merit_log.txt并添加数据
    命令:vi merit_log.txt

    Hive创建表的三种形式_第3张图片
    image.png

  • 加载merit_log文件到表
    命令:load data local inpath '/opt/datas/merit_log.txt' into table default.merit_log20180304

    Hive创建表的三种形式_第4张图片
    inpath

  • 查看结果
    命令:select * from merit_log20180304 ;

    Hive创建表的三种形式_第5张图片

你可能感兴趣的:(Hive创建表的三种形式)