使用不同的定义重建Hive表

时间:2017-10-17 15:15:20

标签: mysql hive alter-table alter presto

我想构建一个自动系统来帮助我映射Hive表。 我有一个带有元数据的SQL表:tableID,fieldName,field Type,description,lastUpdated。 我想自动更新我的表格 -

where lastUpdate=CURDATE() - INTERVAL '1' DAY

但是我没有说明进行了哪些更改 - 它可以是表中的新列,它可以是已更改的列名,甚至是描述更新。 当它已经存在时,有没有办法再次“定义”一个表?我想做的所有更改都会立即执行(所有更改类型)?

例如

- 我有一个像这样定义的表:

create external table IF NOT EXISTS tableA (`a` string, `b` int, `c` int) PARTITIONED BY (dt date) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 'File/Path';

更改是列“b”类型现在是“字符串”。是否有可以编写的(通用)更新/更改查询:

*SomeCommand* tableA (`a` string, `b` string, `c` int)

我的专栏会更新吗?

如果我有一个新列,则相同 - d,键入:float。

*SomeCommand* tableA (`a` string, `b` string, `c` int, `d` float)

我需要一个可以包含这些选项的命令。或者 - 如果你对如何做到这一点有另一个好主意,我将非常感激...

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用ALTER TABLE REPLACE COLUMNS。它完全符合您的要求,

它将立即替换所有列。见https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Add/ReplaceColumns