解释一下hive 里创建表时external
时间: 2023-08-28 12:05:34 浏览: 39
在Hive中,创建表时可以选择使用EXTERNAL关键字来指定表的类型为外部表(External Table)。外部表是一种特殊的表,它的数据存储在Hive外部,即不受Hive的管理。具体解释如下:
1. 数据存储位置:创建外部表时,需要通过LOCATION关键字指定数据的存储位置。这意味着数据可以存储在HDFS、本地文件系统或其他支持的存储系统中。
2. 表的元数据:外部表的元数据(表结构、列名、数据类型等)会被Hive管理,但实际的数据文件不会由Hive管理。这意味着删除外部表时,只会删除元数据,而不会删除实际存储的数据文件。
3. 数据的共享与访问:由于外部表的数据存储在Hive外部,所以其他系统或工具也能够直接访问这些数据文件。这使得可以在其他工具中进行数据处理或分析,而不仅限于Hive。
4. 数据的维护和备份:由于外部表的数据不受Hive管理,因此需要手动维护和备份数据文件。如果删除了外部表,则不会删除实际的数据文件。
总结来说,创建外部表时使用EXTERNAL关键字可以告诉Hive该表是一个外部表,数据存储在Hive外部。这样可以方便地与其他工具共享数据,并且不会受到Hive删除表操作的影响。
相关问题
hive外部表创建文件 test_external.txt
创建外部表的语法如下:
```
CREATE EXTERNAL TABLE table_name(
col1 data_type,
col2 data_type,
...
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 'hdfs://path/to/directory';
```
其中,`table_name` 是表名,`col1`, `col2` 是列名和列的数据类型,`ROW FORMAT DELIMITED` 表示使用分隔符进行行分隔,`FIELDS TERMINATED BY '\t'` 表示列之间使用制表符 `\t` 进行分隔,`LOCATION` 指定外部表的存储路径。
假设有一个名为 `test_external.txt` 的文件,存放在 HDFS 的 `/user/hive/external/` 目录下,可以使用以下语句创建外部表:
```
CREATE EXTERNAL TABLE test_external(
col1 string,
col2 int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION '/user/hive/external/';
```
注意,外部表只是对数据的一种映射,不会在 HDFS 上创建任何文件或目录,而是直接读取指定路径下的数据文件。因此,在使用外部表之前,需要先在 HDFS 上创建相应的数据文件。
hive 创建外部表时能否直接导入数据?
是的,Hive创建外部表时可以直接导入数据。下面是具体的步骤:
1. 打开Hive命令行终端,输入以下命令以创建一个新的数据库:
```
CREATE DATABASE my_database;
```
2. 使用以下命令来选择创建的数据库:
```
USE my_database;
```
3. 输入以下命令创建一个新的外部表,并直接从数据文件中导入数据,例如我们创建一个名为`my_table`的外部表:
```
CREATE EXTERNAL TABLE my_table (
id INT,
name STRING,
age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/user/hive/data'
tblproperties ("skip.header.line.count"="1");
LOAD DATA LOCAL INPATH '/path/to/data/file/data.txt' OVERWRITE INTO TABLE my_table;
```
上述命令创建了一个外部表,其结构与前面创建的表相同,但是它的数据存储在`/user/hive/data`目录下,而不是Hive默认的目录中。在表的属性中,我们使用了`"skip.header.line.count"="1"`来跳过数据文件的第一行,这样就不会将数据文件的表头导入到表中。
4. 在创建外部表的同时,使用`LOAD DATA`命令将数据从本地文件中导入到外部表中,例如我们将数据文件存储在`/path/to/data/file/data.txt`目录下。这里使用了`LOCAL INPATH`参数来指明数据文件的本地路径,`OVERWRITE`参数表示如果表中已经有数据,则覆盖原有数据。
到这里,我们就完成了Hive创建外部表并直接导入数据的过程。需要注意的是,外部表的数据存储在Hadoop集群中,并且Hive只是对这些数据的元数据进行管理,因此在删除外部表时,数据不会被删除。