apache-hive / 3.1.1 / reference / Hive_APIs_Overview.html

API categories

该页面旨在对 Hive 公开的各种面向公众的 API 进行分类和描述,以告知希望将其应用程序和框架与 Hive 生态系统集成的开发人员。迄今为止,在 Hive 项目中已经确定了以下 API,这些 API 被认为是公共的,或在公共领域广泛使用的:

这些 API 可以分为两个概念类别:基于操作的 API 和基于查询的 API。

基于操作的 API

基于操作的 API 公开了许多范围狭窄的方法,每个方法都实现非常特定的 Hive 操作。此类方法通常接受并返回适合其各自操作的强类型值。这些操作的实现通常以 Hive 中非常特定的层或子系统为目标,因此可能会高效使用。但是,操作的结果可能与等效 HQL 的结果不同,因为在每种情况下都可能调用不同的代码路径。基于操作的 API 用于构建需要以重复的声明方式进行交互并提供更高程度的编译时检查的过程。

基于查询的 API

基于查询的 API 允许 HQL 的某些子集的提交和执行。 APIClient 端通常有必要解析和解释任何返回的值,因为返回类型的范围通常很宽。此类 API 的实现通常以 Hive 的“查询语言”子系统为目标,该子系统解析查询并根据需要执行查询。鉴于大多数基于查询的 API 共享相似的执行路径,因此通过 API 提交的任何操作都可能会具有与通过 Hive CLI 提交的等效 HQL 相似的结果。基于查询的 API 通常用于构建动态创建 Hive API 操作或 HQL 等效结果很重要的过程。这种类型的 API 的缺点包括:缺少编译时间检查,在更高抽象级别上工作时可能效率低下以及对像攻击这样的 SQL 注入的潜在敏感性。

Available APIs

HCatClient (Java)

基于操作的 Java API 提供了许多 DDL 类型的操作,但是它不如 Metastore API 全面。 HCatClient 旨在成为 WebHCat HCatalog API 的基于 Java 的入口点,尽管这从未实现。目前HCatClientHMSImpl是 API 的唯一具体实现;它使用 Metastore API 直接与 Metastore 集成,尽管被打包在 WebHCat 项目中,却不使用 WebHCat。 HCatClientHMSImpl最初是作为参考实现提供的,但随着时间的流逝,它已成为公共 Client 端的吸引力。有趣的是,现在它是从外部程序发出 DDL 类型操作的首选 API。并鼓励特色功能。 HCatalog Wiki 上有一些最小的文档,它们以design document的形式描述了接口,但没有描述实现。

HCatalog 存储处理程序(Java)

基于操作的 Java API。 记录在维基上很好。

TODO

Requires overview.

HCatalog CLI(命令行)

基于查询的 API。 记录在维基上很好。

Hive 社区一直在弃用 Hive Cli。 Hcatalog Cli 与 Hive Cli 相似,将不推荐使用。

Metastore (Java)

IMetaStoreClient接口描述了具有 Java 绑定的基于 Thrift 操作的 API。该 API 将 metastore 存储层与其他 Hive 内部组件分离。由于 Hive 本身在内部使用此功能,因此需要实现全面的功能集,这使其对于可能会发现其他 API 缺乏的开发人员具有吸引力。尽管它最初是在 1.0.0 版(HIVE-3280)中公开的,但最初并不打算成为公共 API,并且有人建议对其进行更全面的记录(HIVE-9363)。有趣的是,目前不建议在 Hive 项目之外使用它。

TODO: API usage

有多种实例化 metastore API 的方法,包括:HCatUtil.getHiveMetastoreClient()new HiveMetaStoreClient.HiveMetaStoreClient(...)。对首选方法提出一些建议可能会很有用。

WebHCat (REST)

WebHCat 是用于HCatalog的基于 REST 操作的 API。很好记录在维基上

没有积极维护此功能,将来的发行版中可能不支持此功能。要提交工作,请考虑使用 Oozie 或类似工具。对于 DDL,请使用 JDBC。

流式数据提取(Java)

基于操作的 Java API 专注于使用 Hive 的ACID功能将连续的数据流写入事务表中。使用小批量和短暂的事务将新数据插入表中。已记录在维基上并具有包级 Javadoc。在 Hive 版本 0.13.0(HIVE-5687)中引入。

流式突变(Java)

基于操作的 Java API 专注于使用 Hive 的ACID功能将记录突变(插入/更新/删除)到事务表中。在单个长期事务中,原子地应用了大量突变。已记录在维基上。计划在 Hive 2.0.0 版中发布((HIVE-10165 ).

hive-jdbc (JDBC)

Hive 支持的 JDBC API。它支持 JDBC 规范中的大多数功能。