HIVE实战:创建数据库与表,内部表、外部表、分区表解析

需积分: 0 8 下载量 78 浏览量 更新于2024-08-04 1 收藏 366KB DOCX 举报
“HIVE创建库创建表.docx”是一份关于使用Hive进行数据库和表创建的实验报告,涵盖了HQL语言的基础应用,包括创建数据库、内部表、外部表、分区表以及桶表等概念。实验者通过不同的location属性设置来管理数据存储,并通过美国疫情数据来实践分区和数据加载。此外,还涉及到了MySQL数据库的中文支持问题。 在Hive中,创建数据库是一项基础操作,可以使用`CREATE DATABASE`语句。当不指定`LOCATION`时,数据库会默认存储在HDFS的/user/hive/warehouse目录下。如果指定了`LOCATION`,则数据会存储在指定路径。例如,创建名为`location_hyy_db`的数据库,指定location为`spe_db_db`,并添加创建人属性,可以写成: ```sql CREATE DATABASE IF NOT EXISTS location_hyy_db COMMENT "指定location" LOCATION "spe_db_db" WITH DBPROPERTIES ('createby'='linda'); ``` 而创建不指定`LOCATION`的数据库,如`noLocation_hyy_db`,可以写成: ```sql CREATE DATABASE IF NOT EXISTS noLocation_hyy_db COMMENT "没有指定location" WITH DBPROPERTIES ('createby'='lucy'); ``` 内部表(或托管表)是Hive管理的数据表,它们的数据存储与表定义紧密关联。当删除内部表时,Hive会同时删除表及其关联的数据。创建内部表的示例如下: ```sql CREATE TABLE IF NOT EXISTS noLocation_hyy_db.hero_archer ( id INT COMMENT "ID", name STRING COMMENT "英雄名称", hp_max INT COMMENT "最大生命", mp_max INT COMMENT "最大法力", attack_max INT COMMENT "最大物攻", defense_max INT COMMENT "最大物防", attack_range STRING COMMENT "攻击范围", role_main STRING COMMENT "主要定位", role_assist STRING COMMENT "次要定位" ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; ``` 外部表则不同,它们只是对HDFS上数据的引用,删除外部表不会影响数据本身。创建外部表的语句如下: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS noLocation_hyy_db.hero_archer_ext ( id INT COMMENT "ID", name STRING COMMENT "英雄名称", ... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; ``` 分区表是一种有效的数据组织方式,可以提高查询效率。例如,使用美国疫情数据创建分区表,可以根据日期、州等字段进行分区。创建分区表的语法结构为: ```sql CREATE TABLE IF NOT EXISTS noLocation_hyy_db.covid_data ( ... ) PARTITIONED BY (date STRING, state STRING); ``` 接着,可以通过`LOAD DATA`命令将数据静态或动态加载到分区中。静态加载是指明具体分区,而动态加载则根据数据本身的字段自动填充分区。 桶表(Bucketed Tables)是Hive提供的一种优化手段,它将数据按照哈希函数划分到不同的桶中,便于并行处理。创建桶表的语法如下: ```sql CREATE TABLE IF NOT EXISTS noLocation_hyy_db.bucket_hero_archer ( ... ) CLUSTERED BY (id) INTO 4 BUCKETS; ``` 最后,提到的“修改mysql数据库支持中文”,这通常涉及到修改数据库字符集设置,确保能正确存储和显示中文字符,例如在MySQL中,可以在创建数据库或连接时指定`CHARACTER SET utf8`。 通过这份实验报告,学习者可以全面了解Hive的基本操作,包括数据库和表的创建,以及如何利用Hive管理大数据的存储和查询。