Hive命令使用记录
文章目录
操作一些常用的Bash Shell 命令:
hive>紧跟一个"!" 号+Bash Shell 命令, 结尾加";"。
hive>!pwd; hive>!ls /home/user
操作HDFS 平台相关的命令:
去掉HDFS 平台命令前的Hadoop 关键字,其他保留,以";"号结尾。
hive>dfs -ls /
注释:相当于
[zhangsan@node01-]$ hadoop dfs -ls/
命令查询的结果,但不同的是Hadoop dfs 每次运行的时候都会单独启用一个JVM
, 而
hive>dfs -ls /
命令是在单线程
下运行的, 感觉上比前者快很多。
查看当前使用的数据库
通过current_database()
查看当前使用的数据库。
hive> SELECT current_database(); OK Default hive>
也可以通过 hive.ch.print.current.db
参数设定来显示当前数据是哪一个,如果值为true, 则显示当前数据信息, 为false 则不显示当前数据信息。
hive> set hive.cli.print.current.db=true; hive (default)> set hive.cli.print.current.db=false; hive>
其中default 说明当前使用的是默认的数据库default。
创建表的时候通过location 指定数据存储位置, 加载数据
load data inpath '/test/employees.txt' into table employee;
注意:
在通过location 指定数据存储位置时,要注意HDFS 已经存在的数据的存储格式。Hive
属于典型的读时模式设计
, 如果原有HDFS 文件目录构成中, 指定表名所在文件夹下既有 文件夹又有文件
, 数据读时会出现NULL值
现象。
在进行数据加载时,每次加载一回,系统都会在指定表的位置增加一个文件,由于HDFS
不适合小文件的存储, 故用户在进行数据加载时, 应注意一批加栽数据不要过小, 以免出
现小文件过多的情况。
隐式类型转换的规则如下
-
任何整数类型可以隐式地转换为一个范围更广的类型。
-
所有整数类型、FLOAT 和STRING 类型都能隐式转换为DOUBLE 。
-
TINYINT 、SM凡LINT 和INT 都可以转换为FLOAT 。
-
BOOLEAN 类型不能转换为其他任何类型。
-
TIMESTAMP 可以被隐式转换为STRING。
使用cast
操作显式
进行数据类型转换, 如cast('l’AS INT) 是把字符串 ‘1’ 转换成整数值1 。
例如:对于员工表employee, salary 列是使用FLOAT 数据类型的。现在,假设这个字段使用的数据类型是STRING, 那么如何才能将其作为FLOAT 值进行计算呢?
SELECT name, salary FROM employee WHERE cast (salary AS FLOAT) < 100000.0;
如果例子中的salary 字段的值不是合法的浮点数字符串, Hive 会返回NULL 。
类型转换函数的语法是cast(value AS Type), 如果强制类型转换失败, 例如执行cast('x’AS INT),表达式就会返回空值NULL。
注意:将浮点数转换成整数的推荐方式是round()或者floor()函数,而不是使用类型转换操作符cast。
下例在求所有"Income Taxes" 大于0.1 的值, 本应只查询出"ManagerWang" 一条数据, 却查出了3 条数据。
hive> SELECT uname, salary, deduc七ions FROM user info where deductions ["Income Taxes"] >0. 1; OK ManagerWang 12000.0 {"Income Taxes":0.2,"Provident Fund":0.1,"Insurance":0.13) ManagerLi 8000.0 {"Income Taxes":0.1,"Provident Fund":0.08,"Insurance":0.13} ManagerZhao 7000.0 {"·Income Taxes":0.1,"Provident Fund":0.08,"Insurance":0.13) Time taken: 0.794 seconds, Fetched: 3 row(s) hive>
hive> DESC userinfo; OK uname salary subordinates deductions string float array<string> map<string,float> address struct<province:string,city:string,zip:int>
为什么会发生这样的情况?
原来用户写一个浮点数(如0.1) 时, Hive会将该值保存为double型
, 而之前定义deductions这个Map的值的类型是float型的, 这意味着Hive将隐式地将税收减免值(deductions)转换为double类型后再进行比较。
但此例中, 0.1 的最近似的精确值应略大于
0.1, 0.1 对于float类型是0.1000001, 而对于double类型是0.100000000001。这是因为8个字节的double值具有更多的小数位
。当表中的float值通过Hive转换为double值时, 其产生的double值是0.1000000100000,
这个值实际要比0.100000000001 大。
结束!
本文来自博客园,作者:{WHYBIGDATA},转载请注明原文链接:https://www.cnblogs.com/shadowlim/p/17051755.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)