配置单元外部分区表



首先我创建了按代码和日期分区的配置单元外部表

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;

然后我计算hive中的记录数从XYZ中选择计数(*);它显示有1000张唱片然后我将位置"/old_work/XXYZ"重命名或移动到"/new_work/XYZ"

然后我再次放下XYZ表,再次创建指向新目录的位置表示"/new_work/XXYZ"

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条记录,我想我错过了什么,请帮我一下????

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

一旦您移动或重命名表的外部hdfs位置,只需执行以下操作:

    msck repair table <table_name>

在您的情况下,错误是因为,配置单元元存储没有用新路径更新。

最新更新