2015-06-22 64 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; 
插入