【问题标题】:Hive - Select amount of entriesHive - 选择条目数量
【发布时间】:2016-08-29 12:46:05
【问题描述】:

我在 Hive 工作。到目前为止,它真的很棒,但我在查询方面遇到了问题。

我有两个名为“marked”和“data”的表,我想通过一个查询从这两个表中提取数据。

首先,我想从“marked”表中提取mindate,并计算mindate(从“marked”获得)和当前日期之间的“data”表中的条目。

所以我想得到一个结果,其中包含用户ID、mindate 以及在mindate 和当前日期之间的另一个表的此用户ID 的出现次数。 我从几个小时开始就尝试获取此查询,但我知道它们不起作用。谁能帮帮我?

非常感谢!

更新:

对不起,我昨天有点赶时间。怪我忘记了一些细节。

关于架构:

  1. 标记的表格只有一些列。总共 8 个。这是这个表的架构:

    "name": "Datetime",
    "type": "long",
    "logicalType": "timestamp-millis",
    
    "name": "Hour",
    "type": "string",
    
    "name": "UserId64",
    "type": "long"
    
    "name": "MemberId",
    "type": "int"
    
    "name": "SegmentId",
    "type": "int"
    
    "name": "IsDailyUnique",
    "type": "boolean"
    
    "name": "IsMonthlyUnique",
    "type": "boolean"
    
    "name": "Value",
    "type": "int"
    
  2. 另一个名为 data 的表的架构有点困难,因为该表包含 100 多个列。为简单起见,我只概述了重要的列:

    "name": "Datetime",
    "type": "long",
    "logicalType": "timestamp-millis",
    
    "name": "Hour",
    "type": "string",
    
    "name": "UserId64",
    "type": "long"
    
    "type": "enum",
    "name": "EventType",
    "symbols": ["IMP", "CLICK", "PC_CONV", "PV_CONV"]
    

因此,如果我进行如下查询,我会得到一个包含结果的列表

选择时间戳(日期时间),小时,userid64,segmentid,isdailyunique, ismonthlyunique,日期从标记的地方 userid64 = 8012570064195370898 而segmentid = 1878696 order by datetime desc;

结果表包含数据。现在我想使用最早获得的日期进行进一步的查询。

如果我们去表数据做如下查询

选择时间戳(日期时间),auctionid64,小时,事件类型, mediacostdollarscpm、buyerspend、buyerbid、ecp、eap、isimp、isclick、 userid64、sellerid、publisherid、siteid、sitedomain、advertisingrid、 广告频率、广告频率、campaigngroupid、campaignid、 creativeid, creativefreq, creativerec, pixelid, dealid, dealtype, custommodelid、custommodellastmodified、leafname、数据中的日期时间 其中 userid64 = 8012570064195370898 和 adsid = 327758 订单 按日期时间描述;

你会得到如下所示的结果

2016-08-09 19:33:45.0   5908114946988383281 17  PV_CONV
2016-08-07 19:17:13.0   5908114946988383281 17  IMP
2016-08-07 19:16:29.0   5454485145188351263 17  IMP
2016-08-07 18:52:40.0   1074433759230515153 16  IMP
2016-08-07 18:52:40.0   6991642005216308404 16  IMP
2016-08-07 18:52:13.0   5024645171257244072 16  IMP
2016-08-07 18:51:55.0   5371107932239703086 16  IMP
2016-08-07 18:51:55.0   7321752276741166764 16  IMP
2016-08-07 18:51:01.0   3459181835067844898 16  IMP
2016-08-07 18:50:42.0   6208818658549255015 16  IMP
2016-08-07 18:50:41.0   5373958128201701132 16  IMP
2016-08-07 14:34:07.0   8393280749656213703 12  IMP

这里的导入行是第二行。后面有一个叫“PV_CONV”的标志。

我想要什么:

我想要一个查询,它会为我生成一个包含

的表
  • 用户名
  • 标记表的最小日期
  • 包含 event_type "IMP" 的表数据的最大日期
  • 标记日期与表格数据最大日期的时间差
  • 以及表格数据的其他一些列。

有没有机会在不创建额外表格的情况下获得这个? 一切顺利,谢谢 彼得

【问题讨论】:

  • 请发布表架构、示例数据、预期结果和您尝试过的查询。

标签: hive


【解决方案1】:

由于没有提供表格架构,我假设下面的表格架构来回答您的问题..

表格标记:
UserID int, mindate date

表-数据:
UserID int, data_date date

考虑将 UserID 作为连接表的主列,这里是查询

SELECT D.UserID, M.mindate, count(D.data_date) from Marked M
join Data D on M.UserID = D.UserID 
where M.mindate <= D.data_date and D.data_date <= from_unixtime(unix_timestamp());

根据表中的'Date' 数据类型,需要更改 where 子句。

【讨论】:

  • 对不起.. 请看我的新帖子!
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多