查询配置单元表失败

oogrdqng  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(272)

因此,我开始学习如何使用配置单元,但在查询我从数据库中创建的表时遇到了问题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个国家。
因此,与其像英国,英国,英国,巴西,俄罗斯这样的东西。。。
我要英国,巴西,俄罗斯,美国。。。
我试过按顺序、按分组、按不同的顺序,但总是出现错误/没有得到想要的结果。我不确定这是否有什么不同,但我一直在使用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文件。

nwnhqdif

nwnhqdif1#

所以我设法找到了我想要的结果,谢谢gmb提醒我max是个东西!
问题1)

SELECT COUNTRY, MAX(CONFIRMED) AS MAX_CASES
FROM COVID_19
GROUP BY COUNTRY
SORT BY MAX_CASES DESC
LIMIT 10;

问题2)

SELECT COUNTRY, LAST_UPDATE, MAX(CONFIRMED) AS MAX_DATES
FROM COVID_19
GROUP BY COUNTRY, LAST_UPDATE
SORT BY MAX_DATES DESC
LIMIT 10;

我想我已经把事情复杂化了。。。

6ss1mwsb

6ss1mwsb2#

至于问题1),你似乎是在寻求妥协。这就给出了排名前10位的国家 confirmed :

select country, sum(confirmed) total_confirmed
from covid_19 
group by country 
order by total_confirmed desc
limit 10

请注意,一次发布多个问题并不是一个好的做法。然而,对于问题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

相关问题