我目前有一个拥有15亿行的Hive表。我想创建一个较小的表(使用相同的表模式),原始表中有大约100万行。理想情况下,新行将从原始表中随机采样,但是获取原始表的前1M或下1M也是可以的。我该怎么做?
答案 0 :(得分:7)
正如前面提到的climbage,您最好使用Hive的built-in sampling methods。
INSERT OVERWRITE TABLE my_table_sample
SELECT * FROM my_table
TABLESAMPLE (1m ROWS) t;
此语法为introduced in Hive 0.11。如果您运行的是旧版本的Hive,那么您将仅限于使用PERCENT
语法。
INSERT OVERWRITE TABLE my_table_sample
SELECT * FROM my_table
TABLESAMPLE (1 PERCENT) t;
您可以更改百分比以符合特定样本量要求。
答案 1 :(得分:1)
您可以使用与原始表相同的模式定义新表。
然后使用INSERT OVERWRITE TABLE <tablename> <select statement>
SELECT语句需要查询原始表,使用LIMIT只能获得1M结果。
答案 2 :(得分:1)
此查询将拉出前1M行,并在新表中覆盖它们。
CREATE TABLE new_table_name AS
SELECT col1, col2, col3, ....
FROM original_table
WHERE (if you want to put any condition) limit 100000;