配置单元外部分区表

bun*_*nty 6 hadoop hive bigdata hiveql

首先,我创建了由代码和日期分区的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';
Run Code Online (Sandbox Code Playgroud)

然后我在此表上执行insert overwrite从其他表中获取数据

INSERT OVERWRITE TABLE XYZ PARTITION (CODE,DATE)
SELECT
*
FROM TEMP_XYZ;
Run Code Online (Sandbox Code Playgroud)

之后我计算了来自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';
Run Code Online (Sandbox Code Playgroud)

但是当我从蜂巢中的XYZ表执行select count(*)时,它显示0条记录,我想我错过了什么,请帮帮我这个????

K S*_*hin 6

你不需要删除表并第二次重新创建它:

只要移动或重命名表的外部hdfs位置,就执行以下操作:

    msck repair table <table_name>
Run Code Online (Sandbox Code Playgroud)

在您的情况下,错误是因为,hive Metastore没有使用新路径更新.