Hive 找出维度 table 中丢失的记录?
Hive find out missing records in dimension table?
我想找出哪个人没有使用 Hive 安装所需的软件 SQL。
这是脚本:
- table
t1
中的记录是不同人实际安装的软件。
- table
t2
中的记录包括所有必需的软件。
CREATE TABLE IF NOT EXISTS t1 (name STRING, install STRING);
CREATE TABLE IF NOT EXISTS t2 (need_install STRING);
INSERT INTO TABLE t1 VALUES('Tom', 'Chrome'),('Tom', 'Ins'),('Tom', 'Cnn'),('Jane', 'Facebook');
INSERT INTO TABLE t2 VALUES('Chrome'),('Ins'),('Facebook');
想要的结果
Tom Facebook # Tom have not installed the required software is `Facebook`
Jane Chrome/Ins # Jane have not installed the required software is `chrome` and `Ins`
已解决
SELECT *
FROM(
SELECT *
FROM(
SELECT DISTINCT NAME
FROM t1
) tmp1
CROSS JOIN t2
) tmp2
LEFT JOIN t1 ON tmp2.name = t1.name
AND tmp2.need_install = t1.install
WHERE t1.name IS NULL;
SELECT X.NAME,T2.need_install FROM
(
SELECT DISTINCT NAME
FROM T1
)AS X
CROSS JOIN T2
EXCEPT
SELECT T.NAME,T.INSTALL
FROM T1 AS T
不确定这在 Hive 中是否有效,但在 SQL 服务器中会产生所需的结果
我想找出哪个人没有使用 Hive 安装所需的软件 SQL。
这是脚本:
- table
t1
中的记录是不同人实际安装的软件。 - table
t2
中的记录包括所有必需的软件。
CREATE TABLE IF NOT EXISTS t1 (name STRING, install STRING);
CREATE TABLE IF NOT EXISTS t2 (need_install STRING);
INSERT INTO TABLE t1 VALUES('Tom', 'Chrome'),('Tom', 'Ins'),('Tom', 'Cnn'),('Jane', 'Facebook');
INSERT INTO TABLE t2 VALUES('Chrome'),('Ins'),('Facebook');
想要的结果
Tom Facebook # Tom have not installed the required software is `Facebook`
Jane Chrome/Ins # Jane have not installed the required software is `chrome` and `Ins`
已解决
SELECT *
FROM(
SELECT *
FROM(
SELECT DISTINCT NAME
FROM t1
) tmp1
CROSS JOIN t2
) tmp2
LEFT JOIN t1 ON tmp2.name = t1.name
AND tmp2.need_install = t1.install
WHERE t1.name IS NULL;
SELECT X.NAME,T2.need_install FROM
(
SELECT DISTINCT NAME
FROM T1
)AS X
CROSS JOIN T2
EXCEPT
SELECT T.NAME,T.INSTALL
FROM T1 AS T
不确定这在 Hive 中是否有效,但在 SQL 服务器中会产生所需的结果