介绍
在一个遥远的星系中,残暴的银河帝国(Galactic Empire)征服了无数星球,剥削它们的资源并压迫当地居民。反抗军领袖莱娅公主(Princess Leia)一直在协调反抗帝国的起义,但她的部队在人数和装备上都处于绝对劣势。为了扭转战局,莱娅必须分析大量的情报数据,以识别帝国的弱点并计划战略打击。
本实验的目标是帮助莱娅公主和反抗军联盟利用 Hadoop Hive 的强大功能来管理和操作大规模数据集,特别是通过学习如何修改现有的 Hive 表。通过掌握这项技能,莱娅可以高效地重组她的情报数据库,从而揭示关键洞察,并在对抗帝国时获得战略优势。
创建示例表
在这一步中,我们将创建一个示例 Hive 表用于操作。该表将存储银河系中各个星球的信息,包括它们的名称、人口和资源。
首先,在终端中运行以下命令切换到 hadoop 用户:
su - hadoop
接下来,通过运行以下命令启动 Hive CLI:
hive
在 Hive CLI 中,创建一个名为 rebel_intel 的新数据库:
CREATE DATABASE rebel_intel;
使用 rebel_intel 数据库:
USE rebel_intel;
创建一个名为 planets 的新表,其模式如下:
CREATE TABLE planets (
planet_id INT,
planet_name STRING,
population BIGINT,
resources ARRAY<STRING>
)
CLUSTERED BY (planet_id) INTO 2 BUCKETS
STORED AS ORC
TBLPROPERTIES ('transactional'='true');
该表包含四列:planet_id(星球的 ID,整数类型)、planet_name(星球的名称,字符串类型)、population(星球的人口,大整数类型)和 resources(星球的资源,字符串数组类型)。
通过输入 exit; 退出 Hive CLI。
向表中添加数据
在这一步中,我们将向 planets 表中填充一些示例数据。这些数据代表了反抗军联盟收集到的关于银河系中各个星球的情报。
再次启动 Hive CLI:
hive
使用 rebel_intel 数据库:
USE rebel_intel;
向 planets 表中插入一些示例数据:
INSERT INTO planets VALUES
(1, 'Alderaan', 2000000000, array('Agriculture', 'Energy')),
(2, 'Tatooine', 200000, array('Mining')),
(3, 'Hoth', 0, array('None')),
(4, 'Endor', 30000, array('Forestry', 'Hunting')),
(5, 'Bespin', 6000000, array('Gas Mining', 'Tourism'));
这将向 planets 表中插入五行数据,分别代表不同的星球及其对应的星球 ID、名称、人口和资源。
通过输入 exit; 退出 Hive CLI。
修改表结构
现在我们已经有了一个包含数据的表,假设莱娅公主需要添加一个新列来存储每个星球的气候信息。在这一步中,我们将学习如何修改现有 Hive 表的结构。
启动 Hive CLI:
hive
使用 rebel_intel 数据库:
USE rebel_intel;
修改 planets 表,添加一个名为 climate 的新列:
ALTER TABLE planets ADD COLUMNS (climate STRING);
该命令向 planets 表添加了一个名为 climate、类型为 STRING 的新列。
验证更新后的表结构:
DESCRIBE planets;
你应该能在表结构中看到新的 climate 列。
通过输入 exit; 退出 Hive CLI。
更新表数据
在向 planets 表添加了新的 climate 列后,我们现在可以更新现有数据,为每个星球添加气候信息。
启动 Hive CLI:
hive
使用 rebel_intel 数据库:
USE rebel_intel;
更新每个星球的 climate 列:
UPDATE planets SET climate = 'Temperate' WHERE planet_name = 'Alderaan';
UPDATE planets SET climate = 'Arid' WHERE planet_name = 'Tatooine';
UPDATE planets SET climate = 'Frozen' WHERE planet_name = 'Hoth';
UPDATE planets SET climate = 'Tropical' WHERE planet_name = 'Endor';
UPDATE planets SET climate = 'Artificial' WHERE planet_name = 'Bespin';
这些 UPDATE 语句根据每个星球的名称设置了对应的 climate 值。
验证更新后的数据:
SELECT * FROM planets;
你应该能看到每个星球的 climate 值已更新。
通过输入 exit; 退出 Hive CLI。
总结
在本实验中,我们探索了 Hadoop Hive 中修改表的概念,这是管理和重构大型数据集的关键技能。通过创建一个示例 planets 表、添加数据,然后修改表结构以包含新的 climate 列,我们学习了如何调整数据模型以满足不断变化的需求。
本实验的设计灵感来源于标志性的《星球大战》宇宙,其中反抗军领袖莱娅公主需要分析情报数据,以识别银河帝国防御中的弱点。通过掌握 Hive 修改表的能力,莱娅可以高效地重塑她的情报数据库,揭示有价值的见解,并在反抗压迫帝国的斗争中取得战略优势。
通过这次实践,我深入了解了如何创建、修改和更新 Hive 表,这是在 Hadoop 环境中处理大型数据集的基本技能。检查器的使用也确保了我能够在每一步验证自己的进展,巩固了我的学习成果,并确保我成功完成了实验目标。



