Hadoop 配置单元更改外部表并更新架构

Hadoop 配置单元更改外部表并更新架构,hadoop,hive,Hadoop,Hive,我正在寻找一个命令来为我的配置单元外部表添加列并更新由Avro模式支持的模式 以下是我到目前为止所做的尝试 我有一个配置单元外部表,其中包含使用此命令创建的Avro支持的架构- CREATE EXTERNAL TABLE `person_hourly`( 'personid' string COMMENT '', 'name' string COMMENT '' ) PARTITIONED BY ( 'partitiontime' string) ROW FORMAT SE

我正在寻找一个命令来为我的配置单元外部表添加列并更新由Avro模式支持的模式

以下是我到目前为止所做的尝试

我有一个配置单元外部表,其中包含使用此命令创建的Avro支持的架构-

CREATE EXTERNAL TABLE `person_hourly`(
  'personid' string COMMENT '', 
  'name' string COMMENT '' 
  )
PARTITIONED BY ( 
  'partitiontime' string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION
  'hdfs://nameservice1/web/PersonData/'
TBLPROPERTIES (
  'avro.schema.url'='hdfs:///schemas/PersonV1.avsc'
  )
我想为这个表添加额外的列并更新模式

altertableperson\u每小时添加列(lastname字符串)设置TBLProperty('avro.schema.url'='hdfs:///schemas/PersonV2.avsc)

但我不能这样做,因为我得到了一个错误
失败:解析异常行1:64在“SET”附近缺少EOF'”

所以我尝试单独添加列,这很有效,但我无法更新模式
失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddlstask返回代码1。必须为表指定至少一列

如果修改hdfs中的架构,配置单元将检测到该架构。配置单元在运行时读取架构,当您通过avro.schema.url使用avsc时,它不会保存任何架构信息

问候,,
Hector

如果修改hdfs中的架构,它将被配置单元检测到。配置单元在运行时读取架构,当您通过avro.schema.url使用avsc时,它不会保存任何架构信息

问候,,
Hector

用于
更改表的数据定义语言(DDL)
可以

你的评论呢

我尝试单独添加列,这很有效


我认为这是你应该做的。添加列,然后设置属性可以使用
ALTER TABLE
的数据定义语言(DDL)

你的评论呢

我尝试单独添加列,这很有效


我认为这是你应该做的。添加列,然后设置属性

下面的代码适用于我。。 您可以更改avsc文件中的模式定义(使用正确的格式),然后可以使用简单的alter命令设置更新模式文件的路径

ALTER TABLE table_name SET TBLPROPERTIES ("path of updated schema  avsc format file") 

下面的代码对我有用。。 您可以更改avsc文件中的模式定义(使用正确的格式),然后可以使用简单的alter命令设置更新模式文件的路径

ALTER TABLE table_name SET TBLPROPERTIES ("path of updated schema  avsc format file") 

当您尝试执行
设置
时,是否在
添加列
上离开?如果是这样的话,为什么呢?我试图同时添加列和设置属性,因此我把它们都放在了那里。我还试着只设置属性(没有添加列),但后来遇到了我提到的最后一个错误`至少有一列必须是`你不应该需要列。这对我@cricket_007很有效,谢谢你的链接。当你尝试设置
时,你是否在
添加列
上离开?如果是这样的话,为什么呢?我试图同时添加列和设置属性,因此我把它们都放在了那里。我还试着只设置属性(没有添加列),但后来遇到了我提到的最后一个错误`至少有一列必须是`你不应该需要列。这对我有用@cricket_007,谢谢你的链接。是的。。我必须用一个新的模式文件覆盖现有的模式文件,基本上保持名称不变,这是可行的。我最初的问题是关于如何通过Alter命令更改模式,这对我来说仍然不起作用。。我必须用一个新的模式文件覆盖现有的模式文件,基本上保持名称不变,这是可行的。我最初的问题是关于如何通过Alter命令更改模式,这对我来说仍然不起作用。