HIVE 基本查询操作(二)——第2关:Hive数据类型和类型转换

简介: HIVE 基本查询操作(二)——第2关:Hive数据类型和类型转换

任务描述

本关任务:2013725日每种股票总共被客户买入了多少金额。


相关知识

为了完成本关任务,你需要掌握:1.Hive 的内置数据类型,2.如何转换数据类型。


Hive的内置数据类型

Hive 的内置数据类型可以分为两大类:(1)、基础数据类型;(2)、复杂数据类型


基本数据类型

数据类型 所占字节
TINYINT 1byte,-128 ~ 127
SMALLINT 2byte,-32,768 ~ 32,767
INT 4byte,-2,147,483,648 ~ 2,147,483,647
BIGINT 8byte,-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
BOOLEAN 布尔类型,true或者false
FLOAT 4byte单精度
DOUBLE 8byte双精度
STRING 字符系列。可以指定字符集。可以使用单引号或者双引号
BINARY 字节数组
TIMESTAMP 时间类型
CHAR
VARCHAR
DATE


复杂数据类型

数据类型 描述
STRUCT 通过“.”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, lastSTRING},那么第1个元素可以通过字段.first来引用。
MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素
ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用


CREATE TABLE employees (
    name string,
    salary double,
    subordinates array<string>,
    deductions map<string, double>,
    address struct<street:string, city:string, state:string, zip:int>
) row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
stored as textfile;


类型转换

Hive中的数据类型转换包括隐式转换implicit conversions)和显式转换explicitly conversions)。


隐式转换

Hive在需要的时候将会对numeric类型的数据进行隐式转换。比如我们对两个不同数据类型的数字进行比较,假如一个数据类型是INT型,另一个 是SMALLINT类型,那么SMALLINT类型的数据将会被隐式转换地转换为INT类型;但是我们不能隐式地将一个 INT类型的数据转换成SMALLINT或TINYINT类型的数据,这将会返回错误,除非你使用了CAST操作。
任何整数类型都可以隐式地转换成一个范围更大的类型。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隐式 地转换成DOUBLE;是的你没看出,STRING也可以隐式地转换成DOUBLE!但是你要记住,BOOLEAN类型不能转换为其他任何数据类型!


显式转换

表名:user

name(string) sex(string) height(string)
xiaohong 165.0
xiaoming 180.0


将身高类型转换为float

示例如下:

select * from user where cast(height as float) > 170.0


输出:xiaoming 男 180.0

这样height将会显示的转换成float。如果height是不能转换成float,这时候cast将会返回NULL


注意: (1) 如果将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的,而不是通过cast实现!

(2) 对于 BINARY 类型的数据,只能将 BINARY 类型的数据转换成 STRING 类型。如果你确信 BINARY 类型数据是一个数字类型(a number),这时候你可以利用嵌套cast操作,比如a是一个 BINARY,且它是一个数字类型,那么你可以用下面的查询:


SELECT (cast(cast(a as string) as double)) from src;


我们也可以将一个 String 类型的数据转换成 BINARY 类型。


(3) 对于 Date 类型的数据,只能在 DateTimestamp 以及 String 之间进行转换。下表将进行详细的说明:

有效的转换 结果
cast(date as date) 返回date类型
cast(timestamp as date) timestamp中的年/月/日的值是依赖与当地的时区,结果返回date类型
cast(string as date) 如果stringYYYY-MM-DD格式的,则相应的年/月/日的date类型的数据将会返回;但如果string不是YYYY-MM-DD格式的,结果则会返回NULL
cast(date as timestamp) 基于当地的时区,生成一个对应date的年/月/日的时间戳值
cast(date as string) date所代表的年/月/日时间将会转换成YYYY-MM-DD的字符串。


编程要求

在右侧编辑器补充代码,2013725日每种股票总共被客户买入了多少元。


测试说明

表名:total

col_name data_type comment
tradedate string 交易日期

tradetime string 交易时间
securityid string 股票ID
bidpx1 string 买入价
bidsize1 int 买入量
offerpx1 string 卖出价
bidsize2 int 卖出量


部分数据如下所示:

20130724    145004    152896    2.62    6960    2.63    13000
20130724    145101    152896    2.86    13880    2.89    6270
20130724    145128    152896    2.85    327400    2.851    1500
20130724    145143    152896    2.603    44630    2.8    10650


数据说明:

(152896: 每种股票id)
(20130724: 2013年7月24日)
(145004: 14点50分04秒)


平台会对你编写的代码进行测试:

预期输出:

股票id 买入金额

125896    1.2274221965454102E7
425178    9731762.828186035
668452    8799099.5
741589    5.474477543066406E7
745962    8010476.90625
789562    3.2612930090820312E7
792583    5969130.9295043945
885478    2.469516101953125E7
968956    3356246.9372558594
提示:
(1)总共买入金额=买入量*买入价
(2)将买入价为 string,强转为 float 计算*


开始你的任务吧,祝你成功!

----------禁止修改----------
create database if not exists mydb;
use mydb;
create table if not exists total(
tradedate string,
tradetime string,
securityid string,
bidpx1 string,
bidsize1 int,
offerpx1 string,
bidsize2 int)
row format delimited fields terminated by ','
stored as textfile;
truncate table total;
load data local inpath '/root/files' into table total;
----------禁止修改----------
----------begin----------
select securityid, sum(bidsize1 * cast(bidpx1 as float))
from total
where tradedate='20130725' group by securityid
----------end----------




目录
相关文章
|
6月前
|
SQL 存储 HIVE
Hive中的表是如何定义的?请解释表的结构和数据类型。
Hive中的表是如何定义的?请解释表的结构和数据类型。
97 0
|
6月前
|
SQL Java 数据库连接
java链接hive数据库实现增删改查操作
java链接hive数据库实现增删改查操作
389 0
|
12月前
|
SQL Java 数据库连接
Hive教程(08)- JDBC操作Hive
Hive教程(08)- JDBC操作Hive
756 0
|
12月前
|
SQL 存储 分布式计算
Hive的简单操作
Hive的简单操作
62 0
|
6月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
218 0
|
23天前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
25 4
|
23天前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
27 2
|
3月前
|
存储 SQL 分布式计算
Hive 中有多少种数据类型?
【8月更文挑战第12天】
284 4
|
4月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在进行Hive分区truncate操作时遇到权限不足,怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
72 0