Hive:从大表创建较小的表

时间:2013-06-14 22:07:25

标签: hadoop hive

我目前有一个拥有15亿行的Hive表。我想创建一个较小的表(使用相同的表模式),原始表中有大约100万行。理想情况下,新行将从原始表中随机采样,但是获取原始表的前1M或下1M也是可以的。我该怎么做?

3 个答案:

答案 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;