hive外部分区表

txu3uszq  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(373)

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

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中选择count(*);它显示有1000条记录,然后我将位置'/old\u work/xyz'重命名或移动到'/new\u work/xyz'
然后我再次删除xyz表并再次创建指向新目录的位置,即“/new\u 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条记录,我想我遗漏了什么,请帮我解决这个问题????

fjaof16o

fjaof16o1#

您无需删除表并在第二次重新创建它:
一旦移动或重命名表的外部hdfs位置,只需执行以下操作:

msck repair table <table_name>

在您的例子中,错误是因为配置单元元存储没有用新路径更新。

相关问题