Итак, у меня есть таблица представления с именем table_1
и поле раздела с именем business_date
. Thie table_1
создается с использованием необработанной таблицы с именем data_mart.customer_raw
.
Из этой таблицы вытекает множество бизнес-потребностей, одна из которых — проверка транзакций клиентов в каждом конце месяца.
Вот как я обычно делаю свой запрос:
SELECT
customer_id
,total_transaction
FROM
table_1
WHERE
business_date IN ('2024-01-31', '2024-02-29', '2024-03-31')
Это работает хорошо, но проблема в том, что мне приходится вручную создавать фильтр business_date, что станет проблемой, если мне понадобится более 10 дат.
Вот обходной путь, который я пробовал для этой проблемы:
WITH dim_date AS (
SELECT
DISTINCT business_date
FROM
table_date
WHERE
eom_flag IS TRUE
)
SELECT
customer_id
,total_transaction
FROM
table_1
WHERE
business_date IN (SELECT business_date FROM dim_date)
Примечание: table_date
— таблица со списком дат.
Обходной путь выше приводит к этой ошибке:
Невозможно выполнить запрос к таблице «data_mart.customer_raw» без фильтра по столбцам «business_date», который можно использовать для исключения разделов.
Есть ли способ решить эту ошибку?
@NithishKumarRamisetty Это отличная документация, но, к сожалению, она не отвечает на мой вопрос выше.
Комментарий г-на Нитиша идеален. Он просит вас просмотреть документацию, которая находится на месте. Ошибка, которую вы получаете, связана с тем, что вы запрашиваете таблицу, для которой ОБЯЗАТЕЛЬНО требуется предоставить фильтр разделов, а вы его не предоставили. Что такое «customer_raw»? Я предполагаю, что это исходная таблица для просмотра таблицы?
@Kolban Да, table_1 — это таблица представления, которая ссылается на таблицу customer_raw. Мой вопрос в том, что запрос работает, когда я использую этот фильтр business_date IN ('2024-01-31', '2024-02-29', '2024-03-31')
, но не работает, когда я использую business_date IN (SELECT business_date FROM dim_date)
; есть ли для этого какая-то особая причина?
Кстати, я нашел ответ, который помогает моему запросу: stackoverflow.com/questions/67240620/…; но все еще не отвечает на мой вопрос выше.
Согласно ответу, опубликованному в ссылке на стек to limit the partitions that are scanned in a query, you need to use a constant expression to filter the partition column.
, ваш первый запрос удовлетворяет следующему условию, тогда как второй запрос может не удовлетворять этому условию, поскольку он может не быть константой. Таким образом, он выдает ошибку о фильтре по столбцам «business_date».
Я полагаю, что изменение запроса для поддержки этого условия может решить проблему.
Публикация ответа в виде вики сообщества на благо сообщества, которое может столкнуться с этим вариантом использования в будущем. Не стесняйтесь редактировать этот ответ для получения дополнительной информации.
Привет @Ирен Рамадан! Можете ли вы проверить, полезна ли следующая документация?