Hive官方使用手册——新Hive CLI(Beeline CLI)

本文详述了HiveServer2的新CLI工具Beeline,包括Beeline的命令行示例、命令、选项及输出格式。此外,还介绍了Beeline与Hive的JDBC连接、日志、取消查询、后台查询以及与其他工具的集成。Beeline支持多种输出格式,如table、vertical、xmlattr、xmlelements等,并提供了连接URL、连接选项和数据类型的相关信息。
摘要由CSDN通过智能技术生成

本文为自己翻译的译文,原文地址:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients


这个页面描述了HiveServer2支持的不同客户端。其它的HiveServer2文档包含:

Version

Introduced in Hive version 0.11. See HIVE-2935.

Beeline – Command Line Shell Beeline-命令行shell

HiveServer2 支持一个命令行shellBeeline。它是一种基于SQLline CLI 的JDBC客户端(http://sqlline.sourceforge.net/)。SQLLine的细节文档连接,它同样也适用于Beeline。

使用Beeline代替Hive CLI实现

同时支持嵌入模式和远程模式。在嵌入模式中,它运行一个嵌入的Hive(类似旧的Hive CLI)然而远程模式是通过Thrift连接一个分离的HiveServer2进程。从Hive 0.1.4版本开始,Beeline已经被HiveServer2使用,它也会为它执行的查询从HiveServer2打印日志信息到STDERR。远程HiveServer2模式是Hive产品使用的推荐模式,它更加安全并且不需要直接为用户对HDFS/metastore进行赋权。

在远程模式中HiveServer2只接受认证的Thrift 连接请求甚至在HTTP模式中也一样,信息主体班号Thrift payload

Beeline 样例

% bin/beeline 
Hive version 0.11.0-SNAPSHOT by Apache
beeline> !connect jdbc:hive2://localhost:10000 scott tiger
!connect jdbc:hive2://localhost:10000 scott tiger 
Connecting to jdbc:hive2://localhost:10000
Connected to: Hive (version 0.10.0)
Driver: Hive (version 0.10.0-SNAPSHOT)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> show tables;
show tables;
+-------------------+
|     tab_name      |
+-------------------+
| primitives        |
| src               |
| src1              |
| src_json          |
| src_sequencefile  |
| src_thrift        |
| srcbucket         |
| srcbucket2        |
| srcpart           |
+-------------------+
9 rows selected (1.079 seconds)

 

 你也可以在命令行上指定连接参数。这意味着你能够从你的UNIX Shell history中发现连接时使用的命令。

% beeline -u jdbc:hive2://localhost:10000/default -n scott -w password_file
Hive version 0.11.0-SNAPSHOT by Apache

Connecting to jdbc:hive2://localhost:10000/default

Beeline with NoSASL connection

如果你喜欢通过NOSASL模式建立连接,你必须明确的指定认证模式。:

% bin/beeline
beeline> !connect jdbc:hive2://<host>:<port>/<db>;auth=noSasl hiveuser pass 

Beeline Commands

Command

Description

!<SQLLine command>

SQLLine命令清单请访问http://sqlline.sourceforge.net/

样例:使用 !quit 退出Beeline客户端。

!delimiter

设置在Beeline中写查询的界定符。允许使用多字符界定符,但是引号,斜杠和--是不允许的。默认是分号;

用例: !delimiter $$

Version: 3.0.0 (HIVE-10865)

Beeline Hive Commands

当使用HiveJDBC驱动时Hvie 自带的命令(和Hive CLI 命令行)也能在Beeline中运行,.

使用分号";"来结束命令,脚本中可以用"--"作为前缀来标识命令。

命令

描述

reset

重设配置为默认值。

set <key>=<value>

为特定的配置变量(key)设置值。
注:如果你们拼写错了变量名,CLI将不会提示错误。

set

打印一个被用户或者Hive重写的配置变量清单。

set -v

打印所有的Hadoop和Hive的配置变量。

add FILE[S] <filepath> <filepath>* 
add JAR[S] <filepath> <filepath>* 
add ARCHIVE[S] <filepath> <filepath>*

增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中。查阅Hive Resources获取更多信息。

add FILE[S] <ivyurl> <ivyurl>* 
add JAR[S] <ivyurl> <ivyurl>* 
add ARCHIVE[S] <ivyurl> <ivyurl>*
自Hive 1.2.0起,增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中使用类似ivy://group:module:version?query_string的lvy URL。查阅Hive Resources获取更多信息。

list FILE[S] 
list JAR[S] 
list ARCHIVE[S]

列出已经增加到分布式缓存的资源。查阅Hive Resources获取更多信息(As of Hive 0.14.0: HIVE-7592)。

list FILE[S] <filepath>* 
list JAR[S] <filepath>* 
list ARCHIVE[S] <filepath>*

检查是否给定的资源已经被添加到分布式缓存中。查阅Hive Resources获取更多信息。

delete FILE[S] <filepath>* 
delete JAR[S] <filepath>* 
delete ARCHIVE[S] <filepath>*

移除分布式缓存中的一些资源。

delete FILE[S] <ivyurl> <ivyurl>* 
delete JAR[S] <ivyurl> <ivyurl>* 
delete ARCHIVE[S] <ivyurl> <ivyurl>*

Hive 1.2.0起,移除通过<ivyurl> 添加到分布式缓存中的资源。查阅Hive Resources获取更多信息。

reload 从Hive 0.14.0起,通过配置参数hive.reloadable.aux.jars.path(不需要重启HiveServer2)指定路径使HiveServer2 感知到任意jar包的变化。这里的变化包括增加,删除,或者更新jar包。

dfs <dfs command>

通过Hive shell执行一个dfs命令。

<query string>

执行一个Hive查询语句并且输出标准输出。

Beeline 命令行选项

Beeline CLI支持以下这些命令行选项:

选项

描述

-u <database URL>

用于JDBC URL连接。

用例:beeline -u db_URL

-r

重新连接到最近使用过的URL(如果用户有预先使过的用的,用!connect生成URL,用!save 生成beeline.properties.file)。

用例: beeline -r  

Version: 2.1.0 (HIVE-13670)

-n <username>

连接时使用的用户名。

用例: beeline -n valid_user

-p <password>

连接时使用的密码。

用例: beeline -p valid_password

可选的密码模式:

从Hive 2.2.0开始参数-p选项是可选的。

用例 : beeline -p [valid_password]

如果密码不是在-p之后提供的,Beeline将在初始化连接时提示输入密码。当密码提供后Beeline会用它来初始化连接而不提示。

-d <driver class>

配置使用的驱动类

用例: beeline -d driver_class

-e <query>

应该执行的查询。查询语句两端用单引号和双引号。这个选项被使用多次。

用例: beeline -e "query_string"

支持运行复杂的SQL语句,在一个语句中通过使用分号分隔。 (HIVE-9877)
Bug fix (null pointer exception): 0.13.0 (HIVE-5765)
Bug fix (--headerInterval not honored): 0.14.0 (HIVE-7647)
Bug fix (running -e in background): 1.3.0 and 2.0.0 (HIVE-6758); workaround available for earlier versions 

-f <file>

需要被执行的脚本文件。

用例: beeline -f filepath

Version: 0.12.0 (HIVE-4268)
注:如果脚本里面包含tabs,版本0.12.0中查询编译失败,这个bug已经在0.13.0版本修复了。 (HIVE-6359).
Bug fix (running -f in background): 1.3.0 and 2.0.0 (HIVE-6758)workaround available for earlier versions 

-i (or) --init <file or files>

初始化需要的初始文件。

用例: beeline -i /tmp/initfile

单个文件:

Version: 0.14.0 (HIVE-6561)

多个文件:

Version: 2.1.0 (HIVE-11336)

-w (or) --password-file <password file>

从文件中读取密码。

Version: 1.2.0 (HIVE-7175)

-a (or) --authType <auth type>

jdbc的认证类型是一个身份认证属性。

Version: 0.13.0 (HIVE-5155)

--property-file <file>

读取配置属性的文件

用例: beeline --property-file /tmp/a

Version: 2.2.0 (HIVE-13964)

--hiveconf property=value

为给定的配置属性赋值。 在hive.conf.restricted.list列表中的属性不能通过hiveconf的方式重置。 (see Restricted List and Whitelist).

用例: beeline --hiveconf prop1=value1

Version: 0.13.0 (HIVE-6173)

--hivevar name=value

Hive的变量名和变量值。这是一个Hive指定的设置,在这变量能够在会话级别被设置和被Hive命令和查询引用。

用例: beeline --hivevar var1=value1

--color=[true/false]

控制颜色是否被用来展示。默认是false

用例: beeline --color=true

(不支持分隔的值输出方式。See HIVE-9770)

--showHeader=[true/false]

展示列名是否在查询结果中。默认是true。

用例: beeline --showHeader=false

--headerInterval=ROWS

当输出为表格时,重新显示列头时他们之间的间隔,用行数计算。默认值为100

用例: beeline --headerInterval=50

(不支持分隔的值输出方式。See HIVE-9770)

--fastConnect=[true/false]

连接时,跳过为HiveQL语法的tab键自动补全功能而构建所有表和列的清单,默认为true不构建该列表。

用例: beeline --fastConnect=false

--autoCommit=[true/false]

允许或者禁止自动事务执行。默认是false

用例: beeline --autoCommit=true

--verbose=[true/false]

展示冗长的报错信息和调试信息(true)或者不展示(false),默认是false

用例: beeline --verbose=true

--showWarnings=[true/false]

Default is false.连接时,在执行任意HiveQL命令后展示警告信息。默认是false。

用例: beeline --showWarnings=true

--showDbInPrompt=[true/false]

在提示符里面展示当前数据库名字。默认是false。

用例: beeline --showDbInPrompt=true

Version: 2.2.0 (HIVE-14123)

--showNestedErrs=[true/false]

展示内部错误,默认是false。

用例: beeline --showNestedErrs=true

--numberFormat=[pattern]

用一个小数格式的模板来格式化数字。

用例: beeline --numberFormat="#,###,##0.00"

--force=[true/false]

出错后继续运行脚本(true),或者不运行(false)。默认是false。

用例: beeline--force=true

--maxWidth=MAXWIDTH

当输出格式是表格时,在截断数据前展示的最大宽度。默认是查询时的终端的当前宽度,然后回到80。

用例: beeline --maxWidth=150

--maxColumnWidth=MAXCOLWIDTH

当输出是表格时,最大列宽,Hive 2.2.0以后默认是50,之前的版本是15。

用例: beeline --maxColumnWidth=25

--silent=[true/false]

是(true)否(false)减少展示的信息量。它也会停止展示HiveServer2(Hive 0.14及之后的版本)的查询和命令(Hive 1.2.0及之后的版本)日志信息,默认是false。

用例: beeline --silent=true

--autosave=[true/false]

自动保存参数选择(true)或者不保存(false)。默认是false。

用例: beeline --autosave=true

--outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2]

结果展示的模式。默认是表格。查阅下方的Separated-Value Output Formats获取更多信息和推荐选项。

用例: beeline --outputformat=tsv

版本号: dsv/csv2/tsv2 added in 0.14.0 (HIVE-8615)

--truncateTable=[true/false]

如果是true,那么当表格超出终端显示宽度时,截断表格的列在终端上展示。

版本号: 0.14.0 (HIVE-6928)

--delimiterForDSV= DELIMITER

用于输出格式中划分值的界定符。默认是‘|’

版本号: 0.14.0 (HIVE-7390)

--isolation=LEVEL

设置事务隔离级别为TRANSACTION_READ_COMMITTED或者TRANSACTION_SERIALIZABLE. 
可以查阅Java连接文档中“Field Detail”那一章节。

用例: beeline --isolation=TRANSACTION_SERIALIZABLE

--nullemptystring=[true/false]

使用历史的打印空字符null的形式(true)还是使用当前打印空值的方式(false),默认是false。

用例: beeline --nullemptystring=false

Version: 0.13.0 (HIVE-4485)

--incremental=[true/false]

从Hive 2.3版本往后默认是true,在它之前是默认为false。当设置为false时,为了最佳的展示列宽,完整的结果集会在展示之前被收集然后缓存起来。当设置为true时,结果集一旦被抓取到就会立即展示, 为了在展示列的填充额外消耗更少的延迟和内存。当你在客户端遭遇一个内存溢出时,推荐设置--incremental=true (因为抓取到的结果集非常大)。

--incrementalBufferRows=NUMROWS

当打印行到标准输出时,保存在缓存中的行数,默认是1000。只有当 --incremental=true 和 --outputformat=table才适用。

用例: beeline --incrementalBufferRows=1000

Version: 2.3.0 (HIVE-14170)

--maxHistoryRows=NUMROWS

存储Beeline 历史记录的最大行数。

Version: 2.3.0 (HIVE-15166)

--delimiter=;

设置Beeline的查询语句分隔符。允许用多个字符的分隔符,但是引号,斜杠和--是不允许的,默认是分号;

用例: beeline --delimiter=$$

Version: 3.0.0 (HIVE-10865)

--convertBinaryArrayToString=[true/false]

展示二进制列数据为字符串或者位矩阵。

 

用例: beeline --convertBinaryArrayToString=true

 

Version: 3.0.0 (HIVE-14786)

--help

展示一个帮助信息。

用例: beeline --help

输出格式

在Beeline中,结果可以被展示位多种格式。格式可以在 outputformat 参数中设置。

下面是支持的输出格式:

table

结果会被展示位一个表格。结果中行对应表中的一行,每行使用分隔符将不同列的取值分开。这是默认的格式

  Example
vertical

结果集中的每行被展示位一个Key-value格式的块,其中key是列名。

  Example
xmlattr

结果被展示为一个XML文件的格式,其中每行结果对应XML中的元素。结果中一行的取值对应结果元素中不同属性,每个属性的名字对应列名。

  Example
xmlelements

结果被展示为一个XML格式,其中每行就是XML中的一个元素“result”。每行的取值就是其子元素。

  Example
Separated-Value Output Formats

一行的取值被不同的分隔符分开。
有五种 separated-value 输出格式可用:csv, tsv, csv2, tsv2 and dsv.

csv2, tsv2, dsv

从 Hive 0.14 开始引入的SV输出格式包括:dsv,csv2和tsv2。
这三格式只是数据cell之间使用了不同的分隔符,csv2使用的是逗号,tsv2使用的是tab空格,dsv是可配置的。

对于dsv格式,分隔符可以通过用参数 delimiterForDSV 进行设置,默认是 '|'。
这里是支持单个字符的分隔符的。

  Example
Quoting in csv2, tsv2 and dsv Formats

如果引号没被废弃,一个值包含特殊符号(例如分隔符或者双引号)或者跨越多行需要用双引号包含起来。
内含双引号是通过一个前置双引号进行转义。

可以通过设置系统变量 disable.quoting.for.sv 为true来禁用引号。 
如果引号被禁用, 那么双引号不用来包围值(甚至他们包含特殊字符)和内嵌式双引号是无法避免的。
默认引号是禁用的。

  Example
csv, tsv

csv,tsv是两种不同的格式只是值之间的分隔符不同而已,csv是逗号,tsv是tab空格。
数值总是被单引号包围,即使引号通过系统变量sable.quoting.for.sv 被禁用了。
这些输出格式无法避免内含单引号的情况。
请注意这些格式都是被弃用的,只是为维护向后的兼容性。

  Example

HiveServer2 日志

从Hive 0.14.0开始,HiveServer2操作日志是可以通过Beeline客户端获得的。以下参数可以配置日志: 

 HIVE-11488 (Hive 2.0.0) 增加了对HiveServer2日志文件的日志查询ID和会话ID的支持。启用它,可以编辑、增加%X{queryId} 和 %X{sessionId} 到日志配置文件的格式模式字符串.

取消查询

如果有一个查询正在运行,同时用户输入了 CTRL+C 在Beeline shell界面, 那么Beeline进程将会尝试取消查询并且关闭到HiveServer2的Socket连接。这个行为只有当设置 hive.server2.close.session.on.disconnect 为 true 才会被启用。从Hive 2.2.0 (HIVE-15626)开始Beeline不再推出命令行窗口当用户输出了 CTRL+C取消了当前正在运行的查询。 如果用户想要退出命令行窗口,用户需要在查询被取消后再按一次CTRL+C 。然而,没有正在运行的查询时,第一次按的 CTRL+C 将会退出Beeline 窗口。这个行为类似于Hive CLI对CTRL+C的处理方式。

!quit 是推荐的退出Beeline窗口的命令

终端脚本里的后台查询

Beeline能够在不连接批处理终端的情况下使用nohup和disown命令自动运行脚本。

一些版本的Beeline客户端可能需要一个工作区来支持nohup命令很好的将进程放进后台运行而不停止它。See HIVE-11717HIVE-6758.

以下的环境变量可以被更新:

export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal"

使用nohup和&将会把进程放进后台并允许终端断开连接而Beeline进程持续运行。

nohup beeline --silent=true --showHeader=true --outputformat=dsv -f query.hql </dev/null > /tmp/output.log 2> /tmp/error.log &

JDBC

Hive HiveServer2 有一个JDBC驱动。它支持嵌入式的和远程连接HiveServer2。远程HiveServer2模式是推荐模式,它更加安全而且不需要直接的HDFS或者元数据的用户使用权限。

连接 URLs

连接 URL 格式

HiveServer2 URL 是一个类似下面语法的字符串:

jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;initFile=<file>;sess_var_list?hive_conf_list#hive_var_list

where

  • <host1>:<port1>,<host2>:<port2> 是一个服务实例或者一个用逗号分隔的服务实例列表(动态服务发现启用)。如果为空,将会使用嵌入的服务器。
  • dbName 初始化数据库的名称。
  • <file> 脚本文件的路径 (Hive 2.2.0 and later). 这里的脚本是SQL脚本,它将会在连接建立后被执行。此参数可以为空。
  • sess_var_list 是一个以分号分隔的列表,列表里面是会话变量的key=value对 (e.g., user=foo;password=bar).
  • hive_conf_list 是一个以分号分隔的列表,列表里面是当前会话的Hive配置变量的key=value对。
  • hive_var_list 是一个以分号分隔的列表,列表里面是当前会话的Hive变量的key=value对。
1. HIVE结构 Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数 据提取转化加载 (ETL),这是一种可以存储、 查询和分析存储在 Hadoop 中的大规模数据的 机制。 Hive 定义了简单的类 SQL 查询语言,称为 QL,它允许熟悉 SQL 的用户查询数据。 同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理 内建的 mapper 和 reducer 无法完成的复杂的分析工作。 1.1HIVE 架构 Hive 的结构可以分为以下几部分: 用户接口:包括 CLI, Client, WUI 元数据存储。通常是存储在关系数据库如 mysql, derby 中 6 解释器、编译器、优化器、执行器 Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算 1、 用户接口主要有三个: CLIClient 和 WUI。其中最常用的是 CLICli 启动的时候, 会同时启动一个 Hive 副本。 Client 是 Hive 的客户端,用户连接至 Hive Server 。 在启动 Client 模式的时候, 需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server 。 WUI 是通过浏览器访问 Hive 。 2、 Hive 将元数据存储在数据库中,如 mysql 、 derby 。 Hive 中的元数据包括表的名字, 表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 3、 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及 查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。 4、 Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比 如 select * from tbl 不会生成 MapRedcue 任务)。 1.2Hive 和 Hadoop 关系 Hive 构建在 Hadoop 之上, HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任 务,如: select * from table ) Hadoop和 Hive 都是用 UTF-8 编码的 7 1.3Hive 和普通关系数据库的异同 Hive RDBMS 查询语言 HQL SQL 数据存储 HDFS Raw Device or Local FS 索引 无 有 执行 MapReduce Excutor 执行延迟 高 低 处理数据规模 大 小 1. 查询语言。由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计 了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开 发。 2. 数据存储位置。 Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中 的。而数据库则可以将数据保存在块设备或者本地文件系统中。 3. 数据格式。 Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数 据格式需要指定三个属性:列分隔符(通常为空格、” t ”、” x001″)、行分隔符 (” n”)以及读取文件数据的方法( Hive 中默认有三个文件格式 TextFile , SequenceFile 以及 RCFile )。由于在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换,因此, Hive 在加载的过程中不会对数据本身进行任何修 改,而只是将数据内容复制或者移动到相应的 HDFS 目录中。而在数据库中,不同的数 据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储, 因此,数据库加载数据的过程会比较耗时。 4. 数据更。由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。 因此, Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。 而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO ... VALUES 添加数据,使用 UPDATE ... SET 修改数据。 5. 索引。之前已经说过, Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会 对数据进行扫描,因此也没有对数据中的某些 Key 建立索引。 Hive 要访问数据中满足 条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce 的引 入, Hive 可以并行访问数据,因此即使没有索引,对于大数据量的访问, Hive 仍然 可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特 定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较 高,决定了 Hive 不适合在线数据查询。 6. 执行。 Hive 中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的(类似 select * from tbl 的查询不需要 MapReduce)。而数据库通常有自己的执行引擎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值