Я пытаюсь создать представление для извлечения данных из корзины, исключив определенные папки внутри S3 в Hive. Я смог успешно создать представление на Athena, но не смог сделать то же самое на Hive.
Вид на Афину:
CREATE VIEW test
as
SELECT *
FROM TABLE_A
WHERE NOT ("$PATH LIKE '%PASSENGER_DATA%')
AND NOT ("$PATH LIKE '%CUSTOMER_DATA%');
Не могли бы вы посоветовать, как можно добиться того же на Hive?
Нет такого же средства для фильтрации по пути. Однако, в зависимости от того, какую версию вы используете, вы можете использовать Ranger для исключения данных, чтобы они не отображались.
Если вы должны сделать это путем просмотра, попробуйте использовать:
CREATE TABLE filter_out [blah blah blah]
LOCATION '%CUSTOMER_DATA%'
SELECT *
FROM TABLE_A
WHERE NOT EXISTS (SELECT ID FROM filter_out WHERE TABLE_A.ID = filter_out.ID)
Возможно, вы действительно захотите рассмотреть возможность перемещения данных в отдельные папки. Затем вы можете построить их в виде таблицы с помощью:
CREATE VIEW TABLE_DATA
as
SELECT *
FROM TABLE_A --("$PATH LIKE '%PASSENGER_DATA%')
UNION
SELECT *
FROM TABLE_B -- ("$PATH LIKE '%CUSTOMER_DATA%');
Это, вероятно, также упростит решение ваших проблем с разрешениями.
И при необходимости вы можете легко использовать одну таблицу или обе таблицы.