Hive Bucket-理解 TABLESAMPLE(BUCKET X OUT OF Y)

2023-12-22

大家好,我对 Hive 很陌生,我已经在实际操作中了解了 hadoop 中的存储桶概念,但未能理解以下几行内容。有人可以帮助我吗?

SELECT avg(viewTime)
 FROM page_view TABLESAMPLE(BUCKET 1 OUT OF 32);

TABLESAMPLE 的一般语法是 表样本(桶 x 中的 y)

查询的样本大小约为 1/y。此外,y 需要是创建表时为表指定的桶数的倍数或因子。例如,如果我们将 y 更改为 16,则查询变为

SELECT avg(viewTime)
 FROM page_view TABLESAMPLE(BUCKET 1 OUT OF 16);

那么样本大小大约包括每 16 个用户中的 1 个(因为存储桶列是 userid)。该表仍然有 32 个存储桶,但 Hive 尝试通过一起处理存储桶 1 和 17 来满足此查询。另一方面,如果 y 指定为 64,Hive 将对一个桶中一半的数据执行查询。 x的值仅用于选择使用哪个桶。在真正随机采样的情况下,其值应该不重要。


哪一部分你不明白?

当您创建表并使用它存储桶时clustered by子句分为 32 个存储桶(作为示例),hive 使用确定性哈希函数将数据存储到 32 个存储桶中。然后当你使用TABLESAMPLE(BUCKET x OUT OF y),hive 将您的存储桶分为几组y桶,然后挑选x每组的第 'th 个桶。例如:

  • 如果你使用TABLESAMPLE(BUCKET 6 OUT OF 8),hive 会将您的 32 个存储桶分成 8 个存储桶组,从而形成 4 组,每组 8 个存储桶,然后选择每组中的第 6 个存储桶,因此选择存储桶 6、14、22、30。

  • 如果你使用TABLESAMPLE(BUCKET 23 OUT OF 32),hive 会将您的 32 个存储桶分成 32 个组,从而得到一组 32 个存储桶,然后选择第 23 个存储桶作为您的结果。

  • 如果你使用TABLESAMPLE(BUCKET 3 OUT OF 64),hive 会将 32 个桶分成 64 个桶组,从而得到一组 64 个“半桶”,然后选择与第 3 个满桶相对应的半桶。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive Bucket-理解 TABLESAMPLE(BUCKET X OUT OF Y) 的相关文章

  • 覆盖hadoop中的log4j.properties

    如何覆盖hadoop中的默认log4j properties 如果我设置 hadoop root logger WARN console 它不会在控制台上打印日志 而我想要的是它不应该在日志文件中打印 INFO 我在 jar 中添加了一个
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts
  • Hive NVL 不适用于列的日期类型 - NullpointerException

    我正在使用 HDFS 上的 MapR Hive 发行版并面临以下问题 如果表的列类型是 日期 类型 则NVL https cwiki apache org confluence display Hive LanguageManual UDF
  • PyMongo 中的 MapReduce

    我的蒙戈收藏 Impressions具有以下格式的文档 uid 10 impressions pos 6 id 123 service furniture pos 0 id 128 service electronics pos
  • 在 RavenDB 中创建更多类似的内容

    我的域中有这些文档 public class Article public string Id get set some other properties public IList
  • 使用 Java API 在 Hadoop 中移动文件?

    我想使用 Java API 在 HDFS 中移动文件 我想不出办法做到这一点 FileSystem 类似乎只想允许在本地文件系统之间移动 但我想将它们保留在 HDFS 中并将它们移动到那里 我错过了一些基本的东西吗 我能想到的唯一方法是从输
  • MongoDB/PyMongo:如何在 Map 函数中使用点表示法?

    我正在尝试计算每个邮政编码中找到的记录数 在我的 MongoDB 中 嵌入了邮政编码 使用点表示法 它位于 a res z a 代表地址 res 代表住宅 z 代表邮政编码 例如 这工作得很好 db NY count a res z 141
  • 更改spark_temporary目录路径

    是否可以更改 temporarySpark在写入之前保存临时文件的目录 特别是 由于我正在编写表的单个分区 因此我希望临时文件夹位于分区文件夹内 是否可以 由于其实现原因 无法使用默认的 FileOutputCommiter FileOut
  • 为什么 CouchDB 归约函数接收“键”作为参数

    使用 CouchDB 减少功能 function keys values rereduce 这被称为这样 reduce key1 id1 key2 id2 key3 id3 value1 value2 value3 false 问题1 将键
  • 为 Spark Thrift 服务器提供仓库目录的路径

    我已经设置了 Spark 集群 并且成功通过 Spark SQL 连接器连接 Tableau 我从 Spark shell 创建了表 并使用 saveAsTable 如何访问从 Tableau 保存的表 启动spark thrift服务器时
  • 使用 MySQL 作为元存储从 HIVE 查询元数据

    我正在寻找一种使用 HiveQL 命令查询 HIVE 数据元数据的方法 我配置了一个 MySQL 元存储 但需要通过 HIVE 命令查询元数据 因为然后我想通过 ODBC 连接到 HIVE 系统来访问数据 要从 Hive 查看它们 必须使用
  • Spark/Yarn:HDFS 上不存在文件

    我在 AWS 上设置了 Hadoop Yarn 集群 有 1 个主服务器和 3 个从服务器 我已经验证我有 3 个活动节点在端口 50070 和 8088 上运行 我在客户端部署模式下测试了 Spark 作业 一切正常 当我尝试使用 Spa
  • Mongodb 聚合数组中的子文档

    我正在使用 mongodb 作为后端实现一个小型应用程序 在此应用程序中 我有一个数据结构 其中文档将包含一个包含子文档数组的字段 我使用以下用例作为基础 http docs mongodb org manual use cases inv
  • MapReduce 中 1 个任务的减速器数量

    在典型的 MapReduce 设置 如 Hadoop 中 1 个任务使用多少个减速器 例如计算单词数 我对 Google MapReduce 的理解意味着只涉及 1 个减速器 那是对的吗 例如 单词计数会将输入分为 N 个块 并且 N 个
  • Hadoop fs 查找块大小?

    在 Hadoop fs 中如何查找特定文件的块大小 我主要对命令行感兴趣 例如 hadoop fs hdfs fs1 data 但看起来这并不存在 有Java解决方案吗 The fsck其他答案中的命令列出了块并允许您查看块的数量 但是 要
  • 如何解决 java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 2?

    我正在尝试在 Hadoop 环境中执行 NLTK 以下是我用于执行的命令 bin hadoop jar HADOOP HOME contrib streaming hadoop streaming 1 0 4 jar input user
  • Hive:为现有文件夹结构添加分区

    我在 HDFS 中有一个文件夹结构 如下所示 但是 实际上没有使用以下命令在表上创建分区ALTER TABLE ADD PARTITION命令 即使文件夹结构的设置就像表有分区一样 如何自动将所有分区添加到Hive表中 Hive 1 0 外
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 缺少依赖项 hive-builtins 会导致 Oozie 构建失败,错误代码为 410

    我尝试从源代码构建 oozie 但安装失败 我想安装 oozie 并热切地等待使用它 我在这个阶段失败了 当我从 oozie 3 3 3 目录给出 cmd 时 bin mkdistro sh DskipTests 我收到这个错误 INFO
  • HIVE - 使用WITH CLAUSE插入覆盖

    我有一个生成的查询以WITH子句开头 当我在控制台中运行它时 当我尝试使用INSERT OVERWRITE运行查询以将输出加载到单独的配置单元表中时 该查询工作正常 INSERT OVERWRITE TABLE proc db master

随机推荐