2016-08-29 8 views
0

私はハイブで働いています。これまでのところ、本当に素晴らしいですが、私はクエリに関する問題があります。ハイブ - エントリの量を選択

私は 'マークされた'と 'データ'と呼ばれる2つのテーブルがあり、両方から1つのクエリでデータを抽出したいと思います。

最初に、 'marked'テーブルからmindateを抽出し、minded( 'marked'から取得)と現在の日付の間の 'data'テーブルのエントリをカウントします。

私はmindIDと現在の日付の間に、他のテーブルのuserID、mindate、および出現回数を含む1つの結果を得たいと思います。 私は何時間もこのクエリを取得しようとしますが、私が知っているようにジョインは機能していません。誰か助けてくれますか?

ありがとうございます!

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個の以上の列を含むので、データと呼ばれる他のテーブルのスキーマが少しより困難です。

    "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、dateからの日付userid64 = 8012570064195370898 およびsegmentid = 1878696 order by datetime desc;

結果の表にはデータが含まれています。今度は、取得した最古の日付をさらにクエリに使用したいと考えています。

我々は、テーブルのデータに移動し、次のクエリ

選択したタイムスタンプ(日時)を行う場合は、auctionid64、時間、EVENTTYPE、 mediacostdollarscpm、buyerspend、buyerbid、ECP、EAP、isimp、isclick、 userid64データ userid64 = 8012570064195370898とadvertiseridから、sellerid、発行者ID、サイトID、sitedomain、advertiserid、 advertiserfrequency、advertiserrecency、campaigngroupid、CAMPAIGNID、 creativeid、creativefreq、creativerec、pixelid、dealid、dealtype、 custommodelid、custommodellastmodified、leafname、日時= 327 758 order 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"という記号があります。

私は私のテーブルの

  • ユーザーID
  • 分の日付がEVENT_TYPEを含むテーブルデータの
  • 最大日付をマーク含むテーブルを作成するクエリをしたい:私が欲しいもの

    「IMP」と記された日付とテーブルデータ

  • とsの最大の日付の間
  • 時間差テーブルデータの他の列。

追加のテーブルを作成することなく、これを取得するチャンスはありますか? テーブルスキーマが提供されていなかったので、私はあなたの質問に答えるために、以下のテーブルスキーマを仮定すべてのベストと感謝 ピーター

+1

テーブルスキーマ、サンプルデータ、期待される結果とあなたがしようとしているクエリを投稿してください。 –

答えて

0

..

マーク卓上:
UserID int, mindate date

卓上データ:テーブルを結合するための主要な柱として、ユーザーIDを考慮
UserID int, data_date date

、ここでは、クエリ

0でありますあなたのテーブルに 'Date'データ型に応じて、
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()); 

、句を変更する必要がある場合..

+0

申し訳ありません..私の新しい投稿を見てください! – Peter

関連する問題