文章目录
- 1、SQL语言类型
- 2、Hive的DDL操作:
- 2.1、创建表:
- 2.2、插入数据:
- 2.3、修改表:
- 2.4、删除表
- 2.5 分区
- 2.6分桶
- 2.7、总结
- 3、Hive表的DQL
- 4、Hive中的内置函数
- 4.1、字符串处理相关
- 4.2、JSON字符串解析
- 4.3、聚合函数
- 4.4、数据类型转化CAST
- 5、Hive中的视图和索引
- 5.1、视图
- 5.2、索引
- 6、Hive的日期函数时间函数
- 6.1、Hive的日期函数
- 6.2、时间戳和日期格式互转
- 7、Hive函数01-日期函数时间函数
- 8、Hive函数02-分析函数(开窗函数、窗口函数)
1、SQL语言类型
1)数据定义语言DDL:create、alter、drop
2)数据控制语言DCL:权限控制、grant、revoke
3)数据操作语言DML:insert、update、delect
4)数据查询语言DQL:select子句;
2、Hive的DDL操作:
2.1、创建表:
create [external] table [if not exists] table_name (
col_name data_type [comment '字段描述信息']
col_name data_type [comment '字段描述信息'])
[comment '表的描述信息']
[partitioned by (col_name data_type,...)] --分区
[clustered by (col_name,col_name,...)] --分桶
[sorted by (col_name [asc|desc],...) into num_buckets buckets] --指定排序规则
[row format row_format] --指定表文件字段分隔符
[storted as ....] --存储格式常用的是:SEQUENCEFILE, TEXTFILE, RCFILE
[location '指定表的路径']
2.2、插入数据:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
[PARTITION (partcol1=val1, partcol2=val2 ...)]
2.3、修改表:
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
2.4、删除表
DROP TABLE [IF EXISTS] table_name;
2.5 分区
1)添加分区:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec
[LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;
partition_spec:
: (p_column = p_col_value, p_column = p_col_value, ...)
2)重命名分区:
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
3)删除分区
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
4)动态分区
hive.exec.dynamic.partition=true; 是否允许动态分区
hive.exec.dynamic.partition.mode=strict/nostrict; 动态区模式为严格模式
hive.exec.max.dynamic.partitions=1000; 允许最大的动态分区
hive.exec.max.dynamic.partitions.pernode=100; 单个节点允许最大分区
2.6分桶
2.7、总结
所以关于Hive表的DDL语言,使用JDBC程序如下,只需要将stmt.executeQuery()中传入数据DDL语言就行;
3、Hive表的DQL
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[HAVING having_condition]
[ORDER BY col_list]]
[LIMIT number]; --查询部分的语法就和前面SQL的语法相差不大;
4、Hive中的内置函数
4.1、字符串处理相关
签名 | 功能描述 |
concat(String a,string b…) | 返回ab字符换拼接后的结果 |
substr(String A,int start) | 从start开始知道结束 |
upper(String A) | 返回所有字符的大写字符串 |
4.2、JSON字符串解析
签名 | 功能描述 |
get_json_object(string json_string, string path) | 提取从基于指定的JSON路径的JSON字符串JSON对象,并返回提取的JSON字符串的JSON对象。如果输入的JSON字符串无效,返回NULL。 |
4.3、聚合函数
4.4、数据类型转化CAST
5、Hive中的视图和索引
5.1、视图
hive> CREATE VIEW emp_30000 AS
> SELECT * FROM employee
> WHERE salary>30000;
--删除视图:
DROP VIEW view_name
5.2、索引
CREATE INDEX index_name
ON TABLE base_table_name (col_name, ...)
AS 'index.handler.class.name'
[WITH DEFERRED REBUILD]
[IDXPROPERTIES (property_name=property_value, ...)]
[IN TABLE index_table_name]
[PARTITIONED BY (col_name, ...)]
[
[ ROW FORMAT ...] STORED AS ...
| STORED BY ...
]
[LOCATION hdfs_path]
[TBLPROPERTIES (...)]
--比如一个例子:
hive> CREATE INDEX inedx_salary ON TABLE employee(salary)
> AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';
--删除一个索引:
DROP INDEX <index_name> ON <table_name>
6、Hive的日期函数时间函数
6.1、Hive的日期函数
在Hive中可以用String,Date和TimeStamp表示日期时间,String 用 yyyy-MM-dd 的形式表示,Date 用 yyyy-MM-dd 的形式表示,Timestamp 用 yyyy-MM-dd hh:mm:ss 的形式表示。在Join的时候String与Date、TImeStamp表达的时间相同时可以直接比较,但是Date和TimeStamp之间不能直接比较,需要用cast进行类型转化;
6.2、时间戳和日期格式互转
这个日志关于时间和日期总结的巨好
7、Hive函数01-日期函数时间函数
8、Hive函数02-分析函数(开窗函数、窗口函数)
窗口函数