我想构建一个自动系统来帮助映射Hive表。我有一个带有元数据的SQL表:tableID,fieldName,字段类型,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)
我需要一个可以包含这些选项的命令。或者,如果你有另一个好主意,我会非常感激…
谢谢!
您可以使用ALTER TABLE REPLACE COLUMNS
。它完全符合你的要求,
它将同时替换所有列。看见https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#语言手册DDL添加/替换列