Soy completamente nuevo a la Colmena y el Desbordamiento de Pila. Estoy tratando de crear una tabla con datos complejos de tipo «STRUCT» y, a continuación, rellenar el uso de INSERT INTO TABLE en la Colmena.

Estoy usando el siguiente código:

CREATE TABLE struct_test
(
 address STRUCT<
                houseno:    STRING
               ,streetname: STRING
               ,town:       STRING
               ,postcode:   STRING
               >
);

INSERT INTO TABLE struct_test
SELECT NAMED_STRUCT('123', 'GoldStreet', London', W1a9JF') AS address
FROM dummy_table
LIMIT 1;

Me sale el siguiente error:

Error al compilar declaración: ERROR: semanticException [Error
10044]: No se puede insertar en destino debido a que el número de columna tipo se
diferentes ‘struct_test’: No se puede convertir la columna 0 de la estructura para
matriz>.

Yo era capaz de utilizar código similar con éxito para crear y rellenar un tipo de datos de la Matriz, pero estoy teniendo dificultades con la Estructura. He probado un montón de ejemplos de código que he encontrado en internet, pero ninguno de ellos parece funcionar para mí… yo realmente le agradecería un poco de ayuda en esto ya que he estado atrapado en él durante bastante tiempo ahora! Gracias.

Tenga cuidado, los valores nulos tomar más de esfuerzo, issues.apache.org/jira/browse/HIVE-4022

OriginalEl autor data101 | 2016-09-08

4 Comentarios

  1. 6

    su error de sql. usted debe utilizar sql:

    INSERT INTO TABLE struct_test 
           SELECT NAMED_STRUCT('houseno','123','streetname','GoldStreet', 'town','London', 'postcode','W1a9JF') AS address 
               FROM dummy_table LIMIT 1;
    
    podría usted por favor, háganos saber qué versión de la colmena que he probado .
    I prueba de sql esta en la colmena 0.11.0 y colmena-2.0.0. Funciona bien.
    su respuesta funcionó a la perfección, muchas gracias este problema me habían llevado horas de dolor! Creo que estoy usando la Colmena la versión 1.1.0.
    son bienvenidos. U puede votar a mi respuesta??
    Me encantaría, pero me trataron de empujar el icono de la flecha hacia arriba y dijo: necesito una reputación de 15 o más para mis votos para ser público… creo que es porque soy nuevo en el Desbordamiento de la Pila necesito para obtener más votos para mí antes de que yo pueda votar. A menos que sepa de otra manera yo estaría feliz de hacerlo!

    OriginalEl autor aaronshan

  2. 7

    No se puede insertar complejo tipo de datos directamente de la Colmena.Para la inserción de estructuras que tienen la función de named_struct. Usted necesita para crear una tabla ficticia con los datos que desea insertarse en las Estructuras de la columna de la tabla deseada.
    Como en el caso de crear una tabla ficticia

    CREATE TABLE DUMMY ( houseno:    STRING
               ,streetname: STRING
               ,town:       STRING
               ,postcode:   STRING);
    

    A continuación, insertar en la tabla deseada hacer

    INSERT INTO struct_test SELECT named_struct('houseno',houseno,'streetname'
                      ,streetname,'town',town,'postcode',postcode) from dummy;
    

    OriginalEl autor Amit_Hora

  3. 2

    No hay necesidad de crear cualquier tabla ficticia : sólo tiene que utilizar el comando :

    insert into struct_test
    select named_struct("houseno","house_number","streetname","xxxy","town","town_name","postcode","postcode_name");
    

    OriginalEl autor Suman Kumar

  4. 0

    es Posible:

    usted debe dar los nombres de las columnas en la sentencia de ficticio o de otra tabla.

    INSERT INTO TABLE struct_test
    SELECT NAMED_STRUCT('houseno','123','streetname','GoldStreet', 'town','London', 'postcode','W1a9JF') AS address 
     FROM dummy
    

    O

    INSERT INTO TABLE struct_test
    SELECT NAMED_STRUCT('houseno',tb.col1,'streetname',tb.col2, 'town',tb.col3, 'postcode',tb.col4) AS address 
     FROM table1 as tb
    

    OriginalEl autor Carlos Gomez

Dejar respuesta

Please enter your comment!
Please enter your name here