Hive SemanticException添加Partition配置单元表

Hive SemanticException添加Partition配置单元表,hive,hiveql,Hive,Hiveql,正在尝试使用以下内容在配置单元表上创建分区: > alter table stock_ticker add if not exists > partition(stock_symbol='ASP') > location 'data/stock_ticker_sample/stock_symbol=ASP/' 这将产生以下输出 FAILED : SemanticException table is not partitioned but partition spec exis

正在尝试使用以下内容在配置单元表上创建分区:

> alter table stock_ticker add if not exists
> partition(stock_symbol='ASP')
> location 'data/stock_ticker_sample/stock_symbol=ASP/'
这将产生以下输出

FAILED : SemanticException table is not partitioned but partition spec exists: {stock_symbol=ASP} 
在此添加尝试之前,此表上没有分区

> show partitions stock_ticker;
导致

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
Table stock_ticker_sample is not a partitioned table
毫无疑问,stock_symbol列是存在的,并且是string类型


查询需要采取哪些步骤才能添加此分区?

解决方案是将分区信息添加到stock\u ticker表的定义中:

CREATE EXTERNAL TABLE stock_ticker (
... 
)
PARTITIONED BY (stock_symbol STRING);
然后,您可以通过以下方式轻松地将外部数据添加到表中:

> alter table stock_ticker add if not exists
> partition(stock_symbol='ASP')
> location 'data/stock_ticker_sample/stock_symbol=ASP/'

德国劳埃德船级社

分区似乎必须在外部表上完成。不是,我假设您希望为此分区指定现有位置,以便使其成为可管理表可能会在删除时危及源数据。我的意思是,在指向内部表位置的外部表上执行时,分区操作会成功。并不是说内部表上的分区本身是不可能的。为内部表指定给定分区的位置也可以。但总的来说,这是个坏主意。对于托管表,自动文件夹分配似乎是正确的方法。Gl与分区的东西!对于一个外部表,我遇到了类似的错误,但找不到发生这种情况的原因。最后删除了表并重新创建了表。因为它是外部表,所以删除并重新创建它对我来说并没有多大关系。