#sql #amazon-redshift
#sql #amazon-redshift
Вопрос:
У меня есть запрос ниже:
select
'display_campaign' as source,
client_id,
on_boarding_date
from same_schema.view_one
union all
select
'display creative' as source,
client_id,
on_boarding_date
from same_schema.view_two
Что приводит к следующей ошибке:
Error running query: Assert DETAIL: error: Assert code: 1000 context: col < m_num_colflds - col=13, m_num_colflds=2. query: 51556116 location: tbl_trans.hpp:468 process: padbmaster [pid=102659]
Я думаю, что проблема связана с жестко заданными столбцами, потому что ошибка остается, если я удаляю client_id
и on_boarding_date
(фактические столбцы в обеих таблицах) из запроса:
select
'display_campaign' as source
from same_schema.view_one
union all
select
'display creative' as source
from same_schema.view_two
Удаление from
предложения устраняет ошибку. Следующее работает нормально:
select
'display_campaign' as source
union all
select
'display creative' as source
Ни source
в одной таблице нет столбца, вызываемого. Какие-либо советы?
Комментарии:
1. Это действительно странно и удивило бы меня. Вы уверены, что ваши запросы не слишком упрощены по сравнению с тем, что вы выполняете?
2. Я ошибся, да. Спасибо, что заставил меня перепроверить. Запрос обращается к двум разным представлениям в одной схеме вместо двух разных таблиц, каждая из которых находится в другой схеме. Я не уверен, имеет ли это значение. Я обновил запрос.
3. Но что касается других механизмов, да, это точно. Я могу воссоздать ошибку даже в этих узких случаях.
4. Вы уверены, что проблема не в одном из ваших представлений? Если это поздние представления привязки, ошибки определения не будут отображаться до выполнения.
5. Похоже, что Redshift говорит о том, что вы ищете столбец 13, в котором определены только 2 столбца. col = 13, m_num_colflds = 2 Выдает ошибку из-за того, что столбец, на который ссылаются, выходит за пределы. Поскольку вы ссылаетесь на представления, в игре намного больше SQL, чем то, что предоставляется. Можете ли вы расширить определения представлений?
Ответ №1:
попробуйте явно присвоить тот же тип данных жестко заданным значениям, например 'display_campaign'::text
, эта ошибка связана с несоответствием типов данных, что не очевидно для жестко закодированных строк (похоже, у них неизвестный тип данных, а неизвестный не соответствует неизвестному)