hive:从大表创建小表

3zwjbxry  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(399)

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

noj0wjuj

noj0wjuj1#

此查询将拉出前1m行,并在新表中覆盖它们。

CREATE TABLE new_table_name AS 
  SELECT col1, col2, col3, ....
  FROM original_table 
  WHERE (if you want to put any condition) limit 100000;
sdnqo3pr

sdnqo3pr2#

正如前面提到的,您可能最好使用Hive内置的采样方法。

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

这种语法是在hive0.11中引入的。如果您运行的是较旧版本的hive,则只能使用 PERCENT 像这样的语法。

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

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

ffscu2ro

ffscu2ro3#

可以使用与原始表相同的架构定义新表。
然后使用 INSERT OVERWRITE TABLE <tablename> <select statement> select语句将需要查询原始表,使用limit只能得到1m个结果。

相关问题