我目前有一个有15亿行的配置单元表。我想创建一个较小的表(使用相同的表模式),其中包含来自原始表的大约100万行。理想情况下,新行将从原始表中随机抽样,但获取原始表的顶部1m或底部1m也可以。我该怎么做?
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;
sdnqo3pr2#
正如前面提到的,您可能最好使用Hive内置的采样方法。
INSERT OVERWRITE TABLE my_table_sample SELECT * FROM my_table TABLESAMPLE (1m ROWS) t;
这种语法是在hive0.11中引入的。如果您运行的是较旧版本的hive,则只能使用 PERCENT 像这样的语法。
PERCENT
INSERT OVERWRITE TABLE my_table_sample SELECT * FROM my_table TABLESAMPLE (1 PERCENT) t;
您可以更改百分比以符合您的特定样本量要求。
ffscu2ro3#
可以使用与原始表相同的架构定义新表。然后使用 INSERT OVERWRITE TABLE <tablename> <select statement> select语句将需要查询原始表,使用limit只能得到1m个结果。
INSERT OVERWRITE TABLE <tablename> <select statement>
3条答案
按热度按时间noj0wjuj1#
此查询将拉出前1m行,并在新表中覆盖它们。
sdnqo3pr2#
正如前面提到的,您可能最好使用Hive内置的采样方法。
这种语法是在hive0.11中引入的。如果您运行的是较旧版本的hive,则只能使用
PERCENT
像这样的语法。您可以更改百分比以符合您的特定样本量要求。
ffscu2ro3#
可以使用与原始表相同的架构定义新表。
然后使用
INSERT OVERWRITE TABLE <tablename> <select statement>
select语句将需要查询原始表,使用limit只能得到1m个结果。