我正在寻找为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
答案 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")