4

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

4

3 回答 3

7

正如前面所建议的那样,您可能最好使用 Hive 的内置采样方法

INSERT OVERWRITE TABLE my_table_sample 
SELECT * FROM my_table 
TABLESAMPLE (1m ROWS) t;

此语法是在 Hive 0.11 中引入的。如果您运行的是旧版本的 Hive,您将只能使用PERCENT类似这样的语法。

INSERT OVERWRITE TABLE my_table_sample 
SELECT * FROM my_table 
TABLESAMPLE (1 PERCENT) t;

您可以更改百分比以匹配您特定的样本量要求。

于 2013-06-17T14:46:15.913 回答
1

您可以定义与原始表具有相同架构的新表。

然后使用INSERT OVERWRITE TABLE <tablename> <select statement>

SELECT 语句将需要查询您的原始表,使用 LIMIT 只能获得 1M 的结果。

于 2013-06-14T22:30:42.027 回答
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;
于 2015-07-02T06:46:46.390 回答