Tengo una tabla en la colmena de la siguiente manera,

table1

Cola   | Colb  |  Colc |  Cold  |
---------------------------------
...etc
efo18   691 123 5692                                 
efo18   691 345 5657
...etc
fsx31   950 291 23456                                                         
fsx31   950 404 23456                                                          
fsx31   950 343 23456                                                         
fsx31   950 182 23456                                                         
fsx31   950 120 45042                                                         
fsx31   950 161 23456  
....etc
klz57   490 121 3330                                                          
klz57   490 113 3330                                                          
klz57   490 308 3330                                                          
klz57   490 411 3330                                                           
klz57   490 161 3330                                                          
klz57   386 108 3330                                                          
klz57   490 113 3330                                                          
klz57   490 125 3330                                                          
klz57   490 165 3330                                                          
klz57   490 166 3330  
...etc
---------------------------------

Quería otra tabla de table1 datos con los que tiene
mismo valor para Cold en un grupo
y dentro de eso, aquellos que tienen el mismo Colb tener un sub-grupo de
y dentro de ese sub-grupo, los havin mismos valores de Cola pertenecer a un grupo.
En otras palabras, cada combinación única de Cola,Colb,Cold a ser una fila.Y filas repetidas resumirse.

insert into table table2(Col1 string,Col2 string,Col3 string,Count int) select cola,colb,cold,count(*) from table1 group by cold,colb,cola;

Me esperaba esto,

Col1   | Col2  |  Col3     |  Count  |
-------------------------------------
efo18    691     5692         1
efo18    691     5657         1
fsx31    950     23456        5   <-----1
fsx31    950     45042        1   <-----1
klz57    490     1234         9   <-----2
klz57    386     1234         1   <-----2
--------------------------------------

Tengo este,

table2

Col1   | Col2  |  Col3     |  Count  |
-------------------------------------
efo18    691     5692         1
efo18    691     5657         1
fsx31    950     23456        4   <-----1
fsx31    950     25456        1   <-----1
fsx31    950     45042        1   <-----1
klz57    490     1234         8   <-----2
klz57    386     1234         1   <-----2
klz57    490     1234         1   <-----2
--------------------------------------

Lo que no entiendo es que me estoy haciendo un grupo en Cold, a continuación, en Colb seguido por Cola, entonces
¿por qué el Count para las filas marcadas con (<—-1),para los valores de Cola, es en filas diferentes, a pesar de que todo cae en el mismo grupo?
Colc es diferente para estos dos filas, pero no he hecho uso de ella en la agrupación de sp ¿cómo son las dos filas diferentes?.
Del mismo modo, para las filas marcadas con (<—-2), ¿cuál es el problema aquí.

Actualización:

Binary01, yo estaba tratando el ejemplo que dio

hive> select * from xyz;
OK
x        y       z      zz
xxx     111     222     123 NULL    NULL    NULL
xxx     111     222     123 NULL    NULL    NULL
xxx     101     222     123 NULL    NULL    NULL
xux     111     422     123 NULL    NULL    NULL
xxx     111     522     323 NULL    NULL    NULL
xyx     111     622     123 NULL    NULL    NULL
xxx     115     322     123 NULL    NULL    NULL
xxx     111     122     123 NULL    NULL    NULL
xxx     111     223     123 NULL    NULL    NULL
xxy     111     212     143 NULL    NULL    NULL
xxx     117     222     123 NULL    NULL    NULL

¿Cuáles son los valores NULL haciendo allí? He copiado y pegado tu ejemplo, línea por línea. Incluso la creación de la tabla ,

create table xyz(x string ,y string, z string , zz string) 
row format delimited fields terminated by ',';

y el final de la consulta da,

hive> select * from xyztemp;
OK
xux     111     422     123 NULL    NULL    1
xxx     101     222     123 NULL    NULL    1
xxx     111     122     123 NULL    NULL    1
xxx     111     222     123 NULL    NULL    2
xxx     111     223     123 NULL    NULL    1
xxx     111     522     323 NULL    NULL    1
xxx     115     322     123 NULL    NULL    1
xxx     117     222     123 NULL    NULL    1
xxy     111     212     143 NULL    NULL    1
xyx     111     622     123 NULL    NULL    1

2 Comentarios

  1. 4

    Usted debe haber perdido algo. He probado con los siguientes datos similares a los de su tabla y compruebe la salida de su perfectamente bien como se esperaba.

    hive>set hive.cli.print.header=true;
    hive> load data local inpath '/home/brdev/sudeep/testdata.txt' into table xyz;
    hive> create table xyz(x string ,y string, z string , zz string) row format delimited fields terminated by ',';
    hive> select * from xyz;
    OK
    x       y       z       zz
    xxx     111     222     123
    xxx     111     222     123
    xxx     101     222     123
    xux     111     422     123
    xxx     111     522     323
    xyx     111     622     123
    xxx     115     322     123
    xxx     111     122     123
    xxx     111     223     123
    xxy     111     212     143
    xxx     117     222     123
    
    hive>create table xyztemp ( aa string,bb string,cc string , dd int);
    hive>insert into table xyztemp select x,y,zz,count(*) from xyz group by zz,y,x;
    hive> select * from xyztemp;
    OK
    aa      bb      cc      dd
    xxx     101     123     1
    xux     111     123     1
    xxx     111     123     4
    xyx     111     123     1
    xxx     115     123     1
    xxx     117     123     1
    xxy     111     143     1
    xxx     111     323     1
    

    Supongo que la de arriba es la salida que se espera que usted está buscando.

    • Gracias por su respuesta, Compruebe mi actualización. Algo está mal con mi Colmena, tal vez? (Algunos de los ajustes tal vez? )
    • Hola SuvP estoy tomando un archivo separado por comas como entrada.Así que usted puede tomar la entrada en un archivo como un archivo separado por comas y, a continuación, pruebe a cargar en la tabla.
    • Binary01 he utilizado una lista separada por comas demasiado. Revisando en mi navegador (localhost:50075)para xyztemp muestra xux 111 422 123\N\N1. Supongo que esto tiene algo que ver con mi archivo de entrada. He utilizado la tecla Entrar después de cada línea. Es que la cuestión? Tengo la sensación de que hay un problema de espacios. ¿Cómo puedo solucionar eso?
    • Supongo que puede crear usted mismo buscando en el archivo de entrada. Supongo que copiar directamente desde el navegador está causando el problema.
  2. 1

    No seguro de que este es el problema aquí, pero he visto resultados similares en los casos donde los valores de la columna había espacios iniciales o finales en algunas filas. La colmena no tendrá en cuenta 'fsx31' y 'fsx31 ' (tenga en cuenta el espacio final para el segundo) a ser el mismo valor y por lo tanto darles filas individuales cuando la agrupación.

    Lo que sucede cuando se utiliza TRIM para eliminar los espacios iniciales y finales, como así?

    INSERT INTO table table2(Col1 STRING, Col2 STRING, Col3 STRING, Count INT) 
    SELECT cola, colb, cold, count(*) 
    FROM (
        SELECT
            TRIM(cola) AS cola, 
            TRIM(colb) AS colb, 
            TRIM(colb) AS colb 
        FROM table1
        )
    GROUP BY cold, colb, cola;
    

    (El uso de una subconsulta para recortar y alias de las columnas no es estrictamente necesario, pero espero que ayude a aclarar lo que la intención es.)

    Espero que ayude.

Dejar respuesta

Please enter your comment!
Please enter your name here