Redshift: выбор «жестко заданного значения» в качестве имени столбца фактических столбцов из таблиц в объединении дает код утверждения 1000?

#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 , эта ошибка связана с несоответствием типов данных, что не очевидно для жестко закодированных строк (похоже, у них неизвестный тип данных, а неизвестный не соответствует неизвестному)