hadoop - 为什么 hive 中的CTAS查询没有得到预期的结果?

在这种情况下,我创建了一个包含100行的配置单元表“test”。

当我启动 hive 终端并输入以下SQL

select * from test tablesample(2 percent);

它返回3行数据;

但是当我添加“创建表作为选择”如下所示。
create table sample as select * from test tablesample(2 percent);

我发现表“样本”中有100行。

我不知道为什么

非常感谢。

最佳答案

Documentation表示TABLESAMPLE (n PERCENT)将允许Hive至少获取n%数据大小的数据(请注意,它不一定意味着行数)作为输入。如果我们无法对其进行采样,则MapReduce作业的输入将是整个表/分区。我们在HDFS块级别执行此操作,以便采样粒度为块大小。例如,如果块大小为256MB,即使n%的输入大小仅为100MB,您也会获得256MB的数据。

不幸的是,它不能保证每次获取相同的块时,row_count的总数可能会有所不同。

我建议增加百分比并添加limit n以确保返回n行。或者只是使用limit n:

select * from test tablesample(5 percent) limit 100; --may perform faster

要么
select * from test limit 100;

当然,Limit的效率要比tablesample低,因为Limit在 reducer 上起作用,也许tablesample和limit的组合都可以使性能令人满意。

https://stackoverflow.com/questions/55179754/

相关文章:

docker - docker 容器可以连接到 SRIOV 虚拟功能吗?

sql - 配置单元确定日期重叠的记录

hadoop - 在实际运行oozie工作流之前如何检测错误?

nginx - 在docker中无法将nginx与ghost链接

django - 如果我将我的Elastic Beanstalk应用程序移动为使用Docker,是否

hadoop - HDFS如何存储大于 block 大小的单个数据?

hadoop - reducer 的默认数量

ubuntu - docker登录错误: no such host

dns - 在链接的Docker容器中解析内部DNS

hadoop - Hadoop 2.7.7,无法使用端口8088打开Resource Manager