Hive数据类型

server/2024/9/21 10:44:32/

1.基本数据类型

在这里插入图片描述
示例:

-- 创建表并定义列的数据类型
CREATE TABLE data_types_example (tinyint_column TINYINT,smallint_column SMALLINT,int_column INT,bigint_column BIGINT,boolean_column BOOLEAN,float_column FLOAT,double_column DOUBLE,string_column STRING,timestamp_column TIMESTAMP,binary_column BINARY
);-- 插入示例数据
INSERT INTO data_types_example VALUES
(1, 10, 100, 1000, TRUE, 3.14, 6.28, 'example', '2024-04-23 12:00:00', CAST('binary data' AS BINARY));-- 查询示例数据
SELECT * FROM data_types_example;
  • 对于Hive的string类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。
  • 不同的数据类型具有不同的数据范围和存储大小。确保选择的数据类型可以容纳数据的范围,并且不会浪费过多的存储空间。

2.集合数据类型

Hive有三种复杂数据类型array、map和struct。array和map与Java中的array和map类似,而struct由一组称为成员的不同数据组成,其中每个成员可以具有不同的类型。

在这里插入图片描述

  1. ARRAY

    • ARRAY是一种有序的集合,其中的元素可以重复
    • 它用于存储具有相同数据类型的多个值,例如一组数字、字符串等。
    • ARRAY类型的语法为ARRAY<data_type>,其中data_type表示数组中元素的数据类型。
  2. MAP

    • MAP是一种键值对的集合,其中的键和值可以是任意数据类型
    • 它用于存储类似于字典或关联数组的数据结构。
    • MAP类型的语法为MAP<key_data_type, value_data_type>,其中key_data_type表示键的数据类型,value_data_type表示值的数据类型。
  3. STRUCT

    • STRUCT是一种类似于结构体或元组的数据类型,它可以包含多个字段,每个字段都有自己的数据类型
    • 它用于表示具有多个属性的复合数据类型。
    • STRUCT类型的语法为STRUCT<field1:data_type1, field2:data_type2, ...>,其中field1field2等表示字段名,data_type1data_type2等表示字段的数据类型。

  1. ARRAY 示例
    一个表存储了每位学生的课程成绩,其中每个学生可能修读了多门课程,我们可以使用ARRAY来表示每位学生的成绩列表。
CREATE TABLE student_grades (student_id INT,grades ARRAY<INT>
);INSERT INTO student_grades VALUES
(1, ARRAY(85, 90, 75)),
(2, ARRAY(78, 82, 95)),
(3, ARRAY(88, 92, 80));
  1. MAP 示例
    一个表存储了每**位员工的基本信息,其中包括姓名、部门和工资等信息,**我们可以使用MAP来表示员工的基本信息。
CREATE TABLE employee_info (employee_id INT,info MAP<STRING, STRING>
);INSERT INTO employee_info VALUES
(1, MAP('name', 'Alice', 'department', 'HR', 'salary', '5000')),
(2, MAP('name', 'Bob', 'department', 'Finance', 'salary', '6000')),
(3, MAP('name', 'Charlie', 'department', 'IT', 'salary', '7000'));
  1. STRUCT 示例
    一个表存储了商品的详细信息,包括商品ID、名称和价格,我们可以使用STRUCT来表示商品的详细信息。
CREATE TABLE product_details (product_id INT,details STRUCT<name: STRING,price: DOUBLE>
);INSERT INTO product_details VALUES
(1, STRUCT('Laptop', 1200.50)),
(2, STRUCT('Smartphone', 800.25)),
(3, STRUCT('Tablet', 500.75));

3.数据类型转换

1.隐式转换

在Hive中,有时候可以进行隐式类型转换,这是指在查询中不需要显式地使用CAST函数,Hive会根据上下文自动进行类型转换。

  • (1)任何整数类型都可以隐式地转换为一个范围更广的类型,如tinyint可以转换成int,int可以转换成bigint。
  • (2)所有整数类型、float和string类型都可以隐式地转换成double。
  • (3)tinyint、smallint、int都可以转换为float。
  • (4)boolean类型不可以转换为任何其它的类型

示例:

  1. 整数类型转换
  • 在算术运算或比较操作中,如果参与运算的两个数类型不同,Hive会自动将小的整数类型转换为大的整数类型,例如将TINYINT转换为INT,INT转换为BIGINT。
SELECT 1 + 2.5; -- 将整数1隐式转换为浮点数,结果为3.5
  1. 字符串类型转换
  • 字符串拼接操作中,Hive会自动将非字符串类型转换为字符串类型
SELECT 'Age: ' || 25; -- 将整数25隐式转换为字符串,结果为'Age: 25'
  1. 布尔类型转换
  • 在逻辑运算中,Hive会自动将布尔类型转换为整数类型(0表示FALSE,1表示TRUE)
SELECT TRUE AND FALSE; -- 将布尔值转换为整数,结果为0
  1. 日期类型转换
  • 在日期运算中,Hive会根据上下文自动进行日期类型转换。
SELECT current_date() - '2024-04-23'; -- 将字符串日期转换为日期类型,然后计算日期差
  1. 浮点数类型转换
  • 在算术运算中,Hive会自动进行浮点数类型转换
SELECT 10 / 3.0; -- 将整数10隐式转换为浮点数,结果为3.33333...

2.显式转换

在Hive中,显式转换是指使用CAST函数明确指定将一个数据类型转换为另一个数据类型。

  • 语法:cast(expr as ) expr表示要转换的表达式,type表示要转换成的目标数据类型
  • 返回值:Expected “=” to follow “type”
  • 说明:返回转换后的数据类型

示例:

  1. 将字符串转换为整数
SELECT CAST('123' AS INT);
  1. 将整数转换为字符串
SELECT CAST(123 AS STRING);
  1. 将字符串表示的日期转换为日期类型
SELECT CAST('2024-04-23' AS DATE);
  1. 将日期类型转换为字符串表示
SELECT CAST(CURRENT_DATE() AS STRING);
  1. 将字符串转换为布尔类型
SELECT CAST('true' AS BOOLEAN);
  1. 将布尔类型转换为字符串
SELECT CAST(TRUE AS STRING);
  1. 将浮点数转换为整数
SELECT CAST(3.14 AS INT);
  1. 将整数转换为浮点数
SELECT CAST(100 AS FLOAT);
  1. 将时间戳转换为日期类型
SELECT CAST('2024-04-23 12:00:00' AS DATE);

http://www.ppmy.cn/server/12145.html

相关文章

最详细步骤解决:Apps targeting Android12 and higher are required to specify...

问题原因&#xff1a; 当targetSdkVersion>31时&#xff0c;需要在AndroidManifest.xml中配置android:exported的值&#xff0c;该值为boolean类型。 android:exported解释&#xff1a; activity 是否可由其他应用的组件启动&#xff1a; 如果设为 "true"&#…

人脸服务的算法内容

人脸算法可以返回在图像中找到的任何人脸的矩形坐标&#xff0c;以及与这些人脸相关的一系列属性&#xff0c;例如&#xff1a; 配饰&#xff1a;指示给定的人脸是否有配饰。 此属性会返回可能的配饰&#xff0c;包括头饰、眼镜和口罩&#xff0c;每个配饰的置信度分数介于 0 …

openGauss学习笔记-269 openGauss性能调优-TPCC性能调优测试指导-数据库服务端及客户端绑核

文章目录 openGauss学习笔记-269 openGauss性能调优-TPCC性能调优测试指导-数据库服务端及客户端绑核269.1 安装openGauss数据库269.2 停止数据库269.3 使用gs_guc工具修改数据库端口、IP等269.4 使用gs_guc工具设置如下参数269.5 执行如下命令以绑核方式启动服务端数据库269.6…

使用Pycharm运行spark实例时没有pyspark包(ModuleNotFoundError: No module named ‘py4j‘)

一、问题描述 在安装并配置pyspark&#xff0c;下载并打开Pycharm&#xff08;专业版&#xff09;后进行spark实例操作&#xff08;笔者以统计文件中的行数为例&#xff09;时&#xff0c;运行程序后提示ModuleNotFoundError: No module named py4j&#xff1a; 二、解决办法 …

Docker搭建启动gitbook

基本就是参考下面的文档即可。 Docker 安装 Gitbook 文档 启动的时候&#xff0c;会报错&#xff1a; Error: ENOENT: no such file or directory, stat ‘C:***demo_book\_book\gitbook\gitbook-plugin-fontsettings\fontsettings.js’ 解决方案&#xff1a; 用户目录下找…

【Flask】Flask中HTTP请求与接收

一、接收http请求与返回响应 在Flask中&#xff0c;可以通过app.route装饰器来定义路由函数。 app.route(/BringGoods,methods [POST, GET]) GET请求&#xff1a;使用request.args.get(key)或者request.values.get(key)来获取URL中的参数。 POST请求&#xff1a; 使用req…

单片机学习过程

继电器光耦隔离电压转换步进电机直流电机 arduino是最好用的一种&#xff0c;他提供了完整的设备库文件&#xff0c;任何外部设备只要查找相应的库&#xff0c;就可以很方便的使用 &#xff0c; 但是如果不去学习51 或stm32 或 嵌入式玩玩还可以&#xff0c;如果碰到没有实现的…

Gopher的Rust第一课:Rust的那些事儿

要说这两年后端编程语言谁最火&#xff0c;Rust[1]说自己第二&#xff0c;没人敢说第一。Rust连续8年霸榜stackoverflow最受推崇的编程语言[2]&#xff0c;甚至被推特之父Jack Dorsey称为“完美的编程语言”&#xff1a; 注&#xff1a;最火&#xff1a;仅代表人气最旺&#xf…