大数据之Hive学习——1三分钟快速入门 爱被打了一巴掌 2022-10-09 04:58 127阅读 0赞 # 第一章 Hive数据类型 # ## 1 Hive数据类型 ## 本篇文章介绍Hive不同的数据类型, 用于创建表. Hive所有的数据类型分为四种类型, 给出如下. * 列类型 * 文字 * Null 值 * 复杂类型 ### 1.1 列类型 ### 列类型被用作Hive的列数据类型. 它们如下: #### 整型 #### 整形数据可以指定使用整型数据类型, `INT`. 当数据范围超过`INT`的范围时, `需要使用BIGINT`, 如果数据范围比`INT`小, `使用SMALLINT`. `TINYINT`比`SMALLINT` 小. 下表描述了各类INT数据类型. <table> <thead> <tr> <th>类型</th> <th>后缀</th> <th>示例</th> </tr> </thead> <tbody> <tr> <td><code>TINYINT</code></td> <td>Y</td> <td>10Y</td> </tr> <tr> <td><code>SMALLINT</code></td> <td>S</td> <td>10S</td> </tr> <tr> <td><code>INT</code></td> <td>-</td> <td>10</td> </tr> <tr> <td><code>BIGINT</code></td> <td>B</td> <td>10L</td> </tr> </tbody> </table> #### 字符串类型 #### 字符串类型的数据类型可以使用单引号或双引号来指定. 它包含两个数据类型, `VARCHAR`和`CHAR`. Hive遵循C-类型的转义字符. 下表描述了各类`CHAR`数据类型: <table> <thead> <tr> <th>数据类型</th> <th>长度</th> </tr> </thead> <tbody> <tr> <td>VARCHAR</td> <td>1-65355</td> </tr> <tr> <td>CHAR</td> <td>255</td> </tr> </tbody> </table> #### 时间戳 #### 它支持传统的UNIX时间戳可选纳秒的精度. 它支持java.sql.Timestamp格式`YYYY-MM-DD HH:MM:SS.fffffffff` 和格式`YYYY-MM-DD HH:MM:ss.fffffffff` #### 日期 #### DATE值在年/月/日的格式形式描述. #### 小数点 #### 在Hive小数类型与Java大十进制格式相同. 它可以同于表示不可改变的任意精度. 语法和示例如下: DECIMAL(precision, scale) decimal(10, 0) #### 联合类型 #### 联合类型和异类的数据类型的集合. 它可以使用联合创建的一个实例. 语法和示例如下: UNIONTYPE<int, double, array<string>, struct<a:int, b:string>> {0:1} {1:2.0} {2:["three", "four"]} {3:{"a":5, "b":"five"}} {2:["six", "seven"]} {3:{"a":8, "b": "eight"}} {0: 9} {1: 10.0} ### 1.2 文字 ### 下面是Hive中使用的文字数据类型 #### 浮点类型 #### 浮点类型是只不过有小数点的数字. 通常, 这种类型的数据组成`DOUBLE`数据类型. #### 十进制类型 #### 十进制数据类型是只不过浮点值范围比`DOUBLE`数据类型更大. 十进制类型的范围大约是 − 1 0 − 308 -10^\{-308\} −10−308到 1 0 308 10^\{308\} 10308 #### NULL 值 #### 缺少值通过特殊值- NULL表示 ### 1.3 复杂类型 ### Hive复杂数据类型如下: #### 数组 #### 在Hive数组与在Java中使用的方法相同. Syntax: ARRAY<data_type> #### 映射 #### 映射在Hive类似于Java的映射. Syntax : MAP<primitive_type, data_type> #### 结构体 #### 在Hive中结构体类似于使用复杂的数据. Syntax: STRUCT<col_name: data_type [COMMENT col_comment], ...> # 第二章 Hive数据库 # ## 1 Hive创建数据库 ## Hive是一种数据库技术, 可以定义数据库和表来分析结构化数据. 主题结构化数据分析是以表方式存储数据, 并通过查询来分析. 本篇文章介绍如何创建Hive数据库. 配置单元包含一个名为 `default` 默认的数据库. `CREATE DATABASE` 语句 创建数据库是用来创建数据库在Hive中的语句. 在Hive数据库是一个命名空间或表的集合. 此语法声明如下. CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name> 在这里, `IF NOT EXISTS`是一个可选字句, 通知用户已经存在相同名称的数据库. 可以使用`SCHEMA`在`DATABASE`的这个命令. 下面的查询执行创建一个名为`userdb`数据库. hive> CREATE DATABASE [IF NOT EXISTS] userdb; 或 hive> CREATE SCHEMA userdb; 下面的查询用于验证数据库列表: hive>SHOW DATABASE; default userdb ## 2 Hive删除数据库 ## ## DROP DATABASE语句 ## `DROP DATABASE` 是删除所有的表并删除数据库的语句. 它的语法如下: DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IFEXISTS] database_name 下面的查询用于删除数据库. 假设要删除的数据库名称为userdb. hive> DROP DATABASE IF EXISTS userdb; 以下是使用`CASCADE`查询删除数据库. 这意味着要全部删除相应的表在删除数据库之前. hive> DROP DATABASE IF EXISTS userdb CASCADE; 以下使用SCHEMA查询删除数据库. hive> DROP SCHEMA userdb; # Hive 表 # ## 1 Hive创建表 ## ### 1.1 `CREATE TABLE` 语句 ### Create Table适用于在Hive中创建表的语句, 语法如下: CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [ROW FORMAT row_format] [STORED AS file_format] * 示例 假设需要使用`CREATE TABLE` 语句创建一个名为`employee`表, 下表列出了`employee`表中的字段和数据类型: <table> <thead> <tr> <th>Sr.No</th> <th>字段名称</th> <th>数据类型</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Eid</td> <td>int</td> </tr> <tr> <td>2</td> <td>Name</td> <td>String</td> </tr> <tr> <td>3</td> <td>Salary</td> <td>Float</td> </tr> <tr> <td>4</td> <td>Dedignation</td> <td>string</td> </tr> </tbody> </table> 下面的数据是一个注释, 行格式字段, 如字段终止符, 行终止符, 并保存的文件类型. COMMENT 'Employee details' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED IN TEXT FILE; hive> CREATE TABLE IF NOT EXISTS employee ( eid int, name String, > salary String, destination String) > COMMENT ‘Employee details’ > ROW FORMAT DELIMITED > FIELDS TERMINATED BY ‘\t’ > LINES TERMINATED BY ‘\n’ > STORED AS TEXTFILE; ### 1.2 `LOAD DATA`语句 ### 一般来说, 在SQL创建表后, 我们就可以使用INSERT语句插入数据. 但是在Hive中, 可以使用LOAD DATA语句插入数据. 同时将数据插入到Hive中, 最好是使用LOAD DATA来存储大量记录. 有两种的方法来家在数据, 一种是从本地文件系统, 一种是从Hadoop文件系统. * **语法** 加载数据的语法如下: LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] * LOCAL 是标识符指定本地路径, 可选 * OVERWRITE 是可选的, 覆盖表中的数据 * PARTITION 这是可选的 * **示例** 我们将插入下列数据到表中. 1201 Gopal 45000 Technical manager 1202 Manisha 45000 Proof reader 1203 Masthanvali 40000 Technical writer 1204 Kiran 40000 Hr Admin 1205 Kranthi 30000 Op Admin 假设存储的路径名为`/home/user/sample.txt` hive> LOAD DATA LOCAL INPATH '/home/user/sample.txt' OVERWRITE INTO TABLE employee; ## 2 Hive修改表 ## ### 2.1 `ALTER TABLE` 语句 ### 他是在Hive中用来修改表的语句. * 语法: 声明接受任意属性, 我们希望在一个表中修改以下语法. alter table name rename to new_name; alter table name add columns (col_spec[, col_spec ...]); alter table name drop [column] column_name; alter table name change column_name new_name new_type; alter table name replace columns (col_spec[, col_spec ...]); ### 2.2 `rename to` 语句 ### 重命名表, 比如将`employee` 重命名为 `emp` hive> alter table employee rename to emp; ### 2.3 `change` 语句 ### change 语句一次查询只更改一个字段. 下表包含employee表的字段, 它显示的字段要被更改(粗体). <table> <thead> <tr> <th>字段名</th> <th>原数据类型</th> <th>新字段名</th> <th>转化为数据类型</th> </tr> </thead> <tbody> <tr> <td>eid</td> <td>int</td> <td>eid</td> <td>int</td> </tr> <tr> <td><strong>name</strong></td> <td>String</td> <td><strong>ename</strong></td> <td>String</td> </tr> <tr> <td>salary</td> <td><strong>Float</strong></td> <td>salary</td> <td>**<em>Double</em></td> </tr> <tr> <td>designation</td> <td>String</td> <td>designation</td> <td>String</td> </tr> </tbody> </table> 下面查询重命名使用上述数据的列名和列数据类型. hive> alter table employee change name ename String; hive> alter table employee change salary salary Double; ### 2.4 添加列语句 ### 下面的查询增加了一个列名`dept`在`employee`表 hive> alter table employee add columns (dept String commnet 'department name') ### 2.5 `replace` 语句 ### replace 语句一次查询可以更改多个字段. 一条语句达到前文中`change`语句的效果. hive> alter table employee replace columns ( eid int empid int, ename string name string ) ## 3 Hive删除表 ## ### `DROP TABLE` 语句 ### 语法如下: DROP TABLE [IF EXISTS] table_name; 以下删除一个名为`employee`的表: hive> DROP TABLE IF EXISTS employee;
还没有评论,来说两句吧...