我在Hive工作。到目前为止它真的很棒,但我对查询有疑问。
我有两张名为'标记为'和'数据'并希望通过一个查询从两者中提取数据。
首先,我想从表中标出'标记'并计算表格中的条目数据'在心智之间(从标记为'获得)和当前日期之间。
因此,我希望得到一个结果,其中包含用户ID,另一个用户ID和当前日期之间另一个表的此用户ID的出现次数。 我试着从小时开始接收这个查询,但是因为我知道它们不能正常工作。有人可以帮帮我吗?
非常感谢!
更新
抱歉,我昨天有点匆忙。责备我,我忘记了一些细节。关于架构:
标记的表格只有一些列。总共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"
由于此表包含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由datetime desc命令;
结果表包含数据。现在我想将最早获得的日期用于我的进一步查询。
如果我们转到表数据并执行以下查询
选择时间戳(日期时间),auctionid64,小时,事件类型, mediacostdollarscpm,buyerpend,buyerbid,ecp,eap,isimp,isclick, userid64,sellerid,publisherid,siteid,sitedomain,advertiserid, advertiserfrequency,advertiserrecency,campaigngroupid,campaignid, creativeid,creativefreq,creativerec,pixelid,dealid,dealtype, custommodelid,custommodellastmodified,leafname,datetime from data 其中userid64 = 8012570064195370898和advertiserid = 327758订单 by datetime desc;
您将得到如下所示的结果
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"。
的标志我想要的是什么:
我想要一个查询,它会生成一个包含
的表格有没有机会在不创建额外表的情况下获得此功能? 一切顺利,谢谢 彼得
答案 0 :(得分:0)
由于未提供表模式,我假设下面的表模式来回答您的问题..
表 - 标记:
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子句。