在将数据从外部表 1 插入到外部表 2 时,外部表 2 的数据存储在/user/hive/warehouse/db-name/table-name/
其中,但作为外部表,它不应该将数据存储到仓库目录中吗?
我们应该指定将数据存储到外部表的位置吗?
问问题
5692 次
3 回答
1
是的,您必须在创建外部表时提及位置。您可以通过以下方式简单地做到这一点。
创建表 table1 和 table2:
CREATE EXTERNAL TABLE table1(col1 INT, col2 BIGINT,col3 STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '<hdfs_location1>';
CREATE EXTERNAL TABLE table2(col21 INT, col22 BIGINT,col23 STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '<hdfs_location2>';
现在将表1中的数据插入表2
INSERT OVERWRITE TABLE table2(col21,col22,col23) SELECT * FROM table1
它会将数据从表 1 复制到表 2 hdfs 位置。
请注意,外部表不支持CTAS (创建表 AS 选择)。
于 2016-06-02T07:05:13.447 回答
1
您在 hive 中创建的任何表,无论其内部文件还是外部文件移动到“/user/hive/warehouse”或您
hive.metastore.warehouse.dir
在 hive-site.xml 中指定的任何内容
创建外部表 - 以防止有人意外删除表时数据丢失。尝试创建 2 个外部表并浏览文件系统。你可以很容易地理解这个概念。
于 2016-06-01T14:56:48.413 回答
0
我认为您在未指定位置的情况下创建了外部表 2。尝试使用以下语法
CREATE EXTERNAL TABLE [db_name.]table_name
[(col_name data_type [COMMENT col_comment], ...)]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement];
于 2016-06-01T10:06:07.393 回答