从外部 table 向外部 table 插入数据
insert data to external table from an external table
从外部 table-1 向外部 table-2 插入数据时,外部 table-2 的数据存储在 /user/hive/warehouse/db-name/table-name/
中,但作为外部 table 它不应该将数据存储到仓库目录中吗?
我们是否应该指定将数据存储到外部的位置 table?
我认为您在未指定 LOCATION 的情况下创建了外部 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];
您在配置单元中创建的任何 table 无论其内部或外部文件是否移动到“/user/hive/warehouse”或您在
hive.metastore.warehouse.dir
在配置单元中-site.xml
外部 table 已创建 - 以防止有人不小心掉落 table 时造成数据丢失。尝试创建 2 个外部 tables 并浏览文件系统。你可以很容易地理解这个概念。
是的,您必须在创建外部 table 时提及位置。
您可以简单地按照以下方式进行。
创建 tables 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>';
现在插入数据从table1到table2
INSERT OVERWRITE TABLE table2(col21,col22,col23) SELECT * FROM table1
它将数据从 table 1 复制到 table2 hdfs 位置。
请注意 CTAS(Create table AS Select) 不支持外部 tables。
从外部 table-1 向外部 table-2 插入数据时,外部 table-2 的数据存储在 /user/hive/warehouse/db-name/table-name/
中,但作为外部 table 它不应该将数据存储到仓库目录中吗?
我们是否应该指定将数据存储到外部的位置 table?
我认为您在未指定 LOCATION 的情况下创建了外部 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];
您在配置单元中创建的任何 table 无论其内部或外部文件是否移动到“/user/hive/warehouse”或您在
hive.metastore.warehouse.dir
在配置单元中-site.xml
外部 table 已创建 - 以防止有人不小心掉落 table 时造成数据丢失。尝试创建 2 个外部 tables 并浏览文件系统。你可以很容易地理解这个概念。
是的,您必须在创建外部 table 时提及位置。 您可以简单地按照以下方式进行。
创建 tables 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>';
现在插入数据从table1到table2
INSERT OVERWRITE TABLE table2(col21,col22,col23) SELECT * FROM table1
它将数据从 table 1 复制到 table2 hdfs 位置。
请注意 CTAS(Create table AS Select) 不支持外部 tables。