使用 Hive SQL 根据日期排除同一列中的值
Exclude values from same column depending on date, using Hive SQL
我需要使用 Hive 从 table 中提取一组 ID。我要从中提取数据的 table 按日期分区。我需要的是八天前出现在 table 中但不出现在代表最近 7 天的日期的 table 中的不同 ID。我试过使用子查询:
SELECT DISTINCT id
FROM my_table
WHERE date = '2016-07-14'
AND id NOT IN (
SELECT DISTINCT id
FROM my_table
WHERE date BETWEEN '2016-07-15' AND '2016-07-21'
);
但是,我收到一条错误消息,其中包含 查询中不支持的语言功能(整个错误消息太长 post)。由于我不能在 Hive SQL 中使用这种方法,我在这里有什么选择?
可以使用 LEFT JOIN 完成相同的功能:
SELECT a.ID
FROM
(
SELECT DISTINCT ID
FROM my_table
WHERE date = '2016-07-14'
)a
LEFT JOIN (
SELECT DISTINCT ID
FROM my_table
WHERE date BETWEEN '2016-07-15' AND '2016-07-21'
) s on a.ID=s.ID
WHERE s.ID IS NULL;
我需要使用 Hive 从 table 中提取一组 ID。我要从中提取数据的 table 按日期分区。我需要的是八天前出现在 table 中但不出现在代表最近 7 天的日期的 table 中的不同 ID。我试过使用子查询:
SELECT DISTINCT id
FROM my_table
WHERE date = '2016-07-14'
AND id NOT IN (
SELECT DISTINCT id
FROM my_table
WHERE date BETWEEN '2016-07-15' AND '2016-07-21'
);
但是,我收到一条错误消息,其中包含 查询中不支持的语言功能(整个错误消息太长 post)。由于我不能在 Hive SQL 中使用这种方法,我在这里有什么选择?
可以使用 LEFT JOIN 完成相同的功能:
SELECT a.ID
FROM
(
SELECT DISTINCT ID
FROM my_table
WHERE date = '2016-07-14'
)a
LEFT JOIN (
SELECT DISTINCT ID
FROM my_table
WHERE date BETWEEN '2016-07-15' AND '2016-07-21'
) s on a.ID=s.ID
WHERE s.ID IS NULL;