Information on Apache HIVE



所以我试图更好地理解HIVE。我在之前的角色中简要地使用过它,但我从来没有完全清楚它。我的问题是

HIVE是否也用于数据存储,或者严格地作为Hadoop集群上的数据查询手段?换句话说,是否需要将数据移动到HIVE数据库/环境中才能进行查询?或者HIVE可以用来直接查询Hadoop集群吗?

谢谢!

简短回答:Hive不是一个数据存储,它可以使用表从存储中查询数据(schema定义,用于数据序列化/反序列化的SerDe和数据位置在create-table语句中定义)。

长答:

数据存储在HDFS或其他Hadoop兼容的文件系统,如S3(可以完全从Hadoop集群分离)。

Hive是一个数据库:它有丰富的SQL(DDL和DML),元数据包括统计数据和表定义,访问授权,基于成本的优化器,可以使用不同的查询引擎:MR(MapReduce)和Tez。Hive与传统RDBMS的区别在于Hive使用了读时模式(schema-on-read)的概念:数据的存储方式和读取方式是完全分离的,读取数据时应用模式,数据文件可以通过一些外部进程添加到HDFS中。

Hive可以读取不同的结构化文件(如JSON, Avro, CSV, Parquet, ORC等)以及半结构化文件(使用RegexSerDe或任何其他,甚至自定义SerDe)。Hive还可以连接到其他JDBC源,方便集成和读写。

在Hive中,表或分区是HDFS中的一个位置+包含模式定义、SerDe、统计数据、访问授权的元数据.

您可以在某些现有位置上创建表,甚至可以在同一位置上创建多个表(即使具有不同的模式)。阅读这个关于在同一位置上的多个表的答案,以及这个关于托管/外部表的答案:https://stackoverflow.com/a/54242477/2700344。

您可以直接将文件放入表位置或使用HDFS命令删除文件,它会在Hive返回的数据集中反映,也支持LOAD INTO TABLE命令,它会为您将文件放入表位置,您不需要知道位置路径。

相关内容

  • 没有找到相关文章

最新更新