大数据学习
bigdata learning
Toggle navigation
大数据学习
主页
openGauss数据库
Flume
MongoDB
Hadoop
数据库实验
Kafka
Zookeeper
Hbase
Manual
Spark
Neo4j
InfluxDB
RabbitMQ
Flink
About Me
归档
标签
05-Hive表创建-修改-删除
无
2022-11-07 15:02:34
14
0
0
bigdata
# Hive创建表 创造表的约定在 Hive 中非常类似于使用 SQL 创建表。 ## 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><tbody><tr><th>Sr.No</th><th>字段名称</th><th>数据类型</th></tr><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>Designation</td><td>string</td></tr></tbody></table> 下面的数据是一个注释,行格式字段,如字段终止符,行终止符,并保存的文件类型。 ``` COMMENT 'Employee details' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; ``` 下面的查询创建使用上述数据的表名为 employee。 ``` 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; ``` 如果添加选项 IF NOT EXISTS,Hive 忽略大小写,万一表已经存在的声明。 成功创建表后,能看到以下回应: ``` OK Time taken: 5.905 seconds hive> ```  ### JDBC 程序 以下是使用 JDBC 程序来创建表给出的一个例子。 ``` import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveCreateTable { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("CREATE TABLE IF NOT EXISTS " +" employee ( eid int, name String, " +" salary String, destignation String)" +" COMMENT ‘Employee details’" +" ROW FORMAT DELIMITED" +" FIELDS TERMINATED BY ‘\t’" +" LINES TERMINATED BY ‘\n’" +" STORED AS TEXTFILE;"); System.out.println(“ Table employee created.”); con.close(); } } ``` 将该程序保存在一个名为 HiveCreateDb.java 文件。下面的命令用于编译和执行这个程序。 ``` $ javac HiveCreateDb.java $ java HiveCreateDb ``` > 要开启`hiveserver2` >```bash >nohup /usr/local/hive/bin/hive --service hiveserver2 & >``` ### 输出 ``` Table employee created. ```  ## 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 这是可选的 ### 示例 我们将插入下列数据到表中。在/home/nbu/bigdata/hive 目录中名为 sample.txt 的文件。 ``` 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 ```  下面的查询加载给定文本插入表中。 ``` hive> LOAD DATA LOCAL INPATH '/home/nbu/bigdata/hive/sample.txt' > OVERWRITE INTO TABLE employee; ``` 下载成功完成,能看到以下回应: ``` OK Time taken: 15.905 seconds hive> ```  此时可以在HDFS中查看到 /user/hive/warehouse/employee/ 路径下多了一个sample.txt文件  # Hive修改表 ## 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 ...]) ``` ## Rename To… 语句 下面是查询重命名表,把 employee 修改为 emp。 ``` hive> ALTER TABLE employee RENAME TO emp; ``` ## Change 语句 下表包含 employee 表的字段,它显示的字段要被更改(粗体)。 <table><tbody><tr><th>字段名</th><th>从数据类型转换</th><th>更改字段名称</th><th>转换为数据类型</th></tr><tr><td>eid</td><td>int</td><td>eid</td><td>int</td></tr><tr><td><b>name</b></td><td>String</td><td><b>ename</b></td><td>String</td></tr><tr><td>salary</td><td><b>Float</b></td><td>salary</td><td><b>Double</b></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; ``` ## 添加列语句 下面的查询增加了一个列名 dept 在 employee 表。 ``` hive> ALTER TABLE employee ADD COLUMNS ( > dept STRING COMMENT 'Department name'); ``` ## REPLACE 语句 以下从 employee 表中查询删除的所有列,并使用 emp 替换列: ``` hive> ALTER TABLE employee REPLACE COLUMNS ( > eid INT empid Int, > ename STRING name String); ``` # Hive删除表 从 Hive Metastore 删除表,它删除了表 / 列的数据及其元数据。它可以是一个正常的表 (存储在 Metastore) 或外部表(存储在本地文件系统); 不论什么类型 Hive 对待的方式相同。 ## Drop Table 语句 语法如下: ``` DROP TABLE [IF EXISTS] table_name; ``` 以下查询删除一个名为 employee 的表: ``` hive> DROP TABLE IF EXISTS employee; ``` 对于成功执行查询,能看到以下回应: ``` OK Time taken: 5.3 seconds hive> ```
上一篇:
05-Hadoop-MapReduce编程-javac
下一篇:
05-InfluxDB采样和数据保留
文档导航