Hive中有一些参数是系统给提供给用户的,我们可以通过这些参数的设置可以让Hive在不同的模式下工作,或者改变显示的效果。
1.通过set对参数值进行设定,这种设置只能是在本次会话有效,退出Hive就会失效;
hive (default)> set hive.exec.dynamic.partition.mode=nostrict;
hive (default)> INSERT OVERWRITE TABLE emp
> PARTITION(province,city)
> SELECT name,salary,subordinates,deductions,address,province,city
> FROM jimdb.employees;
Query ID = hadoop_20180617101852_4cbca9ef-db37-4910-9061-058142bde778
Total jobs = 3
........
.........
Partition default.emp{province=*, city=taibei} stats: [numFiles=1, numRows=21504, totalSize=1843968, rawDataSize=1822464]
Partition default.emp{province=zhejiang, city=hangzhou} stats: [numFiles=1, numRows=21504, totalSize=1929982, rawDataSize=1908478]
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: 72254860 HDFS Write: 74253520 SUCCESS
Total MapReduce CPU Time Spent: 0 msec
OK
name salary subordinates deductions address province city
Time taken: 10.881 seconds
2. 如果希望永久性的对参数进行设置,那就需要将相关的参数在$HIVE_HOME/conf/hive-site.xml中进行设置
比如我需要设置打开动态分区,并且动态分区模式为strict
<property>
<name>hive.exec.dynamic.partition</name>
<value>true</value>
<description>Whether or not to allow dynamic partitions in DML/DDL.</description>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>strict</value>
<description>
In strict mode, the user must specify at least one static partition
in case the user accidentally overwrites all partitions.
In nonstrict mode all partitions are allowed to be dynamic.
</description>
</property>
在Hive中,进入Hive环境后,Hive有一个默认的库default,用户可以创建新的库名,可以使用CREATE DATABASE XX;
也可以通过select语句查询表数据,但是在默认情况下,Hive无法显示当前到底是处于 哪个库中,虽然可以通过use 库名称进行库的切换,但是也造成了一些不便。
在查询表时,CLI命令行默认是无法显示列名称的,只是显示了数据。这对用户就造成了一些麻烦。
因此可以在$HIVE_HOME/conf/hive-site.xml中进行设置:
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>