hadoop - poner - En Hive, ¿cómo puedo agregar una columna solo si esa columna no existe?
mostrar filas ocultas en project 2016 (2)
Me gustaría agregar una nueva columna a una tabla, pero solo si esa columna aún no existe.
Esto funciona si la columna no existe:
ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
Pero cuando lo ejecuto por segunda vez, obtengo un error.
Column ''mycolumn'' exists
Cuando trato de usar la sintaxis "IF NOT EXISTS" que es compatible con CREATE TABLE y ADD PARTITION, obtengo un error de sintaxis:
ALTER TABLE MyTable ADD IF NOT EXISTS COLUMNS (mycolumn string);
FAILED: ParseException line 3:42 required (...)+ loop did not match anything at input ''COLUMNS'' in add partition statement
Lo que necesito es algo que pueda ejecutarse de manera itemptiva, así puedo ejecutar mi consulta, ya sea que exista o no esta columna.
Bueno, no hay una manera directa de hacer eso. Quiero decir a través de una sola consulta. Hay otras dos formas:
1.) Usando JDBC:
1.1) Do describe on the table name.
1.2) You will get a list of columns in result set.
1.3) Check if your columns exists or not by iterating through the result set.
2.) Usando el cliente de Metastore de colmena:
2.1) Create a object of HiveMetastoreClient
2.2) HiveMetastoreClient.getFields(<>db_name, <table_name>).get(index).getName() will give you the column name.
2.3) Check if your column exists of not by comparing the list.
Espero eso ayude...!!!
Puede hive.cli.errors.ignore
parcialmente configurando el indicador hive.cli.errors.ignore
. En este caso, CLI de colmena forzará la ejecución de consultas adicionales incluso cuando fallan las consultas en el camino.
En este ejemplo:
SET hive.cli.errors.ignore=true;
ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
ALTER TABLE MyTable ADD COLUMNS (mycolumn2 string);
colmena ejecutará todas las consultas, aunque habrá un error en la segunda consulta.