Tengo 5 tablas diferentes almacenadas en Hive y me gustaría saber cómo crear una nueva tabla, llamada total_counts que tiene 5 columnas cada una con el recuento total de filas de las tablas individuales. Entonces, algo como

enter image description here

Mis datos son vuelos por carretera para cada año desde 2015 hasta 2019, por lo que me gustaría una tabla que me dé el número total de accidentes en cada año.

He intentado variaciones de lo siguiente:

create table total_counts
as select COUNT(*)
from flights_2014 as "2014_count", flights_2015 as "2015_count;

Puedo obtener los recuentos de un año individual, pero parece que no puedo darles un encabezado a las columnas, ni puedo averiguar cómo hacerlo para todas mis tablas.

Gracias.

1
o.fithcheallaigh 27 nov. 2020 a las 20:43

2 respuestas

La mejor respuesta
CREATE TABLE total_counts AS
SELECT
    (SELECT COUNT(*) FROM flights_2015) AS 2015_count, 
    (SELECT COUNT(*) FROM flights_2016) AS 2016_count;

Etcetera.

1
mck 27 nov. 2020 a las 17:54

Calcule recuentos en subconsultas y realice combinaciones cruzadas si desea almacenar datos en columnas

CREATE TABLE total_counts AS
SELECT 2015_count.cnt as 2015_count, 2016_count.cnt as 2016_count, ...
  FROM (SELECT COUNT(*) cnt FROM flights_2015) AS 2015_count
       CROSS JOIN
       (SELECT COUNT(*) cnt FROM flights_2016) AS 2016_count
       ...

O lo mismo usando UNION ALL + agregación:

CREATE TABLE total_counts AS
SELECT max(case when yr=2015 then cnt else 0 end) 2015_count, 
       max(case when yr=2016 then cnt else 0 end) 2016_count,      
       ...
  FROM (
       SELECT COUNT(*) cnt, 2015 yr FROM flights_2015
       UNION ALL
       SELECT COUNT(*) cnt, 2016 yr FROM flights_2016
       ...
       ) u
1
leftjoin 29 nov. 2020 a las 17:52