Hive 管理表 vs 外部表:LOCATION 目录

6
我一直在阅读一些HIVE的书籍和教程。其中一本书 - Hadoop in Practice说:
当您创建一个外部(非托管)表时,Hive会保持由LOCATION关键字指定的目录中的数据完整。但是,如果您执行相同的CREATE命令并删除EXTERNAL关键字,则该表将成为托管表,并且Hive将移动LOCATION目录的内容到/user/hive/warehouse/stocks中,这可能不是您所期望的行为。
我使用LOCATION关键字创建了一个托管表。然后从HDFS文件向表中加载数据。但是我在/user/hive/warehouse下没有看到任何目录被创建。而是在LOCATION中创建了新目录。所以我认为如果我使用LOCATION关键字创建托管表,那么在Hive warehouse目录中就不会创建任何内容?这个理解正确吗?
另外,如果LOAD命令中输入文件的位置是hdfs,则内部或外部表都会将数据移动到它们的位置。这个理解也正确吗?
4个回答

4
首先,当您使用location关键字创建一个managed table时,它不会在指定的location创建目录,而是会出现异常:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:hdfs://path/of/the/given/location is not a directory or unable to create one)
这意味着在DDL中,您提供的location需要存在该目录,否则将抛出上述异常。
接下来,您可以创建带有location的DDL。
然后,您可以使用select * from <table>命令查看数据(无需加载数据)。
但是当您删除此表时,您的数据也将从hdfs中删除(与外部表不同),元数据也将消失。
这是具有location关键字的托管表与外部表之间的主要区别。它的行为部分像外部表,部分像托管表。
外部表的行为是您不必加载数据,只需指定位置即可。
托管表的行为是当您删除表时,数据也被删除。
希望这能让您理解。

3
无论是托管表还是外部表,位置都是可选的,因此无论您创建哪个表(托管表或外部表),只要指定了位置,数据就会存储在相同的HDFC位置路径上。如果不使用位置,则默认使用hive-site.xml中提到的位置路径。

0
当您使用location关键字创建表时,它将把表指向特定位置。该位置指定了HDFS中数据文件的路径。
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.contacts (
  name         STRING ,
  -- ... other variables
  city         STRING ,
LOCATION '/user/hive/warehouse/mydb.db/contacts';

无论何时您指定一个位置,都必须确保将数据文件放置在那里。在上面的示例中,我们明确告诉Hive外部表中的数据所在的位置。如果我们没有指定表,则默认位置如下,除非您的系统管理员更改了默认值,否则对于任何没有位置语句生成的表都是如此。
/user/hive/warehouse/databasename.db/contacts

0

托管表和非托管表 每个Spark SQL表都有存储模式和数据本身的元数据信息。

托管表是Spark SQL表,其中Spark管理数据和元数据。在托管表的情况下,Databricks将元数据和数据存储在您帐户中的DBFS中。由于Spark SQL管理表,因此执行DROP TABLE example_data会删除元数据和数据。

创建托管表的一些常见方法包括:

CREATE TABLE <example-table>(id STRING, value STRING)

另一个选择是让Spark SQL管理元数据,同时您控制数据位置。我们将其称为非托管表。Spark SQL管理相关元数据,因此当您执行DROP TABLE时,Spark仅删除元数据而不是数据本身。数据仍然存在于您提供的路径中。

您可以使用数据源(如Cassandra、JDBC表等)创建非托管表。有关Databricks支持的数据源的更多信息,请参阅数据源。创建非托管表的一些常见方法包括:

CREATE TABLE <example-table>(id STRING, value STRING) USING org.apache.spark.sql.parquet OPTIONS (PATH "<your-storage-path>")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接