2016-06-01 60 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個外部表並瀏覽文件系統。你可以很容易地理解這個概念。