Impala a través de JDBC: recuperar el número de particiones eliminadas.
Estoy eliminando múltiples particiones de una tabla Impala mediante
ALTER TABLE foobar DROP IF EXISTS PARTITION (pkey='foo' OR pkey='bar');
Cuando uso impala-shell
se muestra un resultado indicando cuántas particiones realmente se eliminaron:
Starting Impala Shell without Kerberos authentication
<hr>
Bienvenido a la shell de Impala.
(Impala Shell v3.2.0-cdh6.3.2 (1bb9836) construido el Fri Nov 8 07:22:06 PST 2019)
El comando SET muestra el valor actual de todas las opciones de shell y consulta.
<hr>
Conexión TCP abierta con impala:21000
Conectado a impala:21000
Versión del servidor: impalad version 3.2.0-cdh6.3.2 RELEASE (build 1bb9836227301b839a32c6bc230e35439d5984ac)
[impala:21000] default> use my<em>schema;
Consulta: use my</em>schema
[impala:21000] my_schema> ALTER TABLE FOOBAR DROP IF EXISTS PARTITION (pkey='foo' OR pkey='bar');
Consulta: ALTER TABLE FOOBAR DROP IF EXISTS PARTITION (pkey='foo' OR pkey='bar')
+-------------------------+
| summary |
+-------------------------+
| Dropped 1 partition(s). |
+-------------------------+
Recuperado 1 fila(s) en 0.13s
Ahora, en nuestro código productivo, estamos utilizando solamente JDBC. Al ejecutar la misma instrucción DDL mediante JDBC, para mi Statement st
tengo st.getResultSet() == null
y st.getUpdateCount() == -1
¿Hay alguna forma de obtener el número de particiones eliminadas solo mediante JDBC?
davy.ai
Desafortunadamente, no es posible recuperar el número de particiones eliminadas a través de JDBC solo.
La razón es que el comando
ALTER TABLE
en Impala no devuelve un conjunto de resultados que se pueda recuperar usandogetResultSet()
. En su lugar, devuelve un resumen de la operación que se imprime en la consola o el indicador de shell.Para recuperar el número de particiones eliminadas a través de JDBC, tendría que analizar la salida de la consola y extraer la información relevante. Esta no es una aproximación confiable ni recomendable, ya que el formato de la salida de la consola puede cambiar entre diferentes versiones de Impala o incluso entre diferentes ejecuciones del mismo comando.
Alternativamente, podría intentar ejecutar el comando
ALTER TABLE
usando una API o herramienta diferente que admita recuperar la salida de resumen. Por ejemplo, podría usar la shell de Impala o el cliente de línea de comandos para ejecutar el comando y capturar la salida, o podría usar una API de nivel superior como el controlador JDBC de Impala o el conector JDBC de Cloudera que pueden proporcionar más funcionalidad para operaciones de DDL.