2016-06-01 61 views
0

从外部表格-1向外部表格-2插入数据时,外部表格-2的数据存储在/user/hive/warehouse/db-name/table-name/中,但作为外部表格,它不应将数据存储到外部表格仓库目录权利?
我们应该指定存储数据到外部表的位置吗?从外部表格向外部表格插入数据

回答

1

是的,您在创建外部表时必须提及位置。 你可以简单地按照下面的方式做。

创建表Table 1和Table:

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选择)不支持外部表。

0

我想你已经创建了外部表-2而没有指定LOCATION。尝试使用下面的语法

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]; 
+0

[CTAS](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableAsSelect(CTAS))(创建表格为select)不支持外部表格。 –

1

您在蜂巢创建它的内部或外部文件是否被移动到“/用户/蜂巢/仓库”或者是任何的表,你在 hive.metastore.warehouse.dir 指定蜂房的site.xml

创建外部表 - 防止有人在意外丢弃表时丢失数据。尝试创建2个外部表并浏览文件系统。你可以很容易地理解这个概念。