如何使用 sqoop 将 JSON 字段数据从 mySql 服务器导入 Hive table

How can I import JSON field data from mySql server into Hive table using sqoop

我在 MySQL 服务器中有一个 table 名称 EmpData,有两个字段 EmpID (INT)Details (nvarchar)Details 字段包含 JSON 字符串,如

{ "name": "Michel","address":{"house no":"12","street":"Johnson road","city":"New Delhi","country":"INDIA"}}

{ "name": "John","address":{"house no":"99","street":"Johnson road","city":"London","country":"UK"}}

我想将 Details 字段 JSON 数据导入配置单元 table EmpHiveStore 并在配置单元 table 上查询

SELECT name,address.street from EmpHiveStore;

有什么方法可以使用 sqoop 将 JSON 字段数据导入到 Hive table 中吗?

谢谢。

Sqoop 在这里的工作是将数据从 RDBMS(MySQL 在你的情况下)导入到 Hive。

您需要为此使用 sqoop 导入命令

sqoop import \
--connect jdbc:mysql://mysql.example.com/testdb \
--username root \
--password root \
--table EmpData \
--columns Details \
--hive-import \
--hive-table EmpHiveStore

如果不存在,这将创建配置单元 table。 Sqoop 的工作到这里就完成了。 Hive 会将此数据存储在 String 中。 Hive 中没有特殊的JSON 类型。因此,您将无法执行

这样的查询
SELECT name,address.street from EmpHiveStore;

直接通过配置单元。

您可以使用

获取数据的位置
show create table EmpHiveStore;

您的 table 中只有 1 列,它有 JSON 数据。所以它基本上是 HDFS 中的一个 JSON 文件。

您想查询嵌套 JSON。您需要另一个工具来执行这样的查询。您可以为此探索 SQL 查询引擎,例如 Drill and Spark SQL