我在HDFS路径中有一组CSV文件,我从这些文件创建了一个外部Hive表,让我们说table_A。由于某些条目是冗余的,我尝试基于table_A创建另一个Hive表,比如table_B,它具有不同的记录。我能够将table_B创建为非外部表(Hive仓库)。我想知道我是否可以将table_B创建为外部表?如果可以,它是否会复制table_A中的记录并在指定的路径上创建自己的table_B存储(最好也是CSV)?
答案 0 :(得分: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;