Мне нужно создать МАТЕРИАЛИЗИРОВАННЫЙ ВИД на столе. Один из столбцов очень проблемный. Мне нужно изменить его значения и тип данных в запросе. Я хотел бы спросить вас, как быстро это делается при создании matview?
У меня есть куча таблиц как результат некоторых процессов декодирования. Чтобы сделать эти процессы более эффективными, мне нужно создать, например, тестовые запросы (и некоторые другие вещи, не относящиеся к этому вопросу). Итак, в общем, мне нужно создать МАТЕРИАЛИЗИРОВАННЫЙ ВИД таблиц, как уже упоминалось. Один из столбцов содержит неверные данные с типом wrond (возвращает TEXT вместо VARCHAR). К счастью, я мог быстро их расшифровать, но приведение типов - это совсем другое.
Проблема в том, что из-за недостатка опыта я не могу найти правильный способ сразу изменить значения и тип! У меня было два решения, но они выглядят не очень элегантно:
1) Я предварительно создал таблицу и изменил значение столбцов после раздела SELECT, чем я создал matview из этой таблицы (это медленно и сложно для десятков строк)
2) Я КИСТИЛ сам оператор CASE, в котором я меняю значения, и закрыл его с помощью END AS VARCHAR (он работал хорошо, за исключением того, что имена полей исчезли из matview, и это меня очень огорчило).
Таким образом, second_column останется без преобразования как ТЕКСТ:
CREATE MATERIALIZED VIEW IF NOT EXISTS some_schema.some_matview AS
(SELECT
first_column,
CASE
WHEN second_column = '1' THEN 'A'
WHEN second_column = '2' THEN 'B'
END AS second_column,
third_column,
FROM base_schema.base_table);
Таким образом, second_column, вероятно, отображается как VARCHAR, но имена полей не отображаются в matview:
CREATE MATERIALIZED VIEW IF NOT EXISTS some_schema.some_matview AS
(SELECT
first_column,
CAST(CASE
WHEN second_column = '1' THEN 'A'
WHEN second_column = '2' THEN 'B'
END AS VARCHAR),
third_column,
FROM base_schema.base_table);
Я также пробовал некоторые другие предположительно правильные формы созвездия CAST-CASE, но все они привели меня к различным ошибкам.
В итоге: мне нужно, чтобы second_column отображался как VARCHAR в моем matview со значениями «A» или «B» вместо «1» или «2», которые являются ТЕКСТАМИ. Результаты, которые я получаю, не соответствуют моим ожиданиям, однако они более или менее верны.