sql - hive 查询 Json 喜欢或等于的地方

标签 sql json hadoop hive

我是 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/

相关文章:

regex - Regex_Extract使用PIG

hadoop - 将 PIg 的 MultiStorage 用于嵌套结构

mysql - 如何使用 MySQL 获取通过和失败结果的最大日期?

mysql - (行到列/数据透视)+ SUM

mysql - 使用mysql将缺少的记录从一个表插入到另一个表

java - PowerShell Json 序列化以与 Java 互操作

java - 将数据并行加载到 hdfs

mysql - MySQL 中的无限子类别排序

Python和Azure cli备份命令: is misspelled or not recognized by the system

python - 类似于 simplejson/json 的 XML 库? - Python