查询hive表不成功
Posted
技术标签:
【中文标题】查询hive表不成功【英文标题】:Unsuccessful in querying hive table 【发布时间】:2020-09-09 16:51:01 【问题描述】:所以我开始学习如何使用 hive,但在查询我从 https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports 的数据集创建的表时遇到了麻烦
从我尝试查找的 5 个最近的 .csv 文件制作表格后: 1) 恢复最多的 10 个不同国家 2) 每个国家恢复最多的日期和 3) 是否有任何国家的恢复比活跃病例多。
我尝试了几种不同的方法,但我得到的最好的方法是 10 个列表,其中包含 3 或 4 个重复的国家/地区。
所以与其拥有类似的东西 英国, 英国, 英国, 英国, 巴西, 俄罗斯, ...
我想要英国、巴西、俄罗斯、美国...
我尝试过 order by、group by、distinct,但我不断收到错误/没有得到想要的结果。不确定它是否有所作为,但我一直在使用 Hadoop 创建一个包含如下查询的 .sql 文件。然后我会用 hive -f 运行它。
SELECT COUNTRY FROM COVID_19 ORDER BY COVID_19.CONFIRMED DESC LIMIT 10;
编辑 - 表是这样创建的:
CREATE EXTERNAL TABLE COVID_19(
`FIPS` bigint,
`admin2` string,
`province` string,
`country` string,
`last_update` string,
`lat` double,
`long_` double,
`confirmed` bigint,
`deaths` bigint,
`recovered` bigint,
`active` bigint,
`combined_key` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
*s3 bucket containing the csv files*
如前所述,链接中的数据用于制作表格。 5 个最新的 csv 文件。
【问题讨论】:
您好,摩根,如果您可以提供带有示例数据的表架构,这将有助于创建查询。目前尚不清楚您在数据集中的表格中使用了哪些字段。 【参考方案1】:至于问题 1),您似乎在寻找聚合。这为您提供了总数排名前 10 的国家/地区confirmed
:
select country, sum(confirmed) total_confirmed
from covid_19
group by country
order by total_confirmed desc
limit 10
请注意,在 SO 上一次发布多个问题并不是一个好习惯。但是,这是问题 2) 的一种方法。想法是使用相关子查询过滤数据集:
select c.*
from covid_19 c
where c.recovered = (select max(recovered) from covid_19 c1 where c1.country = c.country)
以上假设confirmed
和recovered
给出每日病例数。另一方面,如果它们代表始终递增的值,那么方法会有所不同。
对于问题1,我们需要使用max()
而不是sum()
:
select country, max(confirmed) max_confirmed
from covid_19
group by country
order by max_confirmed desc
limit 10
对于问题 2,它有点复杂。基本上,我们需要lag()
来获取前一天的值。然后我们可以使用row_number()
或rank()
按照回收率的差异对记录进行排序,并根据每个国家/地区的最高记录进行过滤:
select *
from (
select
c.*,
rank() over(partition by country order by recovered - lag_recovered desc) rn
from (
select
c.*,
lag(recovered) over(partition by country order by last_update) lag_recovered
from covid_19 c
) c
) c
where rn = 1
【讨论】:
这些都不起作用。问题 1 的答案给了我错误 Expression not in GROUP BY key 'country'(错误 10025),而问题 2 的答案只列出了完整的表格。如果有帮助,我正在使用 Hive 2.3.2 @Mogan_Clarke:我忘记了group by
子句-这是初学者的错误,我不知道当时我的想法在哪里!固定。【参考方案2】:
所以我设法找到了我想要的结果,谢谢 GMB 提醒我 MAX 是一个东西!
第一季度)
SELECT COUNTRY, MAX(CONFIRMED) AS MAX_CASES
FROM COVID_19
GROUP BY COUNTRY
SORT BY MAX_CASES DESC
LIMIT 10;
第二季度)
SELECT COUNTRY, LAST_UPDATE, MAX(CONFIRMED) AS MAX_DATES
FROM COVID_19
GROUP BY COUNTRY, LAST_UPDATE
SORT BY MAX_DATES DESC
LIMIT 10;
我想我已经把这个复杂化了……
【讨论】:
以上是关于查询hive表不成功的主要内容,如果未能解决你的问题,请参考以下文章
在SQL*Plus里面已经显示创建表成功了,可是后面为啥又说表不存在呢?