Hive更改外部表和更新架构

时间:2017-04-13 21:03:47

标签: hadoop hive

我正在寻找为Avro架构支持的Hive External表添加列和更新架构的命令。

这是我到目前为止所尝试的内容。

我有一个Hive外部表,其中包含使用此命令创建的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'
  )

我想为此表添加其他列和更新架构。

alter table person_hourly ADD COLUMNS (lastname string ) SET TBLPROPERTIES ('avro.schema.url' = 'hdfs:///schemas/PersonV2.avsc')

但是因为我收到错误所以我不能这样做 FAILED: ParseException line 1:64 missing EOF at 'SET' near ')'

所以我尝试单独添加列,这有效,但我无法更新架构 FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. at least one column must be specified for the table

3 个答案:

答案 0 :(得分:1)

ALTER TABLE的数据定义语言(DDL)可以be found here

ALTER TABLE table_name SET TBLPROPERTIES table_properties;
 
table_properties:
  : (property_name = property_value, property_name = property_value, ... )

您的评论

  

我尝试单独添加列,其中有效

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

答案 1 :(得分:0)

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

此致 赫

答案 2 :(得分:0)

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

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