当前位置: 首页 > 知识库问答 >
问题:

标记为表列名的数据的HiveQL查询

许学真
2023-03-14

我在HDP 2.6.5平台上使用Hive(1.2.1000.2.6.5.0-292)在一个简单的数据库中工作,该数据库基于以下数据:https://grouplens.org/datasets/movielens/100k/
。我有4个表,名为:类型、电影、收视率、用户,如下所示:

CREATE TABLE genre(genre string, genre_id int);
CREATE TABLE movies (movie_id INT, title STRING, rel_date DATE, video_rel_date STRING, 
imdb_url STRING, unknown INT, action INT, adventure INT, animation INT, childrens INT, 
comedy INT, crime INT, documentary INT, drama INT, fantasy INT, noir INT, horror INT, 
musical INT, mystery INT, romance INT, sci_fi INT, thriller INT, war INT, western INT) 
CLUSTERED BY (movie_id) INTO 12 BUCKETS STORED AS ORC;
CREATE TABLE ratings(user_id int, movie_id int, rating int, rating_time int);
CREATE TABLE users(user_id int, age int, gender char(1), occupation string, zip int);

我想写一个问题,返回哪种类型的电影最常被女性观看,哪种类型的电影最常被男性观看?但对我来说,问题是电影类型所在的电影表的结构:

1玩具总动员(1995)1995-01-01http://us.imdb.com/m/title-确切?玩具%20Story%20(1995)0001110000000000000

最后19个字段是类型,“1”表示电影属于该类型,“0”表示不属于该类型。另外,电影可以同时分为几种类型。性别在“用户”表中表示为“M”或“F”字符。所需的表可以很容易地联接,但如何返回和分组类型,即列名?

SELECT m.title, r.rating, u.gender
FROM movies m INNER JOIN ratings r ON (m.movie_id = r.movie_id) 
INNER JOIN users u ON (u.user_id = r.user_id);

共有1个答案

杨腾
2023-03-14

使一个数组的类型列放置在与genre_id对应的顺序,爆炸数组和连接的位置数组与类型表。像这样(未测试):

   select s.title, s.genre, s.gender, s.rating, s.cnt
    from
    (select s.title, s.gender, s.rating, s.cnt, s.genre,
           rank() over (partition by s.gender order by s.cnt desc) as rnk
     from
       (
        select m.title, u.gender, r.rating, g.genre, count(*) over(partition by u.gender) cnt
          from    
            (select m.movie_id, m.title, e.id+1 as genre_id
               from movies m
                  lateral view 
                  posexplode (array(--place columns in a positions corresponding their genre_id
                              unknown, action, adventure, animation, childrens, 
                              comedy, crime, documentary, drama, fantasy, 
                              noir, horror, musical, mystery, romance, 
                              sci_fi, thriller, war, western
                                   )
                             )e as id, val
              where e.val=1
             ) m
             INNER JOIN ratings r ON (m.movie_id = r.movie_id) 
             INNER JOIN users   u ON (u.user_id = r.user_id)
             INNER JOIN genre   g ON (g.genre_id = m.genre_id)
         ) s
    ) s where rnk = 1

          
 类似资料:
  • 我想创建一个配置单元UDF函数,它根据一些值返回特定的列名,比如retreivecol(年龄)。如果年龄是20,那么返回在选择查询中使用的列名列表,比如'name、email、fbuserid、friend list‘等。如果年龄小于20,只返回'name'。所以我希望我的配置单元QL查询看起来像 上面的查询只打印列的名称,如'name、email、fbuserid、friendslist'等,而

  • 问题内容: 我需要查询以在Bigquery中查找表(表元数据)的列名,例如SQL中的以下查询: 问题答案: 更新 :现在可以!请参阅下面的文档和答案。 回答,大约在2012年: 尽管这不是第一次请求,但当前无法通过查询检索表元数据(即列名和类型)。 您有理由将其作为查询吗?表格元数据可通过表格API获得。

  • 我有一个Spring Boot应用程序,使用Spring Data JPA查询MySQL数据库。 我需要得到一份经过一些参数筛选的课程列表。 我通常使用语法

  • 问题内容: 我有一个datalist标记,该标记允许我的用户使用建议框。但是,我注意到野生动物园不支持此功能。有没有解决此问题的方法? 这是我的代码-我实际上是用ajax方法填充值,但这是填充后的样子: 问题答案: Safari不支持数据列表元素。

  • 我的数据库表如下所示: 通过示例查询,我只得到下面的输出,但没有数据。不会调用错误: 输出: 这些方法都不起作用。请帮助我使它工作,以便我可以获得一个包含和两个数据对象的列表

  • 我试图搜索一个列表包含另一个列表与MongoDB。 我将使用字符串列表进行搜索。假设列表L=[1,2,3,4,5] 例如,对于给定的列表L=[1,2,3,4,5],我希望返回带有_id1和2的文档。3不能返回,因为6不在L中。 我找到了两个解决方案 一 二 由于我想使用Spring Data MongoDb Criterias,我尝试编写上述解决方案,但代码似乎不起作用,它返回所有文档