前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive命令使用记录

Hive命令使用记录

作者头像
WHYBIGDATA
发布2023-01-31 11:54:22
3660
发布2023-01-31 11:54:22
举报
文章被收录于专栏:WHYBIGDATA公众号同步文章

Hive命令使用记录

  • 1.操作一些常用的Bash Shell 命令:
  • 2.操作HDFS 平台相关的命令:
  • 3.查看当前使用的数据库
  • 4.创建表的时候通过location 指定数据存储位置, 加载数据
  • 5.隐式类型转换的规则如下


1.操作一些常用的Bash Shell 命令:

❝hive>紧跟一个"!" 号+Bash Shell 命令, 结尾加";"。 ❞

代码语言:javascript
复制
hive>!pwd;
hive>!ls /home/user

2.操作HDFS 平台相关的命令:

❝去掉HDFS 平台命令前的Hadoop 关键字,其他保留,以";"号结尾。 ❞

代码语言:javascript
复制
hive>dfs -ls /

注释:相当于

代码语言:javascript
复制
[zhangsan@node01-]$ hadoop dfs -ls/

命令查询的结果,但不同的是Hadoop dfs 每次运行的时候都会单独启用一个JVM, 而

代码语言:javascript
复制
hive>dfs -ls /

命令是在单线程下运行的, 感觉上比前者快很多。

3.查看当前使用的数据库

通过current_database()查看当前使用的数据库。

代码语言:javascript
复制
hive> SELECT current_database();
OK
Default
hive>

也可以通过 hive.ch.print.current.db 参数设定来显示当前数据是哪一个,如果值为true, 则显示当前数据信息, 为false 则不显示当前数据信息。

代码语言:javascript
复制
hive> set hive.cli.print.current.db=true;
hive (default)> set hive.cli.print.current.db=false;
hive>

其中default 说明当前使用的是默认的数据库default。

4.创建表的时候通过location 指定数据存储位置, 加载数据

代码语言:javascript
复制
load data inpath '/test/employees.txt' into table employee;

注意:在通过location 指定数据存储位置时,要注意HDFS 已经存在的数据的存储格式。Hive 属于典型的读时模式设计, 如果原有HDFS 文件目录构成中, 指定表名所在文件夹下既有 文件夹又有文件, 数据读时会出现NULL值现象。

❝在进行数据加载时,每次加载一回,系统都会在指定表的位置增加一个文件,由于HDFS 不适合小文件的存储, 故用户在进行数据加载时, 应注意一批加载数据不要过小, 以免出 现小文件过多的情况。 ❞

5.隐式类型转换的规则如下

  • 任何整数类型可以隐式地转换为一个范围更广的类型。
  • 所有整数类型、FLOAT 和STRING 类型都能隐式转换为DOUBLE 。
  • TINYINT 、SM凡LINT 和INT 都可以转换为FLOAT 。
  • BOOLEAN 类型不能转换为其他任何类型。
  • TIMESTAMP 可以被隐式转换为STRING。

使用cast操作显式进行数据类型转换, 如cast('l'AS INT) 是把字符串 '1' 转换成整数值1 。

❝例如:对于员工表employee, salary 列是使用FLOAT 数据类型的。现在,假设这个字段使用的数据类型是STRING, 那么如何才能将其作为FLOAT 值进行计算呢? ❞

代码语言:javascript
复制
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 条数据。 ❞

代码语言:javascript
复制
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>
代码语言:javascript
复制
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 大。

❝结束! ❞

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WHYBIGDATA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hive命令使用记录
    • 1.操作一些常用的Bash Shell 命令:
      • 2.操作HDFS 平台相关的命令:
        • 3.查看当前使用的数据库
          • 4.创建表的时候通过location 指定数据存储位置, 加载数据
            • 5.隐式类型转换的规则如下
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档