语法语句:

external 外部的 创建外部表所用. 外部表被删除时数据不会被删除

小知识:     hive的表分为内部表(管理表)和外部表 external(外部) 默认内部

  1. 内部表(管理表) :在进行删除表的时候会将数据删除,导致其他使用这个数据的表,数据丢失.
  2. 如果数据是共享的,数据比较重要,建议使用外部表
  3. 管理表不用指定location 默认有自己与表名相同的目录
  4. 外部表指定location 指定数据位置 也可不指定 指定后,表名与数据文件夹名不一致
  5. 外部表不需要自己的目录结构

export  导出 将表中数据导出到本地文件夹中 

                使用场景一般是数据的迁移/备份

export table ku1.t1 to '/out/';

import 导入 将本地数据导入到表中

import table k2.t2 from '/out/';

comment 注释 可以注释表,字段

explain 计划执行

将查询结果建表

        create table t1 as select...


常用函数:

if()       
if(字段 is null , 0 , 1)配合sum()等聚合函数使用        
也可用于打标记 if(字段 ==  值,'标记1','标记2' )
case when end as 别名
case column
    when 值1 then ''
    when 值2 then ''
    ...
    else ''
    end as 别名

case
    when column = 值1 then ''
    when column = 值2 then ''
    ...
    else ''
    end as 别名
max(column)
size()           返回集合的长度
array(e1,e2...)        创建数组
array_contains()          是否包含
map('k1',11,'k2',22,'k3',33)        创建map
str_to_map()        参数一  字符串  参数二 元素的分隔符 参数三 key , value的分隔符
        例:str_to_map('zss:23,lss:33' , ',' , ':')
struct()         数据结构体 类似java中的Bean 数据        
        {"street":"hui long guan","city":"beijing"}        struct<street:string , city:string>
         {"street":"chao yang","city":"beijing"}    当数据都是这种形式时,使用struct结构体
concat(可变参数)         字符串拼接
collect_list(column)        将组内数据收集到数组中
collect_set()                与collect_list 的区别是去重
concat_ws('分隔符',数组)        将数组中的元素使用分隔符拼接起来 
                                                就是将数组的样式改变了一点

split(字符串,'切割符')        返回数组
explode(集合)        将一行中复杂的array或者map结构拆分成多行,炸开
                                配合侧窗口函数使用完成列转行
lateral view 维护了炸开前后的数据关系
SELECT
name ,
cate
FROM
tb_movie 
lateral view 
explode(category) tmp as cate ;

编号函数 
rank()        相同的数据编号一致        最大的编号是行数
dense_rank()        相同的数据编号一致        最大的编号数可能小于行数
row_number()        编号        也用来做连续值,连续天,连续次数之类

窗口函数
over()        指定分析(聚合)函数工作的数据窗口大小,这个窗口大小可能随着巷道变化而变化
curret row        当前行
n preceding        向前n行数据
n following        向后n行数据
unbounded preceding        从第一行  起点        
unbounded following         到最后一行 终点
lag(字段,intnum,default)         取前n行数据
lead(字段,intnum,default)        取后n行数据
SELECT
* ,
-- 按照名字开窗口  窗口内时间排序  计算逻辑是 起始行到当前行累加
sum(money)  over(partition by name  order by cdate  rows  between  起始行 and  当前行)  -- 窗口内排序
FROM
tb_orders ;


--   unbounded preceding  起点 
SELECT
* ,
-- 按照名字开窗口  窗口内时间排序  计算逻辑是 起始行到当前行累加
sum(money)  over(partition by name  order by cdate  rows  between  unbounded preceding  and  current row)  -- 窗口内排序
FROM
tb_orders ;

-- 当前行  和 上一行加
SELECT
* ,
-- 按照名字开窗口  窗口内时间排序  计算逻辑是 起始行到当前行累加
sum(money)  over(partition by name  order by cdate  rows  between  1 preceding  and  current row)  -- 窗口内排序
FROM
tb_orders ;

SELECT
* ,
-- 按照名字开窗口  窗口内时间排序  计算逻辑是 起始行到当前行累加
sum(money)  over(partition by name  order by cdate  rows  between  1 preceding  and  1 following)  -- 窗口内排序
FROM
tb_orders ;

数据结构体:

array()
map()
struct()数据结构体 类似java中的Bean 数据        
        {"street":"hui long guan","city":"beijing"}        struct<street:string , city:string>
         {"street":"chao yang","city":"beijing"}    当数据都是这种形式时,使用struct结构体