Hadoop Hive: объясните про UNION ALL
Не могу понять синтаксис данного оператора.
В отличие от "нормального" SQL какой-то он нетипичный, у меня разрыв шаблона..
Тренируюсь "на кошках"..
Цель, которой хотел бы добиться - сделать "отчет", в котором есть строки с промежуточными суммами за какой-то товар и вконце общая "итого".
Решил сделать в три шага - сначала считаем строки, затем Итого, затем собираем в одну таблицу с помощью UNION ALL.
Скрипт:
Работает ООЧЕНЬ интересно!.. В бакете s3n://test.pipeline/hive/result/28012013/t otal-table я в итоге нахожу два файлика, один total_table (итого), другой sum_table (строки с суммами), и никакого намёка на s3_total_table.
Отчего так??
И как будет правильно?
Пожалуйста, помогите разораться.
В отличие от "нормального" 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/t
Отчего так??
И как будет правильно?
Пожалуйста, помогите разораться.
