从外部表1向外部表2插入数据时,外部表2的数据存储在 /user/hive/warehouse/db-name/table-name/ ,但作为外部表,它不应该将数据存储到仓库目录中,对吗?我们应该指定将数据存储到外部表的位置吗?
/user/hive/warehouse/db-name/table-name/
tp5buhyn1#
我认为您创建了external table-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];
unftdfkk2#
在配置单元中创建的任何表,无论其内部或外部文件是否移动到“/user/hive/warehouse”或在中指定的任何位置 hive.metastore.warehouse.dir 在hive-site.xml中创建外部表-防止意外删除表时数据丢失。尝试创建2个外部表并浏览文件系统。你很容易理解这个概念。
hive.metastore.warehouse.dir
drnojrws3#
是的,在创建外部表时必须提到位置。你可以用下面的方法来做。创建表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位置。请注意,外部表不支持cta(createtable as select)。
3条答案
按热度按时间tp5buhyn1#
我认为您创建了external table-2,但没有指定位置。尝试使用以下语法
unftdfkk2#
在配置单元中创建的任何表,无论其内部或外部文件是否移动到“/user/hive/warehouse”或在中指定的任何位置
hive.metastore.warehouse.dir
在hive-site.xml中创建外部表-防止意外删除表时数据丢失。尝试创建2个外部表并浏览文件系统。你很容易理解这个概念。
drnojrws3#
是的,在创建外部表时必须提到位置。你可以用下面的方法来做。
创建表table1和table2:
现在将表1中的数据插入表2中
它将数据从表1复制到表2的hdfs位置。
请注意,外部表不支持cta(createtable as select)。