Hive:使用另一个 table 过滤一个 table

Hive: filter a table using another table

我对 Hive 和 sql 很陌生,我有一个关于如何处理以下问题的问题:

我有table答:

Name    id

Amy     1
Bob     4
Josh    9
Sam     6

我想使用来自另一个 table (table B) 的值来过滤它:

Value  id

.2     4
.7     6

要获得一个新的 table,它看起来像 table A,但只包含 id 列中的值也出现在 table B 的 id 列中的行:

Name    id

Bob     4
Sam     6

所以我假设我会写一些像...

CREATE TABLE Table C AS
SELECT * FROM Table A
WHERE id....

创建了两个 table,其中的列

CREATE TABLE TABLE_1 
( NAMES VARCHAR2(10) NOT NULL,
ID_1 NUMBER (2) NOT NULL)

CREATE TABLE TABLE_2 
( VALUES_1 VARCHAR2(10) NOT NULL,
ID_1 NUMBER (2) NOT NULL)

并在这些 table 中插入值

最终 table 应创建为

CREATE TABLE TABLE_3 AS (
SELECT T1.NAMES,T2.ID_1 FROM TABLE_1 T1,TABLE_2 T2
WHERE T1.ID_1(+)= T2.ID_1)

加入吧..

hive> CREATE TABLE TableC AS           
    > SELECT A.* FROM TableA as A,
    > TableB as B                       
    > WHERE A.id = B.id;

hive> SELECT * FROM TableC;
OK
Bob 4
Sam 6

或者试试这个,

hive> CREATE TABLE TableD AS           
    > SELECT A.* FROM TableA as A join
    > TableB as B                       
    > on A.id = B.id;

hive> SELECT * FROM TableD;
OK
Bob 4
Sam 6

我想要的结果的正确语法是:

CREATE TABLE tableC AS
SELECT tableA.*
FROM tableA LEFT SEMI JOIN tableB on (tableA.id = tableB.id);

创建结果table

CREATE TABLE TABLE3 (Name STRING, id INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

然后使用 Join

插入新的 table
INSERT INTO  TABLE TABLE3 SELECT t1.Name, t1.Id from Table1 t1 
JOIN Table2 t2 WHERE t1.id = t2.id;

会给你想要的结果。