<?xml version="1.0"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

  <property>
    <name>lens.driver.hive.connection.class</name>
    <value>org.apache.lens.driver.hive.EmbeddedThriftConnection</value>
    <description>The connection class from HiveDriver to HiveServer. The default is
      an embedded connection which does not require a remote hive server.
      For connecting to a hiveserver end point, remote connection should be used.
      The possible values are org.apache.lens.driver.hive.EmbeddedThriftConnection
      and org.apache.lens.driver.hive.RemoteThriftConnection.
    </description>
  </property>

  <property>
    <name>lens.driver.hive.query.hook.classes</name>
    <value></value>
    <description>The query hook classes for hive driver. By default there are no hooks. To add a hook, you should look
      at the default implementation and from there it'll be easy to derive what value can be added through a new hook.
      Multiple hooks can be provided by providing comma seperated name of classes.
    </description>
  </property>

  <property>
    <name>lens.driver.hive.hs2.connection.expiry.delay</name>
    <value>600000</value>
    <description>The idle time (in milliseconds) for expiring connection from hivedriver to HiveServer2</description>
  </property>

  <!-- Hive server client params -->

  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value></value>
    <description>The host on which hive server is running</description>
  </property>

  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
    <description>The port on which hive server is running</description>
  </property>

  <property>
    <name>hive.server2.thrift.client.retry.limit</name>
    <value>1</value>
    <description>Number of times to retry a Thrift service call upon failure</description>
  </property>

  <property>
    <name>hive.server2.thrift.client.connect.retry.limit</name>
    <value>1</value>
    <description>Number of times to retry a connection to a Thrift hive server</description>
  </property>

  <property>
    <name>hive.server2.thrift.client.retry.delay.seconds</name>
    <value>1</value>
    <description>Number of seconds the client should wait between connection attempts.</description>
  </property>

  <property>
    <name>hive.server.tcp.keepalive</name>
    <value>true</value>
    <description>TCP Keep alive socket option for HiveServer connection</description>
  </property>

  <property>
    <name>hive.server.read.socket.timeout</name>
    <value>10</value>
    <description>Socket timeout for the client connection</description>
  </property>

  <!-- query params -->

  <property>
    <name>lens.cube.query.driver.supported.storages</name>
    <value></value>
    <description>List of comma separated storage names that supported by a driver. If no value is specified, all
      storages are valid
    </description>
  </property>

  <property>
    <name>lens.cube.query.replace.timedim</name>
    <value>true</value>
    <description>Tells whether timedim attribute queried in the time range should be replaced
      with its corresponding partition column name.
    </description>
  </property>

  <property>
    <name>lens.driver.hive.calculate.priority</name>
    <value>true</value>
    <description>Whether priority should be calculated for hive mr jobs or not</description>
  </property>

  <property>
    <name>lens.driver.hive.priority.ranges</name>
    <value>VERY_HIGH,7.0,HIGH,30.0,NORMAL,90,LOW</value>
    <description>Priority Ranges. The numbers are the costs of the query.\
      The cost is calculated based on partition weights and fact weights. The interpretation of the
      default config is: \
      \
      cost \&lt;= 7\ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ Priority = VERY_HIGH \
      7 \&lt; cost \&lt;= 30\ \ \ \ \ \ \ :\ \ \ \ \ Priority = HIGH \
      30 \&lt; cost \&lt;= 90\ \ \ \ \ \ :\ \ \ \ \ Priority = NORMAL \
      90 \&lt; cost\ \ \ \ \ \ \ \ \ \ \ :\ \ \ \ \ Priority = LOW \
      \
      Some perspective wrt default weights and default ranges(1 for hourly, 0.75 for daily, 0.5 for monthly):\
      For exclusively hourly data this translates to VERY_HIGH,7days,HIGH,30days,NORMAL,90days,LOW. \
      FOR exclusively daily data this translates to VERY_HIGH,9days,HIGH,40days,NORMAL,120days,LOW. \
      for exclusively monthly data this translates to VERY_HIGH,never,HIGH,1month,NORMAL,6months,LOW. \
      \
      One use case in range tuning can be that you never want queries to run with VERY_HIGH,
      assuming no other changes, you'll modify the value of this param in hivedriver-site.xml to be
      HIGH,30.0,NORMAL,90,LOW
      \
      via the configs, you can tune both the ranges and partition weights. this would give the end
      user more control.
    </description>
  </property>
  <property>
    <name>lens.driver.hive.cost.calculator.class</name>
    <value>org.apache.lens.cube.query.cost.FactPartitionBasedQueryCostCalculator</value>
    <description>Cost calculator class. By default calculating cost through fact partitions.</description>
  </property>

  <property>
    <name>lens.driver.hive.query.launching.constraint.factories</name>
    <value></value>
    <description>Factories used to instantiate constraints enforced on queries by driver. A query will be launched
      only if all constraints pass. Every Factory should be an implementation of
      org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an implementation of
      org.apache.lens.server.api.query.constraint.QueryLaunchingConstraint.</description>
  </property>

  <property>
    <name>lens.driver.hive.waiting.queries.selection.policy.factories</name>
    <value></value>
    <description>Factories used to instantiate driver specific waiting queries selection policies. Every factory should
    be an implementation of org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an
    implementation of org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy.</description>
  </property>

  <property>
    <name>lens.driver.cost.query.decider.class</name>
    <value>org.apache.lens.server.api.query.cost.RangeBasedQueryCostTypeDecider</value>
    <description>Decider class which looks at ranges passed in config and decides the querycosttype  </description>
  </property>

  <property>
    <name>lens.driver.cost.type.ranges</name>
    <value>LOW,0.0,HIGH</value>
    <description>Cost based Query type mapping</description>
  </property>

</configuration>
