2016-08-29 7 views
0

Я работаю в Hive. Пока это действительно здорово, но у меня проблема с запросом.Hive - Выберите количество записей

У меня есть две таблицы с названием «помечены» и «данные» и вы хотите извлечь данные из одного запроса.

Сначала я хочу извлечь символ из таблицы «отмечены» и подсчитать записи в таблице «данные» между символом (полученным из «помечены») и текущей датой.

Так что я хочу получить один результат, содержащий идентификатор пользователя, символ и количество вхождений этого идентификатора пользователя другой таблицы между комментарием и текущей датой. Я пытаюсь получить этот запрос с часами, но Joins, поскольку я их знаю, не работает. Кто-нибудь может мне помочь?

Большое спасибо!

UPDATE:

К сожалению, я был немного в спешке вчера. Обвините меня в том, что я забыл некоторые подробности.

О схеме:

  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. Схема другой таблицы называется данных немного сложнее, так как эта таблица содержит более 100 столбцов. Для простоты I контур только важные столбцов:

    "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 заказ by datetime desc;

Итоговая таблица содержит данные. Теперь я хочу использовать самую старую полученную дату для моего дальнейшего запроса.

Если мы обратимся к данным таблицы и сделать следующий запрос

выберите метку времени (DateTime), auctionid64, час, типСобытия, mediacostdollarscpm, buyerspend, buyerbid, ECP, ЕАР, isimp, isclick, userid64 , sellerid, publisherid, siteid, sitedomain, AdvertiserId, advertiserfrequency, advertiserrecency, campaigngroupid, CampaignId, CreativeId, creativefreq, creativerec, pixelid, dealid, dealtype, custommodelid, custommodellastmodified, leafname, даты и времени из данных , где userid64 = 8012570064195370898 и AdvertiserId = 327 758 заказ от 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».

Что я хочу:

Я хочу, чтобы запрос, который генерирует мне таблицу, содержащую

  • Идентификатор_пользователь
  • даты
  • мин таблиц отмечена
  • даты макс данных таблицы, содержащих event_type "IMP"
  • разность во времени между обозначенной датой и максимальной датой данных таблицы
  • и с ome другие столбцы данных таблицы.

Есть ли шанс получить это без создания дополнительных таблиц? Все лучшие и благодаря Питер

+1

Пожалуйста, пост схемы таблицы, выборочные данные, ожидаемый результат и запрос, который вы пробовали. –

ответ

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' в вашей таблице, где необходимо условие, чтобы изменить ..

+0

Извините .. Пожалуйста, смотрите мой новый пост! – Peter

Смежные вопросы