una poner para ocultas ocultar oculta mostrar mac hoja filas fila cómo cálculo como columnas columna boton agregar hadoop hive hdinsight

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.