Hive SQL基本操作(持续更新中......)

Hive表重命名

  • ALTER TABLE oldName RENAME TO newName;

查看Hive表简表语句

  • show create table tableName

查看表字段详情

  • desc tableName

插入多个值

  • insert into table dbName.tableName values ('bj','1234','哈哈'), ('ah','1245','菜鸡')

添加/删除分区

  • 添加分区:
    • alter table tableName add partition (dt='2019-02-12', du='0')
  • 删除分区:
    • alter table ods.ods_vas_user_order_increment drop partition (prov_alias='bj', dt='20200505')

添加字段

  • alter table dwd.dwd_vas_user_order_increment_day add columns (operation string comment 'add/update/delete', operation_dt string)

修改字段

  • ALTER TABLE dept.demo CHANGE name ename string comment '测试说明';

取多个字段中第几大的数

  • 取五个字段中最小的值(index=0)
    • sort_array(array(filed4,filed3,filed1,filed0,filed2))[0]
  • 取10个数字中最大的值(index=9)
    • sort_array(array(10,1,8,3,6,5,4,7,2,9))[9]

通过hdfs dfs -put或者hdfs api写入hive分区表的数据在hive中无法被查询到的问题

  • 用法:MSCK REPAIR TABLE tableName
  • 原理:将关于分区的元信息添加到Hive metastore中
  • 优点:避免频繁使用alter table add partition

往表分区插入数据时的注意事项

  • insert overwrite table tableName1 partition (c='ah') select a,b,c from tableName2;
  • 覆盖插入数据到指定表的指定分区(c='ah')时,插入数据不能再包括分区字段c,因为指定分区(c='ah')时已经就确定了分区字段的值'ah'。所以上述错误,应该把select后面的c删了。

日期减n天(Hive函数)

  • date_sub('2020-01-02',n)
  • 注意:这里的格式必须为'yyyy-mm-dd'

使用join on 时的注意是事项

  • 记住on后面一定使用‘=’,不要使用‘<>’
  • 等号‘=’前后的字段,为NULL的都会关联不上,一定注意
  • on后面的关联字段,如果存在重复值,则结果数据会翻倍

本地数据导入Hive

  • 从服务器本地加载文件进hive(csv2hive.csv中只能包含数据,不能包含字段名)
    • load data local inpath 'csv2hive.csv' overwrite into table tableName
  • 从服务器的分布式环境加载数据进hive(csv2hive.csv中只能包含数据,不能包含字段名)
    • load data inpath 'csv2hive.csv' overwrite into table tableName

往hdfs导入文件

  • hadoop fs -put < local/hdfs src > < hdfs dest >
  • hadoop fs -copyFromLocal < local src > < hdfs dest >

从hdfs导出文件

  • hadoop fs -get < hdfs src > < local/hdfs dest >
  • hadoop fs -copyToLocal < hdfs src > < local dest >

grouping sets与grouping__id

  • 案例如下:
    select id,
           city,
           type,
           sum(income),
           grouping__id
    from db.table
    group by id,city,type
    grouping_set(id,city,type,(id,city,type))
    
  • 上述代码是分别按照id、city、type、(id,city,type)进行group by,等价于下面代码
    select id,  null,null,sum(income),1 as grouping__id from db.table group by id
    union all
    select null,city,null,sum(income),2 as grouping__id from db.table group by city
    union all
    select null,null,type,sum(income),4 as grouping__id from db.table group by type
    union all
    select id,  city,type,sum(income),7 as grouping__id from db.table group by id,city,type
    
  • grouping__id的值怎么来的?
    • 注意案例中的'group by id,city,type'的顺序
id city type grouping__id
group by id 1 0 0 1×2^0 + 0×2^1 + 0×2^2 1
group by city 0 1 0 0×2^0 + 1×2^1 + 0×2^2 2
group by type 0 0 1 0×2^0 + 0×2^1 + 1×2^2 4
group by id,city,type 1 1 1 1×2^0 + 1×2^1 + 1×2^2 7

hive.auto.convert.join

  • hive.auto.convert.join待更新

你可能感兴趣的:(Hive SQL基本操作(持续更新中......))