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