首页 > 解决方案 > Hive 初学者,失败:SemanticException 错误

问题描述

假设我有两个表,actv_user 和 play_video:

活动用户:

 |p_date | user_id|country_name|
| -------- | -------------- |------------|
| 20210125| 1|Brazil|
| 20210124| 2|ENG|
| 20210125| 3|India|
| 20210125| 4|Indonesia|
| 20210125| 5|Indonesia|
| 20210125| 6|Brazil|
| 20210125| 7|Brazil|
| 20210125| 8|Indonesia|
User_id is unique but country_name can be null

play_video:
| user_id| video_id|
| -------- | -------------- |
| 1| 1001|
| 1| 1002|
| 2| 2001|
| 3| 1001|
| 3| 1002|
| 3| 3003|
| 4| 4004|
|5| 1001|
|5| 5005|
|6| 1001|
|6| 1002|
|7| 1001|
|7| 1002|
|8| 3003|
|8| 4004|

我想做的是在第一天找到巴西、印度尼西亚和印度的新用户(p_date = 20210125)在顶部播放视频。因此,巴西的新用户为1,6,7(user_id),印度的新用户为3,印度尼西亚的新用户为4,5,8(user_id);结果是这样的: 在巴西,新用户播放量最高的视频是 1001,1002 在印度,新用户播放量最高的视频是 1001,1002,3003 在印度尼西亚,新用户播放量最高的视频是 4004,3003,5005

渴望结果:

|country_name| count|video_id|
| -------- | -------------- |----- |
| Brazil| 1001|3|
| Brazil| 1002|3|
| India | 1001|1|
| India | 1002|1|
| India | 3003|1|
| Indonesia | 4004|2|
| Indonesia | 3003|1|
| Indonesia | 5005|1|

我得到的错误信息是:失败:语义异常错误条件:user_ID 不为空。SQL_Photo 分区限制中缺少Table play!如有分区情况,请检查是否有异常或使用情况,或情况请加括号!

有任何想法吗?

我试过了:

    select actv_user.country_name ,play_video.video_id, count(play_video.video_id) count_num

from  actv_user  join   play_photo on actv_user.user_id  = play_video.user_id 

where p_date = 20210125 and (country_name = 'Brazil' or country_name = 'India ' or country_name = 'Indonesia ')

group by actv_user.country_name ;

标签: sqlhive

解决方案


请在 ('Brazil' ,'India ' ,'Indonesia ') 中试试这个 country_name


推荐阅读