#sql #amazon-web-services #amazon-redshift
Вопрос:
Мне нужно выбрать некоторые столбцы из таблицы Amazon Redshift, сохранив column_name в переменную с помощью запроса:-
WITH tmp_variables AS (
SELECT
'Number' AS filter_value,
'required_field2' AS colname1,
'required_field' AS colname2
)
SELECT DISTINCT (SELECT colname1 FROM tmp_variables), (SELECT colname2 FROM tmp_variables)
FROM table_abc where filter_column = (SELECT filter_value FROM tmp_variables);
Здесь условие фильтра работает нормально, но это не возвращает данные, как это обычно дает запрос select, если я использую значения переменных напрямую. Что мне нужно здесь изменить?
Ответ №1:
Это не может сработать (как написано). Redshift компилирует запрос ДО считывания любых данных, поэтому использование данных как части запроса не может работать.
Если вы хотите это сделать, вы можете создать хранимую процедуру, которая считывает таблицу tmp_variables, а затем выдает запрос на основе этих входных данных. Или вы можете использовать какой-либо внешний слой управления, который считывает слой tmp_variables и выдает нужный запрос. Это может быть лямбда-код или код bash или любое количество отраслевых инструментов … Я рекомендую внешний путь, так как он более гибкий и сохраняет красное смещение для обработки больших данных вместо выполнения запросов управления.