Hive面试问题中的分区

kuhbmx9i  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(400)

1) 如果分区列没有数据,那么当您对其进行查询时,会出现什么错误?
2) 如果某些行没有分区列,那么将如何处理这些行?会有数据丢失吗?
3) 为什么需要用数字列来做bucketing?我们也可以使用字符串列吗?什么是过程,根据什么你会选择扣柱?
4) 内部表详细信息是否也将存储在元存储中?还是只存储外部表的详细信息?
5) 什么类型的查询,只在mapper端运行而不在reducer中运行,反之亦然?

zbdgwd5y

zbdgwd5y1#

简短回答:
1.如果分区列没有数据,那么当您查询该列时,会出现什么错误?
配置单元中的分区列是名为 key=value 里面有数据文件。如果没有数据,则表示不存在分区文件夹,并且表为空,不显示错误,也不返回数据。使用动态分区在分区列中插入null时,分区列中的所有null值(以及不符合字段类型的所有值)都将作为 __HIVE_DEFAULT_PARTITION__ 在这种情况下,如果列类型是数字,则在选择期间将抛出类型转换错误。例如,不能将textwritable转换为intwritable
2.如果某些行没有分区列,那么将如何处理这些行?会有数据丢失吗?
如果“没有”表示为空,那么加载为hive\u default\u分区实际上仍然可以获取数据,没有发生丢失
3.为什么需要用数字列来做bucketing-它不需要是数字,我们可以使用字符串列也吗?对。什么是过程,根据什么你会选择扣列。?
应根据联接/过滤列选择用于bucketing的列。对值进行散列、分布和排序(集群),并在相同的存储桶(文件)中写入相同的散列(在插入覆盖期间)。bucket和columns的数量在ddl表中指定。
bucketed table和bucket map join是一个有点过时的概念,您可以使用distributed by+sort+orc实现相同的功能。这种方法更灵活。
4.内部表详细信息是否也将存储在元存储中?还是只存储外部表的详细信息?
不管是外部的还是管理的。表schema/grants/statistics存储在metastore中。
5.什么类型的查询,只在mapper端运行而不在reducer中运行,反之亦然?
没有聚合的查询、Map联接(当小表适合内存时)、简单列转换(简单列自定义项,如regexp\u replace、split、substr、trim、concat等)、过滤器(在其中)、排序方式(sort by)可以在Map器上执行。
聚合和分析、公共联接、order by、distribute by、udafs在mapper+reducer上执行。

相关问题