Hive中常用排错的命令
1、显示Table和Partition的详细信息
-- 获取table详细描述信息、存储格式等
desc formatted test;
通过上述命令,可以查询出来存储格式、表在hdfs实际存储的目录,表的基本信息等都可以列出来,有利于排查问题。
2、分区信息查看
-- 显示test表分区信息
show partitions test;
-- 显示test表 指定(ds=20190903)分区相信信息,如果存在就显示,如果不存在就不显示
show partitions test partition(ds=20190903);
show partitions test partition(ds=20190904);
-- 显示分区的详细信息,可以查看字段
desc formatted test partition(ds=20190903);
在此特地的提一下 “desc formatted test partition(ds=20190903);” 这个SQL,为什么呢?
可能有人会问,记这些有啥用,等你被坑的时候,你就知道了?
我来介绍一下这个坑,其实也不是坑吧,个人认为就是有一点不合理,怎么说呢?对于OLAP来讲,确实增减字段不是很厚道,但是大部分业务会有这样的场景,比如A表里面有10个字段,我需要临时加一个字段,怎么办?
加个字段呗? alter table test add columns(age int); -- 非分区表,正常的
BUT常用的是分区表,不可行,常见的一个现象就是,导入导出、查询分区表的数据的时候,会出现某一列无数据,有时候报错,慌不?查看创表语句发现,确实加上了字段了呀,但是就是无法进行导出操作?报不存在字段,慌不?
不要慌:其实是你操作不对,也不算是Hive的bug吧,Hive已经提供了解决方案,如下:
示例:alter table test_partition partition(year=2018) add columns(age int); -- 往 year=2018 分区里面添加字段
这样写,只能针对与一个分区,进行添加字段,能批量对历史分区也加上字段么?
示例:alter table table_for_test_add_column add columns (added_column string COMMENT '新添加的列') CASCADE;
那么我们就可以继续happy的玩耍了~ 验证各种操作都正常~
3、show语句支持正则表达式
场景:
有一个库,有N张表,我们需要查询某一张表,怎么办呢?名字刚好又忘记了,只记得个大概,那么我们可以进行模糊查询哦~(不知道这个语法之前,宝宝都是copy出来,然后用submit 搜的)
使用命令如下:
-- 模糊查询函数名
show functions "a.*";
show functions "a.";
show functions "ab.";
show functions ".s";
show functions "*.s";
show functions ".bs";
-- 模糊查询表名
show tables "*.test.*"
-- 语法雷同,具体不多bb。
-- 该语句输出匹配正则表达式的自定义和内置的函数,使用’.*’输出所有函数。需要注意的是正则表达式中必须要有点号,否则不会匹配成功
嗯,目前就这些小技巧了~ 后续使用上再发现,再继续补充吧,基础的DDL、DML,我没写哦~