Image

Imagemesier wrote in Imageru_java

Hadoop Hive: объясните про UNION ALL

Не могу понять синтаксис данного оператора.
В отличие от "нормального" SQL какой-то он нетипичный, у меня разрыв шаблона..

Тренируюсь "на кошках"..
Цель, которой хотел бы добиться - сделать "отчет", в котором есть строки с промежуточными суммами за какой-то товар и вконце общая "итого".
Решил сделать в три шага - сначала считаем строки, затем Итого, затем собираем в одну таблицу с помощью UNION ALL.

Скрипт:
-- На минуточку представим, что dynamodb_table у нас уже есть..
-- "снапшот" с таблицы из Динамы.
CREATE TABLE snapshot_table 
AS SELECT Id, BicycleType, Price FROM dynamodb_table;

-- Собираем строки "отчета"
CREATE TABLE sum_table 
AS SELECT BicycleType AS Title, SUM(Price) AS Total FROM snapshot_table GROUP BY BicycleType;

-- Считаем "Итого"
CREATE TABLE total_table (Title STRING, Total DOUBLE);
INSERT OVERWRITE TABLE total_table 
SELECT 'Total: ', SUM(Price) FROM snapshot_table;

-- Будем выкладывать в S3
CREATE EXTERNAL TABLE s3_total_table (Title STRING, Total DOUBLE)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
LOCATION 's3n://test.pipeline/hive/result/28012013/total-table';

-- заполняем таблицу
INSERT OVERWRITE TABLE s3_total_table
SELECT * FROM (
SELECT * from sum_table
UNION ALL
SELECT * from total_table)
s3_total_table;



Работает ООЧЕНЬ интересно!.. В бакете s3n://test.pipeline/hive/result/28012013/total-table я в итоге нахожу два файлика, один total_table (итого), другой sum_table (строки с суммами), и никакого намёка на s3_total_table.
Отчего так??
И как будет правильно?
Пожалуйста, помогите разораться.