如何在Hive中创建外部表(如何使用外部表?)

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到语句中。表名不区分大小写。
  • 列名和类型  ——就像表名一样,列名不区分大小写。列类型是诸如intchar、等值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

如何在Hive中创建外部表(如何使用外部表?)

文章图片
Hive创建外部表教程
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]

如何在Hive中创建外部表(如何使用外部表?)

文章图片
3.使用-ls命令验证文件是否在HDFS文件夹中:
hdfs dfs -ls [ hdfs-directory-name]

如何在Hive中创建外部表(如何使用外部表?)

文章图片
输出显示当前目录中的所有文件。
注意:要了解有关 HDFS 的更多信息,请参阅什么是 HDFS?Hadoop 分布式文件系统指南。
步骤 3:创建外部表 - Hive创建外部表教程
1. 将数据文件导入到 HDFS 后,启动 Hive 并使用上述语法创建外部表。
如何在Hive中创建外部表(如何使用外部表?)

文章图片
2. 要验证外部表创建是否成功,请键入:
select * from [ external-table-name];

输出应列出你导入表中的 CSV 文件中的数据:
如何在Hive中创建外部表(如何使用外部表?)

文章图片
3. Hive如何创建外部表?如果你希望使用外部表中的数据创建托管表,请键入:
create table if not exists [ managed-table-name]( [ column1-name] [ column1-type], [ column2-name] [ var2-name], …) comment '[ comment]';

如何在Hive中创建外部表(如何使用外部表?)

文章图片
4.接下来,从外部表中导入数据:
insert overwrite table [ managed-table-name] select * from [ external-table-name];

如何在Hive中创建外部表(如何使用外部表?)

文章图片
5. 验证数据是否成功插入到托管表中。
select * from [ managed-table-name];

如何在Hive中创建外部表(如何使用外部表?)

文章图片
如何查询 Hive 外部表如何在Hive中创建外部表?要显示存储在表中的所有数据,你将使用select * from后跟表名的命令。Hive 提供了广泛的查询命令列表,可让你缩小搜索范围并根据你的喜好对数据进行排序。
例如,你可以使用whereafter 命令select * from指定条件:
select * from [ table_name] where [ condition];

Hive 将只输出满足查询中给定条件的行:
如何在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];

输出将确认操作成功:
如何在Hive中创建外部表(如何使用外部表?)

文章图片
2. 查询dropped table会报错:
如何在Hive中创建外部表(如何使用外部表?)

文章图片
但是,外部表中的数据保留在系统中,可以通过在同一位置创建另一个外部表来检索。
Hive创建外部表教程结论【如何在Hive中创建外部表(如何使用外部表?)】如何在Hive中创建外部表?阅读本教程后,你应该对 Hive 中外部表的用途以及它们的创建、查询和删除的语法有一个大致的了解。

    推荐阅读