2017-04-13 51 views
0

我正在尋找一個命令來爲Avro模式支持的Hive外部表添加列和更新模式。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

當您嘗試執行SET時是否在'ADD COLUMNS'上留下了字符?如果是這樣,爲什麼? –

+0

我試圖添加列和設置屬性,因此我有兩個在那裏。我也嘗試設置屬性(沒有添加列),但後來跑到我提到的最後一個錯誤 '至少一列必須是......' –

+0

你不應該需要列。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTableProperties –

回答

0

ALTER TABLE可以be found here

數據定義語言(DDL)
ALTER TABLE table_name SET TBLPROPERTIES table_properties; 
  
table_properties: 
  : (property_name = property_value, property_name = property_value, ...) 

而且您的評論

我嘗試了分開添加列,其中工作

我認爲這就是你應該做的。添加列,然後設置屬性

0

hdfs中的模式,它將被Hive檢測到。蜂巢讀運行模式,當您通過avro.schema.url使用AVSC

問候, 赫克託它不保存任何架構信息

+0

是的,我必須用新的模式文件覆蓋現有的模式文件,基本上保持名稱不變,並且工作。我最初的問題是關於如何通過Alter命令更改架構,該命令仍然不適合我。 –