Hive创建外部表教程介绍
在 Hive 术语中,外部表是不使用 Hive 管理的表。它们的目的是促进将数据从外部文件导入到元存储中。
外部表数据存储在外部,而 Hive Metastore 仅包含元数据模式。因此,删除外部表不会影响数据。
如何在Hive中创建外部表?在本教程中,你将学习如何在 Hive 中创建、查询和删除外部表。
先决条件
- Ubuntu 18.04 LTS 或更高版本
- 使用 sudo 权限访问命令行
- Apache Hadoop已安装并正在运行
- Apache Hive安装并运行
注意:本教程使用 Ubuntu 20.04。但是,Hive 在所有操作系统上的工作方式都相同。这意味着创建、查询和删除外部表的过程可以应用于 Windows、Mac OS、其他 Linux 发行版等上的 Hive。
在 Hive 中创建外部表 - 语法解释
在Hive中创建外部表时,需要提供以下信息:
- 表名– 该
create external table
命令创建表。如果系统中已经存在同名表,则会导致错误。为避免这种情况,请添加if not exists
到语句中。表名不区分大小写。 - 列名和类型 ——就像表名一样,列名不区分大小写。列类型是诸如
int
、char
、等值string
。 - 行格式– 行使用本机或自定义 SerDe(串行器/解串器)格式。如果未定义行格式,或者将其指定为分隔符,则将使用本机 SerDe。
- 字段终止字符- 这是一个
char
类型字符,用于分隔一行中的表值。 - 存储格式——你可以指定存储格式,例如文本文件、序列文件、jsonfile 等。
- 位置- 这是包含表数据的文件的 HDFS 目录位置。
Hive如何创建外部表?向 Hive 提供此信息的正确语法是:
create external table if not exists [external-table-name] (
[column1-name] [column1-type], [column2-name] [column2-type], …)
comment '[comment]'
row format [format-type]
fields terminated by '[termination-character]'
stored as [storage-type]
location '[location]';
创建 Hive 外部表 - 示例
如何在Hive中创建外部表?出于实际示例的目的,本教程将向你展示如何将数据从 CSV 文件导入到外部表中。
步骤 1:准备数据文件
1. 创建一个名为“countries.csv”的 CSV 文件:
sudo nano countries.csv
2. 对于列表中的每个国家,写一个行号、国家名称、首都和人口(以百万计):
1,USA,Washington,328
2,France,Paris,67
3,Spain,Madrid,47
4,Russia,Moscow,145
5,Indonesia,Jakarta,267
6,Nigeria,Abuja,196
3. 保存文件并记下其位置。
步骤 2:将文件导入 HDFS
1. Hive如何创建外部表?创建一个 HDFS 目录。你将使用此目录作为你创建的文件的 HDFS 位置。
hdfs dfs -mkdir [hdfs-directory-name]
2. 将 CSV 文件导入 HDFS:
hdfs dfs -put [original-file-location] [hdfs-directory-name]
3.使用-ls
命令验证文件是否在HDFS文件夹中:
hdfs dfs -ls [hdfs-directory-name]
输出显示当前目录中的所有文件。
注意:要了解有关 HDFS 的更多信息,请参阅什么是 HDFS?Hadoop 分布式文件系统指南。
步骤 3:创建外部表 - Hive创建外部表教程
1. 将数据文件导入到 HDFS 后,启动 Hive 并使用上述语法创建外部表。
2. 要验证外部表创建是否成功,请键入:
select * from [external-table-name];
输出应列出你导入表中的 CSV 文件中的数据:
3. Hive如何创建外部表?如果你希望使用外部表中的数据创建托管表,请键入:
create table if not exists [managed-table-name](
[column1-name] [column1-type], [column2-name] [var2-name], …)
comment '[comment]';
4.接下来,从外部表中导入数据:
insert overwrite table [managed-table-name] select * from [external-table-name];
5. 验证数据是否成功插入到托管表中。
select * from [managed-table-name];
如何查询 Hive 外部表
如何在Hive中创建外部表?要显示存储在表中的所有数据,你将使用select * from
后跟表名的命令。Hive 提供了广泛的查询命令列表,可让你缩小搜索范围并根据你的喜好对数据进行排序。
例如,你可以使用where
after 命令select * from
指定条件:
select * from [table_name] where [condition];
Hive 将只输出满足查询中给定条件的行:
代替代表“所有数据”的星号字符,你可以使用更具体的确定符。用列名(例如CountryName,来自上面的示例)替换星号将仅显示所选列中的数据。
以下是一些其他有用的查询函数及其语法:
功能 | 语法 |
---|---|
根据多个条件查询一张表 | select * from [table_name] where [condition1] and [condition2]; |
订单表数据 | select [column1_name], [column2_name] from [table_name] order by [column_name]; |
按降序排列表格数据 | select [column1_name], [column2_name] from [table_name] order by [column_name] desc; |
显示行数 | select count(*) from [table_name]; |
如何删除 Hive 外部表
1. 在 Hive 中删除外部表是使用用于托管表的相同 drop 命令执行的:
drop table [table_name];
输出将确认操作成功:
2. 查询dropped table会报错:
但是,外部表中的数据保留在系统中,可以通过在同一位置创建另一个外部表来检索。
Hive创建外部表教程结论
如何在Hive中创建外部表?阅读本教程后,你应该对 Hive 中外部表的用途以及它们的创建、查询和删除的语法有一个大致的了解。