我正在构建一个网络分析应用程序,我希望低延迟的休息终点采用json并将其存储在hbase中。
我已经阅读了有关kafka的信息,并且Storm似乎是一种将数据导入hbase的好方法,它似乎处理的数据是扁平结构,我无法想象它如何与用例一起使用。
作为我要收集的数据的示例,请参见以下json
{
page: "www.url.com/checkout.html",
cat: "checkout"
browser: "IE 6",
ipAddress: "127.0.0.1",
userId: 10000,
session: 20000,
timeOnPage: null,
user: {
name: "John", gender: "Male", age: 25, lat: 0.1, long: 0.1
},
purchased: {
products: [
{ name: prod1, cost: 100 },
{ name: prod2, cost: 200 },
{ name: prod3, cost: 300 }
],
total: 600
},
mouseMovement: [
]
}
如您所见,数据不是平面模型,因此某些数据也将在以后的时间点进行更新。
我曾想过这种数据结构可以很好地适合hbase吗?但是也许我是完全错误的?
最佳答案
您可以将hive与Hbase集成,并使用HiveQL进行查询:
例如您的Json文件:
{"id": 123, "name": "Ram", "role":"TeamLead"}
{"id": 456, "name": "Silva", "role":"Member"}
{"id": 789, "name": "Krishna", "role":"Member"}
您可以使用
get_json_object
函数将数据解析为JSON对象。例如,如果您使用JSON数据创建登台表:CREATE TABLE staging (json STRING);
LOAD DATA LOCAL INPATH '/local/path/to/jsonfile' INTO TABLE staging;
然后使用
get_json_object
将要加载的属性提取到表中:INSERT OVERWRITE TABLE hbase_table_emp SELECT
get_json_object(json, "$.id") AS id,
get_json_object(json, "$.name") AS name,
get_json_object(json, "$.role") AS role
FROM staging;
希望这对您有帮助