首先,我创建了由代码和日期
分区的hive外部表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从其他表
获取数据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';
但是当我从hive中的XYZ表执行select count(*)时,它会显示0条记录, 我想我错过了什么,请帮帮我这个????
答案 0 :(得分:6)
您无需删除该表并在第二次重新创建它:
只要您移动或重命名表的外部hdfs位置,就执行以下操作:
msck repair table <table_name>
在您的情况下,错误是因为,hive Metastore没有使用新路径更新。