3

我正在使用 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 数据吗?

4

2 回答 2

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;
于 2015-03-31T07:46:10.353 回答
1

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

select t.json.id 
from   (select convert_from(Students.address.street, 'JSON') json 
        from   hbase.Customer) t;
于 2015-05-13T12:51:39.553 回答