我在 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表中?
谢谢。
最佳答案
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 会将这些数据存储在字符串中。 Hive 中没有特殊的 JSON 类型。因此,您将无法执行类似的查询
SELECT name,address.street from EmpHiveStore;
直接通过配置单元。
您可以使用
获取数据的位置show create table EmpHiveStore;
您的表中只有 1 列,并且包含 JSON 数据。所以它基本上是 HDFS 中的一个 JSON 文件。
您想要查询嵌套 JSON。您需要另一个工具来允许您执行这样的查询。您可以探索 SQL 查询引擎,如 Drill和 Spark SQL为此。
关于mysql - 如何使用 sqoop 将 JSON 字段数据从 mySql 服务器导入到 Hive 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38604707/