Hive ETL:加载 JSON、XML、文本数据示例
Hive 作为 ETL 和数据仓库工具 Hadoop的 生态系统提供数据建模、数据操作、数据处理和数据查询等功能。Hive 中的数据提取意味着在 Hive 中创建表并加载结构化和半结构化数据以及根据要求查询数据。
对于批处理,我们将使用自定义映射编写自定义脚本,并使用脚本语言编写 Reduce 脚本。它提供 SQL 喜欢环境并支持轻松查询。
使用 Hive 处理结构化数据
结构化数据意味着数据采用正确的行和列格式。这更像是 RDBMS 具有适当行和列的数据。
在这里,我们将加载 Hive 中文本文件中的结构化数据
步骤1) 在此步骤中,我们创建表“employees_guru”,其列名包括员工的 Id、姓名、年龄、地址、薪水和部门以及数据类型。
从上面的截图中,我们可以观察到以下内容,
- 创建表“employees_guru”
- 将 Employees.txt 中的数据加载到表“employees_guru”中
步骤2) 在此步骤中,我们使用“选择”命令显示存储在此表中的内容。我们可以在下面的屏幕截图中观察表格内容。
– 示例代码片段
要执行的查询
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工具。在某些类型的应用程序中执行 map Reduce 可能会很困难,Hive 可以降低复杂性并为数据仓库领域的 IT 应用程序提供最佳解决方案。
使用 Hive 可以更轻松地处理 XML 和 JSON 等半结构化数据。首先,我们将了解如何使用 Hive 进行 XML.
XML 到 HIVE 表
在此,我们将把 XML 数据加载到 Hive 表中,并获取存储在 XML 标签内的值。
步骤1) 创建表“xmlsample_guru”,其中 str 列具有字符串数据类型。
从上面的截图中,我们可以观察到以下内容
- 创建表“xmlsample_guru”
- 将数据从 test.xml 加载到表“xmlsample_guru”中
步骤2) 运用 XPath的 () 方法我们将能够获取存储在 XML 标签内的数据。
从上面的截图中,我们可以观察到以下内容
- 使用 XPATH() 方法,我们获取存储在 /emp/esal/ 和 /emp/ename/ 下的值
- XML 标签内的值。在此步骤中,我们将显示表“xmlsample_guru”中 XML 标签下存储的实际值
步骤3) 在此步骤中,我们将获取并显示表“xmlsample_guru”的原始 XML。
从上面的截图中,我们可以观察到以下内容
- 使用标签显示的实际 XML 数据
- 如果我们观察单个标签,它以“emp”作为父标签,以“ename”和“esal”作为子标签。
代码片段:
要执行的查询
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脚本对象符号)
Twitter 和网站数据以 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,'$.Sali) 它将获取表 json_guru 中的 ename sal 值
- json_guru 中 JSON 层次结构内存储的值
代码段
要执行的查询
1) create table json_guru(str string); 2) load data inpath 'home/hduser/test.json' into table json_guru; 3) select * from json1; 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) 在此步骤中,通过使用“选择”命令,我们实际上能够看到存储在表“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 和数据仓库工具
- 提供 SQL 类型环境并使用 HIVEQL 进行类似 SQL 的查询
- 根据特定客户端需求使用和部署自定义的 map 和 Reducer 脚本