<property>
<name>hive.limit.optimize.enable</name>
<value>true</value>
<description>Whether to enable to optimization to trying a smaller subset of data for simple LIMIT first.</description>
</property>
<property>
<name>hive.limit.row.max.size</name>
<value>100000</value>
<description>When trying a smaller subset of data for simple LIMIT, how much size we need to guarantee each row to have at least.</description>
</property>
<property>
<name>hive.limit.optimize.limit.file</name>
<value>10</value>
<description>When trying a smaller subset of data for simple LIMIT, maximum number of files we can sample.</description>
</property>
<property>
<name>hive.limit.optimize.fetch.max</name>
<value>50000</value>
<description>
Maximum number of rows allowed for a smaller subset of data for simple LIMIT, if it is a fetch query.
Insert queries are not restricted by this limit.
</description>
</property>
val SPARK:SparkSession = SparkSession
.builder
.appName("Test")
.master("local[2]")
.config("spark.sql.warehouse",new File("spark-warehouse").getAbsolutePath)
.enableHiveSupport()
.getOrCreate()
val SQL_CONTEXT:SQLContext = SPARK.sqlContext
val res = SQL_CONTEXT.sql("select * from table where condition_a and condition_b limit 10").cache()
4条答案
按热度按时间o2g1uqev1#
您可以使用配置单元的限制优化属性来实现所需的结果
您还可以从配置单元文档中引用这些属性
nxowjjhe2#
你能试试吗
hive.mapred.mode = nonstrict
以及hive.map.aggr = false
除此之外,您还可以尝试按排序和按分发。uwopmtnx3#
因为,这是一个mapreduce方法。它需要在实际返回结果之前等待(即需要先提交结果)。
如果您需要相同的查询结果更快,请注意相同的查询,然后缓存结果以便下次更快地检索。
或者使用spark更快地获取结果。spark在ram中完成大部分计算。还可以使它更快地缓存查询结果。
jutyujz04#
在我看来,配置单元不像hbase,如果您在查询时希望获得类似hbase的速度,那么您将无法在配置单元中获得它。
hive用于处理大量数据的批处理,不像hbase一次只查找一个数据。当您尝试运行配置单元查询时,它将运行mr作业,mr作业将对10亿条记录和10条记录运行完全相同的过程。
因此,当您设置其他答案中提到的一些环境变量时,它可能会更快,但在处理小数据时,您不能期望hbase、rdbms或其他数据库的速度