Hive是否创建外部表副本数据?

问题描述 投票:1回答:1

我有一个Spark应用程序,它以Avro格式写入输出文件。现在,我希望该数据在Hive中可用,因为要利用这些数据的应用程序只能通过Hive表来使用。

[[0]令人遗憾的是,可以通过使用Hive中的CREATE EXTERNAL TABLE来做到这一点。现在我的问题是,CREATE EXTERNAL TABLE方法的效率如何。它将复制所有Avro数据到HDFS上的其他位置以工作,还是只是创建一些元信息以用于查询Avro数据?

此外,如果我想继续向该表添加新的Avro数据,该怎么办。我可以一次创建这样的外部表,然后继续向其中添加新的Avro数据吗?如果有人在更新数据时查询数据,该怎么办。它允许原子交易吗?

hadoop hive avro atomicity
1个回答
0
投票
Hive here语句不复制任​​何数据。数据保留在表DDL中指定的位置。 CREATE TABLE仅在Hive Metastore中创建元数据。

以后可以在同一位置添加文件。

HDFS不允许更新。您可以删除文件并放入新文件。 select将在删除和放置新文件之间的中间返回空数据集。

如果是S3文件系统,而您正在重写相同的文件或删除它们,则最终可能会发生一致性问题(找不到文件等)。>>

此外,当您直接操作文件时,由于Hive不知道您已更改数据,因此不会刷新Hive统计信息。

Hive不知道是否更改了文件,因为文件系统和Hive松散连接。 Hive具有元数据,其中包含表架构定义,序列号和位置,统计信息等。在更改表位置中的数据后,它保持不变。

蜂巢式交易是原子性的。如果使用HiveQL插入或重写数据,则它将数据写入临时位置,并且仅在命令成功后,文件才会移动到表位置(如果重写,旧文件将被删除)。如果SQL失败,数据将保持命令之前的状态。

但是,由于Hive不会像大多数RDBMS一样将数据从表位置复制到内部托管存储中,如果您在Hive读取文件时对其进行操作,那么在Hive进程中将是一个例外。

另请参阅有关Hive ACID模式:CREATE TABLE

© www.soinside.com 2019 - 2024. All rights reserved.