首页 > 解决方案 > 使用 hive 的随机样本

问题描述

我正在尝试从一张大桌子中获取 5% 的随机样本。

create table database.five_percent_table as select * from (select distinct id from database.customer_list) where rand() <= 0.05 and month = 06;

编译语句时出错:FAILED: ParseException line 3:0 cannot identify input near 'where' 'rand' '(' in subquery source

我无法弄清楚原因。非常感谢这里的任何帮助。提前致谢。

标签: hive

解决方案


CREATE TABLE database.five_percent_table AS
SELECT * FROM (
    SELECT distinct id
    FROM database.customer_list
) alias
WHERE rand() <= 0.05 AND month = 06;

从文档:

Hive 仅在 FROM 子句中支持子查询(通过 Hive 0.12)。必须为子查询指定名称,因为 FROM 子句中的每个表都必须有名称。子查询选择列表中的列必须具有唯一名称。子查询选择列表中的列在外部查询中可用,就像表的列一样。子查询也可以是带有 UNION 的查询表达式。Hive 支持任意级别的子查询。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries


推荐阅读