使用Apache Drill在HBase中获取嵌套的JSON数据

时间:2015-03-27 22:27:51

标签: json hbase apache-drill

我正在使用Apache Drill在HBase表上运行SQL查询。其中一列中的值为:

0: jdbc:drill:schema:hbase:zk=localhost> select cast(address['street'] as varchar(20)) from hbase.students;
+------------+
|   EXPR$0   |
+------------+
| {"id": 123} |
+------------+
1 row selected (0.507 seconds)

我想使用查询访问id字段。类似的东西:

0: jdbc:drill:schema:hbase:zk=localhost> select tbl.address['street']['id'] from hbase.students as tbl;
+------------+
|   EXPR$0   |
+------------+
| null       |
+------------+

如您所见,这不起作用。我对文件中的JSON数据进行了类似的查询。我的问题是我可以在HBase中查询JSON数据。

2 个答案:

答案 0 :(得分:1)

行。我找到了这个问题的答案,以防其他人有同样的要求。

第一步是使用内置的convert_from()函数将HBase数据转换为JSON。可以创建一个可以运行查询的视图。

> create or replace view Street as select convert_from(Students.address.street, 'JSON') json from hbase.Customer;

然后,针对视图运行查询

> select * from Street;
> select Street.json.id from Street;

答案 1 :(得分:1)

您还可以使用子查询将HBase列中的数据转换为JSON:

select t.json.id 
from   (select convert_from(Students.address.street, 'JSON') json 
        from   hbase.Customer) t;