2014-11-03 65 views
5

首先我创建由代码和日期蜂房外部分区表

CREATE EXTERNAL TABLE IF NOT EXISTS XYZ 
(
ID STRING, 
SAL BIGINT, 
NAME STRING, 

) 
PARTITIONED BY (CODE INT,DATE STRING) 
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' 
STORED AS 
INPUTFORMAT "parquet.hive.DeprecatedParquetInputFormat" 
OUTPUTFORMAT "parquet.hive.DeprecatedParquetOutputFormat" 
LOCATION '/old_work/XYZ'; 

分区蜂巢外部表,然后我执行插入此表上的其他表

INSERT OVERWRITE TABLE XYZ PARTITION (CODE,DATE) 
SELECT 
* 
FROM TEMP_XYZ; 

和我服用后数据覆盖统计配置单元中的记录数 从XYZ选择计数(*); 它显示我1000个记录有 然后我重命名或移动位置“/ old_work/XYZ”到“/ new_work/XYZ”

,然后我又下降了XYZ表和创建再次指向位置,以新的目录 手段“/ new_work/XYZ”

CREATE EXTERNAL TABLE IF NOT EXISTS XYZ 
(
ID STRING, 
SAL BIGINT, 
NAME STRING, 

) 
PARTITIONED BY (CODE INT,DATE STRING) 
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' 
STORED AS 
INPUTFORMAT "parquet.hive.DeprecatedParquetInputFormat" 
OUTPUTFORMAT "parquet.hive.DeprecatedParquetOutputFormat" 
LOCATION '/new_work/XYZ'; 

但后来当我在蜂巢从XYZ表执行SELECT COUNT(*),它显示了0个记录, 我想我错过了什么,请帮我在这? ??

回答

5

您不必删除该表并重新创建它的第二次:只要你移动

或重命名表的外部HDFS位置,只是这样做:

msck repair table <table_name> 

你的情况错误是因为,配置单元Metastore没有更新新路径。

+0

为什么不更新呢?我正在看这个,看不出任何理由为什么这不起作用... – Avius 2017-04-02 11:33:20