我在MySQL服务器中有一个表名EmpData
,其中两个字段为EmpID (INT)
和Details (nvarchar)
。 Details
字段包含类似
{ "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表?
谢谢。
答案 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。您需要另一个工具,允许您执行这样的查询。您可以为此探索Drill和Spark SQL之类的SQL查询引擎。