如何在hive中添加多级分区?

问题描述 投票:0回答:1

我在配置单元中有客户管理的表,基于日期和客户名称进行分区。我的目录结构如下:

 user/hive/warehouse/test.db/customer/date1=2021-09-16/customerName=xyz

当我做显示分区客户时,它没有给出输出。所以我尝试添加一个分区

MSCK REPAIR TABLE customer;

它给出错误执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1

ALTER TABLE customer ADD PARTITION (date1='2021-09-15') PARTITION (customerName='xyz');

它还给出错误 ValidationFailureSemanticException 分区规范 {customername=xyz} 包含非分区列

如何在 hive 元存储中添加这些分区。

hive> show create table customer;
 OK
CREATE TABLE `customer`(
`act` string)
 PARTITIONED BY (
   `date1` string,
   `customername` string)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
WITH SERDEPROPERTIES (
  'path'='hdfs://hdcluster/user/hive/warehouse/test.db/customer')
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'hdfs://hdcluster/user/hive/warehouse/test.db/customer'
TBLPROPERTIES (
 'spark.sql.create.version'='2.4.0',
 'spark.sql.partitionProvider'='catalog',
 'spark.sql.sources.provider'='orc',
 'spark.sql.sources.schema.numPartCols'='2',
 'spark.sql.sources.schema.numParts'='1',
 'spark.sql.sources.schema.part.0'=
  '{\"type\":\"struct\",\"fields\": 
  [{\"name\":\"act\",\"type\":\"string\",\"nullable\":true,\"metadata\": 
  {}},           {\"name\":\"date1\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}}, 
{\"name\":\"customername\",\"type\":\"string\",\"nullable\":true,\"metadata\ 
  ":{}}]}','spark.sql.sources.schema.partCol.0'='date1',
      'spark.sql.sources.schema.partCol.1'='customername',
      'transient_lastDdlTime'='1631781225')
hadoop hive hiveddl
1个回答
0
投票

试试这个:

ALTER TABLE customer 
ADD PARTITION (date1='2021-09-15',customerName='xyz')
LOCATION 
    'hdfs://hdcluster/user/hive/warehouse/test.db/customer/date1=2021-09-15/customerName=xyz';
© www.soinside.com 2019 - 2024. All rights reserved.