如何使用sqoop将mySql服务器中的JSON字段数据导入Hive表

时间:2016-07-27 05:51:08

标签: mysql json hive sqoop

我在MySQL服务器中有一个表名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数据导入hive表EmpHiveStore并在hive表上查询,如

SELECT name,address.street from EmpHiveStore;

有没有办法使用sqoop将JSON字段数据导入Hive表?

谢谢。

1 个答案:

答案 0 :(得分:0)

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

您需要为此

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

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

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

直接通过蜂巢。

您可以使用

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

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

您想要查询嵌套的JSON。您需要另一个工具,允许您执行这样的查询。您可以为此探索DrillSpark SQL之类的SQL查询引擎。