准备
准备阶段要创建数据库、创建表、导入数据,内容较多所有单独写了一篇《CLI和Beeline命令行使用举例(准备阶段)》
【首先要启动hdfs,由于已将 Hive 的 bin 目录配置到环境变量,直接使用 hive 命令即可】
1. Help
【进入Hive CLI之前】使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助,显示如下:
[root@tcloud ~]# hive -H
Hive Session ID = c4d07f3d-816f-4c1b-85e9-6c8ce2ed4c2a
usage: hive
-d,--define <key=value> Variable substitution to apply to Hive
commands. e.g. -d A=B or --define A=B
--database <databasename> Specify the database to use
-e <quoted-query-string> SQL from command line
-f <filename> SQL from files
-H,--help Print help information
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable substitution to apply to Hive
commands. e.g. --hivevar A=B
-i <filename> Initialization SQL file
-S,--silent Silent mode in interactive shell
-v,--verbose Verbose mode (echo executed SQL to the
console)
备注翻译版:
Hive Session ID = c4d07f3d-816f-4c1b-85e9-6c8ce2ed4c2a
usage: hive
-d,--define <key=value> # 定义用户自定义变量
--database <databasename> # 指定使用的数据库
-e <quoted-query-string> # 执行command line 里的 SQL
-f <filename> # 执行 SQL 脚本文件
-H,--help # 打印帮助信息
--hiveconf <property=value> # 使用自定义的配置
--hivevar <key=value> # 定义用户自定义变量
-i <filename> # 在进入交互模式之前运行初始化脚本
-S,--silent # 静默模式
-v,--verbose # 详细模式【会显示执行的SQL】
2. 交互式命令行
【直接输入 hive 不加任何参数即可进入 Hive CLI 交互式命令行】
[root@tcloud ~]# hive
Hive Session ID = 6a9fba3d-c9cc-4439-8125-a6bc6b349bb3
# 这里省略部分信息
Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true
Hive Session ID = 90d75c12-b292-467f-b860-7bd67ab454b6
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive>
3. 执行SQL命令
在【不进入交互式命令行】的情况下,可以使用 hive -e 执行 SQL 命令。
# 【这里不再贴出hive的日志】
[root@tcloud ~]# hive -e 'select * from hive_test.word_count';
Hive Session ID = f2b850c9-47d4-4076-b92a-7cb1632291e0
spark 3
hive 3
hadoop 2
kafka 1
hbase 1
Time taken: 12.023 seconds, Fetched: 5 row(s)
4. 执行SQL脚本文件
在【不进入交互式命令行】的情况下执行脚本文件,用于执行的脚本可以在本地文件系统,也可以在 HDFS 上,这里都进行测试:
-- 其中 hive_test.sql 内容如下
select * from hive_test.word_count;
本地文件系统:
# 【这里不再贴出hive的日志和查询结果】
[root@tcloud ~]# hive -f /home/hive/testFile/hive_test.sql;
HDFS文件系统:
# 准备阶段已将文件上传到hdfs 【这里不再贴出hive的日志和查询结果】
[root@tcloud ~]# hive -f hdfs://tcloud:8020/tmp/hive/test/hive_test.sql;
5. 命令行配置Hive变量
可以使用 --hiveconf 设置 Hive 运行时的变量。
# 【这里不再贴出hive的日志和查询结果】
[root@tcloud ~]# hive -e 'select * from hive_test.word_count' \
--hiveconf hive.exec.scratchdir=/tmp/hive/test/hive_scratch \
--hiveconf mapred.reduce.tasks=4;
hive.exec.scratchdir:指定 HDFS 上目录位置,用于存储不同 map/reduce 阶段的执行计划和这些阶段的中间输出结果。
6. 文件配置启动变量
hive-init.conf 的内容如下:
# hive.exec.mode.local.auto 默认值为 false 这里设置为 true 代表开启本地模式
set hive.exec.mode.local.auto = true;
# 使用 -i 可以在进入交互模式之前运行初始化脚本 相当于指定配置文件启动
[root@tcloud ~]# hive -i /home/hive/testFile/hive_init.conf;
验证:
# 可以在交互模式下使用 set; 查询 hive 全部的配置信息
# 未使用 /home/hive/testFile/hive_init.conf 启动的CLI
hive> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=false
# 使用 /home/hive/testFile/hive_init.conf 启动的CLI
hive> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=true
7. 用户自定义变量
--define 和 --hivevar 在功能上是等价的,都是用来实现自定义变量,这里给出一个示例:
# 定义变量:
[root@tcloud ~]# hive --define tableName=word_count --hivevar selectField=word;
# 在查询中引用自定义变量 以下三条语句等价
# 其实就是 ${variableName} 与 ${hivevar:variableName} 等价
hive > select ${selectField} from ${tableName};
hive > select ${selectField} from ${hivevar:tableName};
hive > select ${hivevar:selectField} from ${hivevar:tableName};