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;
会给你想要的结果。
我对 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
插入新的 tableINSERT INTO TABLE TABLE3 SELECT t1.Name, t1.Id from Table1 t1
JOIN Table2 t2 WHERE t1.id = t2.id;
会给你想要的结果。