Hive:使用另一个表过滤表

时间:2015-05-12 19:16:53

标签: sql filter hive

我对hive和sql很新,我对如何进行以下操作有疑问:

我有表A:

Name    id

Amy     1
Bob     4
Josh    9
Sam     6

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

Value  id

.2     4
.7     6

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

Name    id

Bob     4
Sam     6

所以我假设我会写一些像......一样的东西。

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用以下列创建了两个表

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)

并在这些表中插入值

决赛桌应该创建为

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)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

创建结果表

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

然后使用Join

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

会给你想要的结果。