我是 Hive 和 Hadoop 的新手。我创建了一个表,它引用了包含文件的特定位置。
CREATE DATABASE IF NOT EXISTS <dbname>
LOCATION '/user/<username>/hive/<dbname>.db';
USE <dbname>;
CREATE EXTERNAL TABLE IF NOT EXISTS my_table (json STRING)
PARTITIONED BY (year INT, month INT, day INT)
STORED AS Parquet
LOCATION '/my-data/my/files';
此表有四列:年、月、日和 json。
json 看起来像这样:
{
"t_id":"user.login",
"e_time":"2014-11-30T23:59:52Z",
"user_email_address":"someemail@email.com",
"la_id":"10",
"dbnum":16,
"remote_ip":"171.154.1.8",
"server_name":"some.server",
"protocol":"IMAPS",
"secure":true,
"result":"success"
}
一个有效的基本查询看起来像这样:
SELECT json FROM mydb WHERE year=2015 AND month=12 LIMIT 10;
我想做的是有一个 where 子句,我可以在其中过滤上面列出的 json 字段。我想象它看起来像下面这样,但它不起作用:
SELECT get_json_object(mytable.json, '$.t_id') as whatever
FROM mytable
WHERE year=2015 AND month=12 AND json like '%user.login%' LIMIT 1;
或者更好的是,能够像这样基于 json 进行查询:
SELECT COUNT(*)
FROM mytable
WHERE json.t_id = 'user.login'
AND json.someDate > ... and so on...
如有任何建议,我们将不胜感激。
最佳答案
试试这个查询:
select b.t_id from my_table a lateral view json_tuple(a.json,'t_id') b as t_id 其中 a.year=2015 and a.month=12 LIMIT 10;
您可以在 json_tuple 中调用另一个键并在 where 子句中使用它。例如。:
select b.t_id from my_table a lateral view json_tuple(a.json,'t_id','result') b 作为 t_id,result where a.year=2015 and a.month=12 and b.result ='true ' 限制 10;
关于sql - hive 查询 Json 喜欢或等于的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34646667/