es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema al seleccionar una tabla Hive cuyo nombre comienza con un guión bajo.

En el proceso de ejecutar mi script hql, tengo que almacenar datos en una tabla temporal antes de insertarlos en la tabla principal. En ese escenario, he intentado crear una tabla temporal con un guión bajo al inicio.

Nota: con comillas el nombre de la tabla con guión bajo no funciona.

Declaración de creación que funciona:

create table dbo._temp_table (
emp_id int,
emp_name string)
stored as ORC
tblproperties (‘ORC.compress’ = ‘ZLIB’)

Declaración de inserción que funciona:

insert into table dbo._temp_table values (123, ‘ABC’)

Pero, la instrucción select en la tabla temporal no está funcionando y muestra registros nulos aunque hayamos insertado el registro según la instrucción de inserción.

select * from dbo._temp_table

Todo está funcionando bien, pero la instrucción select para ver las filas no está funcionando. Aún no estoy seguro de si podemos crear una tabla temporal de la forma mencionada anteriormente.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como un experto en TI especializado en SQL, Hive, HiveQL, tablas temporales y HiveDDL, puedo responder la siguiente pregunta en Markdown:

    Q: En el proceso de ejecución de mi script HQL, tengo que almacenar los datos en una tabla temporal antes de insertarlos en la tabla principal. En ese escenario, he intentado crear una tabla temporal con un guión bajo al inicio. ¿Por qué mi declaración select sobre la tabla temporal no funciona y es posible crear una tabla temporal de la forma mencionada?

    Para crear una tabla temporal en Hive, podemos usar la sentencia CREATE TEMPORARY TABLE seguida de la definición de la tabla. El nombre de la tabla temporal es local a la sesión y comienza con el prefijo tmp_ o temp_. Sin embargo, cuando intentamos crear una tabla temporal con un guión bajo al inicio, no funciona como se espera (incluso cuando usamos comillas para el nombre de la tabla).

    -- No funciona
    CREATE TEMPORARY TABLE _temp_table (emp_id INT, emp_name STRING);
    

    Para crear una tabla temporal con un guión bajo, podemos usar la sentencia regular CREATE TABLE con el prefijo de la base de datos y comillas alrededor del nombre de la tabla:

    -- Funciona
    CREATE TABLE dbo.`_temp_table` (
      emp_id INT,
      emp_name STRING
    ) ALMACENADO COMO ORC
      PROPIEDADES DE TABLA ('ORC.compress' = 'ZLIB');
    

    Para insertar datos en la tabla temporal, podemos usar la sentencia INSERT INTO:

    -- Funciona
    INSERT INTO TABLE dbo.`_temp_table` VALUES (123, 'ABC');
    

    Sin embargo, cuando intentamos seleccionar datos de la tabla temporal, puede que no funcione como se espera y podría devolver registros nulos incluso cuando hemos insertado datos según la sentencia de inserción:

    -- No funciona
    SELECT * FROM dbo.`_temp_table`;
    

    La razón por la cual la sentencia select no funciona puede deberse al alcance de sesión de la tabla temporal, lo que significa que la tabla temporal está disponible solo dentro de la sesión que la creó. Cuando intentamos ejecutar una sentencia select en una nueva sesión, no se puede encontrar la tabla temporal y devuelve registros nulos.

    En resumen, es posible crear una tabla temporal en Hive con un guión bajo al inicio usando la sentencia regular CREATE TABLE con un prefijo de base de datos y comillas alrededor del nombre de la tabla. Sin embargo, al usar tablas temporales en Hive, es esencial tener en cuenta su alcance de sesión, ya que solo están disponibles dentro de la sesión que las creó.

Comments are closed.