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

2021年11月21日04:10:01 发表评论 2,746 次浏览

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 中外部表的用途以及它们的创建、查询和删除的语法有一个大致的了解。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: