Я читаю необработанный ввод, который выглядит примерно так:
20 abc def
21 ghi jkl
mno pqr
23 stu
Обратите внимание, что первые две строки являются «хорошими», а последние две строки — «плохими», поскольку в них отсутствуют некоторые данные.
Вот фрагмент моего запроса улья, который считывает эти необработанные данные во внешнюю таблицу только для чтения:
DROP TABLE IF EXISTS readonly_s3;
CREATE EXTERNAL TABLE readonly_s3 (id string, name string, data string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
Мне нужно получить количество ВСЕХ строк, как «хороших», так и «плохих». Проблема в том, что некоторые данные отсутствуют, и если я, например, сделаю SELECT count(id) as total_rows, это не сработает, поскольку не во всех строках есть id.
Любые предложения о том, как я могу подсчитать ВСЕ строки в этом файле необработанных данных?


Хм . . . Вы можете использовать:
select sum(case when col1 is not null and col2 is not null and col3 is not null then 1 else 0 end) as num_good,
sum(case when col1 is null or col2 is null or col3 is null then 1 else 0 end) as num_bad
from readonly_s3;
@smolkitty . . . Просто используйте count(*) для общего количества строк.
Спасибо, что получает хорошие и плохие строки отдельно. Что, если мне нужно объединить плохие и хорошие строки? Я просто
SUMnum_goodиnum_bad?