一、DDL语句
这篇文章DDL语句讲得很全,(文章链接:https://www.cnblogs.com/qingyunzong/p/8723271.html)
SQL中的if表达式用法和流程控制用法:https://www.cnblogs.com/xuhaojun/p/9141396.html
二、DML语句
- 1、
load data [local] inpath '文件路径' [overwrite] into table 表名
用来向hive装载数据,不过注意这操作不是把数据复制到表中,而是把文件和表建立起关联,当访问表的时候就去查询hdfs的数据。
参数说明:如果加上local则支持用户从其本地文件装载数据(eg:file:///user/hive/example
),如果没有local则从Hadoop配置变量fs.default.name中设定的路径加载文件(eg:hdfs://namenode:9000/user/hive/example
)。如果有overwrite的话就把数据装载到一个早已建好的表中并且替换原来的数据。 - 2、
insert into table 表名 values(row_values1),(row_values2);
用来插入表数据,支持多行插入。
insert overwrite table 表名 partition(分区字段=’分区值') select子句;
用来把查询的数据插入到目标表中。具体参考这篇文章:https://blog.csdn.net/babydavic/article/details/26357017 - 3、
update 表名 set 列名=值 where 条件
更新表数据 - 4、
delete 表名 where 条件
删除表数据 - 5、
select 列名 from 表名1 join 表名2 on (表1唯一字段=表2唯一字段)
等值连接
select 列名 from 表名1 left join 表名2 on (表1唯一字段=表2唯一字段)
左外连接 (左表有的都要出现)
select 列名 from 表名1 right join 表名2 on (表1唯一字段=表2唯一字段)
右外连接
select 列名 from 表名1 full outer join 表名2 on (表1唯一字段=表2唯一字段)
全外连接 (左右表有的都要出现)
select 列名 from 表名1 left semi join 表名2 on (表1唯一字段=表2唯一字段)
左半连接(右边的表只能在on子句中设置过滤条件,where不能设置过滤条件,最终select结果只允许出现左表,右表的数据被过滤掉了,左表的记录在右表中一旦找到对应的记录,右侧表既停止扫描 ,所以性能会高些),PS:没有右半连接。
三、窗口函数
和SQL一样有sum()、count()、max()、min()、avg()
等聚合函数,还有
ntile(参数)
:指的是根据传入的参数划分为几份,并返回每一份的序号。
row_number()
:指的是生成一列连续的序号,从1开始。
rank()
:指的是生成一列连续的序号,但和row_number()
区别的是相同的值这一项都为相同的序号,下一个序号就跳过。
dense_rank()
:与rank()
相反,下一个序号不跳过。
lag(参数1,参数2,参数3)
:第一个参数是排序列名,第二个参数是往后移动的开始行,第三个是没有数据时的默认值。
lead(参数1,参数2,参数3)
:这和lag()函数是相反的,区别是它往前移动。
first_value(参数)
:,参数是该列,对该列到目前为止的第一个值。
last_value(参数)
:参数是该列,对该列到目前为止的最后一个值。
以上窗口函数总结主要参考这篇文章:https://www.jianshu.com/p/9fda829b1ef1,看例子的话这篇文章里有,我就不重复做同样的事情了。
网友评论