Hive ETL:加载 JSON、XML、文本数据示例
⚡ 智能摘要
Hive ETL 通过将文本、XML 和 JSON 文件加载到 Hive 中,并执行相应的操作,将它们转换为可查询的表。trac使用 xpath() 和 get_json_object() 获取值,为分析人员提供对半结构化 Hadoop 数据的 SQL 接口。
Hive 作为 ETL 和数据仓库工具,构建于……之上 Hadoop的 生态系统提供数据建模、数据操作、数据处理和数据查询等功能。数据扩展trac在 Hive 中进行操作意味着在 Hive 中创建表,加载结构化和半结构化数据,以及根据需求查询数据。
对于批量处理,我们将使用脚本语言编写自定义的 Map 和 Reduce 脚本。它提供了一个 SQL 喜欢环境并支持轻松查询。
使用 Hive 处理结构化数据
结构化数据是指数据采用正确的行和列格式。这更像是…… RDBMS 具有适当行和列的数据。
接下来,我们将把文本文件中存在的结构化数据加载到 Hive 中。
步骤1) 在此步骤中,我们创建表“employees_guru”,其列名包括员工的 Id、姓名、年龄、地址、薪水和部门以及数据类型。
从上面的截图中,我们可以看到以下内容:
- 创建表“employees_guru”
- 将 Employees.txt 中的数据加载到表“employees_guru”中
步骤2) 在此步骤中,我们将使用“SELECT”命令显示此表中存储的内容。您可以在下面的屏幕截图中看到表的内容。
示例代码片段
要执行的查询
1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING) > Row format delimited > Fields terminated by ','; 2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru; 3) select * from employees_guru;
使用 Hive 处理半结构化数据(XML、JSON)
Hive 在 Hadoop 生态系统中执行 ETL 功能,它充当…… ETL工具在某些类型的应用程序中执行 MapReduce 可能很困难;Hive 可以降低这种复杂性,并为数据仓库领域的 IT 应用程序提供最佳解决方案。
使用 Hive 可以更轻松地处理 XML 和 JSON 等半结构化数据。首先,我们将了解如何使用 Hive 来处理这些数据。 XML.
XML 转 Hive 表
在此,我们将把 XML 数据加载到 Hive 表中,并获取存储在 XML 标签内的值。
步骤1) 创建名为“xmlsample_guru”的表,其中包含一个名为str的字符串数据类型的列。
从上面的截图中,我们可以看到以下内容:
- 创建表“xmlsample_guru”
- 将 test.xml 中的数据加载到表“xmlsample_guru”中
步骤2) 使用 XPath的 通过 xpath() 方法,我们将能够获取存储在 XML 标签内的数据。
从上面的截图中,我们可以看到以下内容:
- 我们使用 xpath() 方法获取存储在 /emp/esal/ 和 /emp/ename/ 目录下的值。
- XML 标签内的值。在此步骤中,我们将显示存储在表“xmlsample_guru”中 XML 标签下的实际值。
请注意,xpath() 返回一个字符串数组;xpath_string()、xpath_int() 和 xpath_double() 返回一个类型化的值。
步骤3) 在此步骤中,我们将获取并显示表“xmlsample_guru”的原始 XML。
从上面的截图中,我们可以看到以下内容:
- 使用标签显示的实际 XML 数据
- 如果我们观察单个标签,它的父标签是“emp”,子标签是“ename”和“esal”。
Code 片段:
要执行的查询
1) create table xmlsample_guru(str string); 2) load data local inpath '/home/hduser/test.xml' overwrite into table xmlsample_guru; 3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;
JSON(Java脚本对象符号)
社交媒体和网站数据通常以 JSON 格式存储。每当我们尝试从在线服务器获取数据时,都会返回 JSON 文件。使用 Hive 作为数据存储,我们可以通过创建模式将 JSON 数据加载到 Hive 表中。
JSON 转 Hive 表
在此过程中,我们将把 JSON 数据加载到 Hive 表中,并获取存储在 JSON 模式中的值。
步骤1) 在此步骤中,我们将创建一个名为“json_guru”的JSON表。创建完成后,我们将加载并显示实际模式的内容。
从上面的截图中,我们可以看到以下内容:
- 创建表“json_guru”
- 将 test.json 中的数据加载到表“json_guru”中
- 显示存储在 json_guru 表中的 JSON 文件的实际架构
步骤2) 使用 get_json_object() 方法,我们可以获取存储在 JSON 层次结构中的数据值。
从上面的截图中,我们可以看到以下内容:
- 使用 `get_json_object(str,'$.ecode')` 可以从表 `json_guru` 中获取 ecode 值。类似地,使用 `get_json_object(str,'$.ename')` 和 `get_json_object(str,'$.sal')` 将从表 `json_guru` 中获取 ename 和 sal 值。
- json_guru 中 JSON 层次结构内存储的值
因为 get_json_object() 每次调用只解析一次文档,所以当需要多个键时,json_tuple() 更便宜,而 JSON SerDe 会在加载时将文档映射到类型化的列。
Code 片段
要执行的查询
1) create table json_guru(str string); 2) load data inpath 'home/hduser/test.json' into table json_guru; 3) select * from json_guru; 4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;
复杂的 JSON 转换为 Hive 表
在此,我们将把复杂的 JSON 数据加载到 Hive 表中,并获取存储在 JSON 模式中的值。
步骤1) 创建具有单个列字段的 complexjson_guru。
从上面的截图中,我们可以看到以下内容:
- 创建名为 complexjson_guru 的表,该表包含一个字段,数据类型为字符串。
- 从 emp.json 复杂 JSON 文件将数据加载到 complexjson_guru 中
步骤2) 通过使用 get_json_object,我们可以检索存储在 JSON 文件层次结构中的实际内容。
从以下截图中,我们可以看到存储在 complexjson_guru 中的数据的输出。
步骤3) 在此步骤中,通过使用“Select”命令,我们可以看到存储在表“complexjson_guru”中的复杂JSON数据。
示例代码片段
要执行的查询
1) create table complexjson_guru(json string); 2) load data inpath 'home/hduser/emp.json' into table complexjson_guru; 3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru; 4) select * from complexjson_guru;
实时项目中的 Hive – 何时何地使用
在Hadoop生态系统中何时何地使用Hive:
日期
- 在 Hadoop 生态系统中使用强大而有效的统计函数时
- 在处理结构化和半结构化数据时
- 作为一款基于Hadoop的数据仓库工具
- 使用 HBase 进行实时数据摄取,其中可以使用 Hive。
地点
- 为了方便用作 ETL 和数据仓库工具
- 使用 HiveQL 提供 SQL 类型的环境并进行类似 SQL 的查询。
- 根据特定客户需求,使用和部署自定义的 map 和 reducer 脚本











