2015-06-22 62 views
0

我在HDFS路徑中有一組CSV文件,我從這些文件創建了一個外部Hive表,比方說table_A。由於某些條目是多餘的,我嘗試創建另一個基於table_A的Hive表,比如table_B,它具有不同的記錄。我能夠將table_B創建爲非外部表(Hive倉庫)。我想知道我是否可以創建table_B作爲外部表?如果這是可能的,它會複製table_A中的記錄並在指定的路徑上創建自己的table_B存儲(最好也是CSV)?從現有外部表創建一個外部Hive表格

回答

2

我假設你想從「未清潔」表 中選擇不同的數據並插入「已清理」表中。

CREATE EXTERNAL TABLE `uncleaned`(
    `a` int, 
    `b` string, 
    `c` string, 
    `d` string, 
    `e` bigint 
) 
ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 
    '/external/uncleaned' 

創建另一個表,也可以是外部的或不是(無所謂)。

CREATE EXTERNAL TABLE `cleaned`(
    `a` int, 
    `b` string, 
    `c` string, 
    `d` string, 
    `e` bigint 
) 
ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 
    '/external/cleaned' 

閱讀從第一個表,你可以通過

insert overwrite table cleaned 

select distinct a,b,c,d,e from uncleaned; 
插入