基于语法描述说明
CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] 'path';
SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC]
(A | B | C)
如上语法,在语法描述中出现:
[]
,表示可选,如上[LOCATION]
表示可写、可不写|
,表示或,如上ASC | DESC
,表示二选一- ...,表示序列,即未完结,如上
SELECT expr, ...
表示在SELECT后可以跟多个expr(查询表达式)
,以逗号隔开 ()
,表示必填,如上(A | B | C)表示此处必填,填入内容在A、B、C中三选一
数据库操作
创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION 'path'] [COMMENT database_comment];
IF NOT EXISTS
,如存在同名数据库不执行任何操作
,否则执行创建数据库
操作[LOCATION]
,自定义数据库存储位置,如不填写
,默认数据库在HDFS的路径为:/user/hive/warehouse
[COMMENT database_comment]
,可选,数据库注释
删除数据库
DROP DATABASE [IF EXISTS] db_name [CASCADE];
[IF EXISTS]
,可选,如果存在此数据库执行删除,不存在不执行任何操作[CASCADE]
,可选,级联删除,即数据库内存在表,使用CASCADE可以强制删除数据库
数据库修改LOCATION
ALTER DATABASE database_name SET LOCATION hdfs_path;
==不会在HDFS对数据库所在目录进行改名,只是修改location后,新创建的表在新的路径,旧的不变==
选择数据库
USE db_name;
- 选择数据库后,后续
SQL
操作基于当前选择的库执行 - 如不使用use,默认在
default
库执行
若想切换回使用default库
USE DEFAULT;
查询当前USE的数据库
SELECT current_database();
表操作
数据类型
分类 | 类型 | 描述 | 字面量示例 |
---|---|---|---|
原始类型 | BOOLEAN | true/false | TRUE |
TINYINT | 1字节的有符号整数 -128~127 | 1Y | |
SMALLINT | 2个字节的有符号整数,-32768~32767 | 1S | |
INT | 4个字节的带符号整数 | 1 | |
BIGINT | 8字节带符号整数 | 1L | |
FLOAT | 4字节单精度浮点数1.0 | ||
DOUBLE | 8字节双精度浮点数 | 1.0 | |
DEICIMAL | 任意精度的带符号小数 | 1.0 | |
STRING | 字符串,变长 | “a”,’b’ | |
VARCHAR | 变长字符串 | “a”,’b’ | |
CHAR | 固定长度字符串 | “a”,’b’ | |
BINARY | 字节数组 | ||
TIMESTAMP | 时间戳,毫秒值精度 | 122327493795 | |
DATE | 日期 | ‘2016-03-29’ | |
时间频率间隔 | |||
复杂类型 | ARRAY | 有序的的同类型的集合 | array(1,2) |
MAP | key-value,key必须为原始类型,value可以任意类型 | map(‘a’,1,’b’,2) | |
STRUCT | 字段集合,类型可以不同 | struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0) | |
UNION | 在有限取值范围内的一个值 | create_union(1,’a’,63) |
基础建表
CREATE [EXTERNAL] TABLE tb_name
(col_name col_type [COMMENT col_comment], ......)
[COMMENT tb_comment]
[PARTITIONED BY(col_name, col_type, ......)]
[CLUSTERED BY(col_name, col_type, ......) INTO num BUCKETS]
[ROW FORMAT DELIMITED FIELDS TERMINATED BY '']
[LOCATION 'path']
[EXTERNAL]
,外部表,需搭配[ROW FORMAT DELIMITED FIELDS TERMINATED BY '']
指定列分隔符[LOCATION 'path']
表数据路径- 外部表示意
sql CREATE EXTERNAL TABLE test_ext(id int) COMMENT 'external table' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 'hdfs://node1:8020/tmp/test_ext';
[COMMENT tb_comment]
表注释,可选[PARTITIONED BY(col_name, col_type, ......)]
基于列分区
sql -- 分区表示意 CREATE TABLE test_ext(id int) COMMENT 'partitioned table' PARTITION BY(year string, month string, day string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
[CLUSTERED BY(col_name, col_type, ......)]
基于列分桶
sql CREATE TABLE course (c_id string,c_name string,t_id string) CLUSTERED BY(c_id) INTO 3 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY &#