SQL-Abfrage-JOIN mit Tabelle
select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as
timestamps from testingtable2 LATERAL VIEW explode(purchased_item) exploded_table
as prod_and_ts;
Mithilfe der obigen Abfrage, erhalte ich die unten Ausgabe.
USER_ID | PRODUCT_ID | TIMESTAMPS
------------+------------------+-------------
1015826235 220003038067 1004841621
1015826235 300003861266 1005268799
1015826235 140002997245 1061569397
1015826235 *200002448035* 1005542471
Vergleicht man die oben output from the query with the below Table2 data
, dann die product_id
im last line of above output
ist nicht in übereinstimmung mit den ITEM_ID
in der letzten Zeile in der unten Table2
Daten.
BUYER_ID | ITEM_ID | CREATED_TIME
-------------+-------------------+------------------------
1015826235 220003038067 2001-11-03 19:40:21
1015826235 300003861266 2001-11-08 18:19:59
1015826235 140002997245 2003-08-22 09:23:17
1015826235 *210002448035* 2001-11-11 22:21:11
Also meine Frage ist
Finden all jene PRODUCT_ID(ITEM_ID)
und TIMESTAMPS(CREATED_TIME)
sind nicht in übereinstimmung mit Table2
entsprechenden Daten insbesondere BUYER_ID oder USER_ID.
Also muss ich zeigen das Ergebnis, wie dies für das obige Beispiel-
BUYER_ID | ITEM_ID | CREATED_TIME | USER_ID | PRODUCT_ID | TIMESTAMPS
-----------+-------------------+-------------------------+---------------+------------------+------------------
1015826235 *210002448035* 2001-11-11 22:21:11 1015826235 *200002448035* 1005542471
Muss ich JOIN die obige Abfrage, die ich schrieb mit Tabelle2 zu bekommen, das obige Ergebnis. Also muss ich die Verwendung meiner obigen Abfrage in der Fügeprozess. Das ist verwirrend mich sehr. Jede Anregung wird dankbar sein.
UPDATE:-
Schrieb ich die folgenden Abfrage, aber irgendwie bin ich nicht in der Lage zu erreichen, die Ausgabe, die ich erreichen wollte. Kann mir jemand helfen mit diesem?
SELECT table2.buyer_id, table2.item_id, table2.created_time from
(select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as
timestamps from testingtable2 LATERAL VIEW explode(purchased_item) exploded_table
as prod_and_ts) prod_and_ts JOIN table2 where
prod_and_ts.user_id = table2.buyer_id
and (product_id <> table2.item_id or
timestamps <> UNIX_TIMESTAMP(table2.created_time));
- Ich arbeite mit Hive und Hive unterstützt die SQL-ähnliche syntax, so dass ist der Grund, warum ich tag diese Frage als
sql
undjoin
. So kommen arbeiten im BIENENSTOCK. Ich muss einfach BEITRETEN, im Grunde. Also ich denke, dass Oracle-syntax wird in Ordnung sein. - Warum ist die Letzte Zeile, die nicht zusammenpassen? Ist es, weil der Zeitstempel nicht in übereinstimmung mit der Zeit erschaffen?
- Ich bin mir nicht sicher, ob die tatsächliche Abfrage, die ich geschrieben habe richtig ist oder nicht. Das ist verwirrend mich sehr. Also nicht sicher, ob die Abfrage richtig ist oder nicht.
- Ihre Abfrage sieht okay aus; versuchen Sie die folgenden JOIN-durch den Austausch alles in Ihrer Abfrage oben nach ) prod_and_ts : LEFT JOIN Tabelle2, wo prod_and_ts.user_id = table2.buyer_id und product_id = table2.item_id UND Zeitstempel = UNIX_TIMESTAMP(Tabelle2.created_time), WO Tabelle2.item_id NULL IST - dies sollte markieren Sie alle Zeilen, die nicht passen, die auf Benutzer -, Produkt-und Zeitstempel
- Ich bin mir nicht sicher, ob deine Abfrage richtig ist oder nicht, da haben Sie die beiden where-Klausel in der Abfrage, die Sie erwähnt. Sind Sie sicher, dass Ihre Abfrage richtig ist?
- Ihre Bewertung ist zu hoch, um doppelt öffnen **und vor allem 2 Duplikate der gleichen Frage. [stackoverflow.com/q/11336950/1166147][1] [stackoverflow.com/q/11428269/1166147][2]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie können tun, was Sie wollen mit zwei Abfragen, aber ich bin mir nicht 100% sicher. Oft in dieser situation, ist es ausreichend, um Dinge zu finden, die in der ersten Tabelle, die keine Entsprechung in der zweiten Tabelle. Sie werden auch versuchen, einen "nächsten" Spiel, das ist der Grund, warum das ist eine große Herausforderung.
Die folgende Abfrage sucht nach übereinstimmungen auf Benutzer-id-und genau eine der beiden anderen Felder, und dann verbindet Sie:
Diese nicht finden Situationen, in denen es keine übereinstimmung auf jedem Feld.
Außerdem habe ich geschrieben über die "on" - syntax statt "wo". Ich nehme an, HIVE unterstützt diese.
Ihre rep ist zu hoch um zu öffnen ein Duplikat und vor allem 2 Duplikate der gleichen Frage.
Verknüpfen von zwei Tabellen in Hive mit HiveQL(Hadoop)
Verbinde die Beiden Tabellen und der Ausgabe von Ihnen beiden
Du nicht genug Infos zu Band gibt die Datensätze zurück, für das Dritte Szenario.
Sie können eine
FULL OUTER JOIN
mit einemOR
und bekommen alles zurück, und ordnen Sie die Zeilen, die Sie haben genug info auf wie im ersten und zweiten Fall-Liste und identifizieren Sie die Rec in die Lage, dass Sie nicht durch Rücksendung Zeilen mit null-Werte für die Felder, die aus der nicht-matching-Tabelle in der Dritten Szenario., Der versucht, auf das Dritte Szenario ist ein hack - die info ist nicht da
Diese passen Sie mit einer für das angegebene Datum sind, werden die nicht übereinstimmenden, an den anderen Tagen, aber Sie werden wieder kommen kartesische Produkte.
Könnten Sie
RANK()
oder versuchen Sie einetop one
usw.RANK()
oderROW_NO
wäre wahrscheinlich die beste von diesen hacks wäre dies nicht eine Bienenstock-Frage, aber ich weiß, Sie sind mit HQL, ich werde nicht schreiben Sie es auf. Man konnte Sie ziehen aus in eine separate Tabelle, und führen Sie einige logische update-Abfragen zu aktualisieren, dann verwenden Sie, die als lookup-Tabelle zur Band zurück.Was sollten Sie wahrscheinlich tun, ist das, was die person in Frage, Sie bot einen bounty vorgeschlagen - da haben Sie nicht wirklich ein guter Weg, um die Abfrage der Dritten Szenario, und Sie bot Ihnen eine alternative, die eine spezifische STRUKTUR.