Snowflake имеет объявленное ограничение в использовании операторов Set (например, UNION
):
При использовании этих операторов:
- Убедитесь, что в каждом запросе выбрано одинаковое количество столбцов.
[...]
Однако, поскольку имена столбцов общеизвестны, можно придумайте надмножество всех уникальных имен столбцов, требуемых в конечном результате, и спроецируйте их явно из каждого запроса.
В вопросе недостаточно информации о том, сколько столбцов перекрывается (47 уникальных столбцов?), или если они все разные (46 + 33 + 25 + 15 = 119 уникальных столбцов?). Ответ на этот вопрос определит количество усилий, необходимых для записи каждого запроса, поскольку для этого потребуется адаптировать запрос из следующей формы:
SELECT * FROM t1
В явную форму с пустышкой столбцы, определенные с допустимыми значениями по умолчанию, которые соответствуют типу данных в таблицах, где они присутствуют:
SELECT
present_col1,
NULL AS absent_col2,
0.0 AS absent_col3,
present_col4,
[...]
FROM
t1
Вы также можете использовать мета-программирование с хранимыми процедурами , чтобы "сгенерировать" такой измененный запрос проверяя имена столбцов независимых результатов, используя Statement::getColumnCount()
, Statement::getColumnName()
, et c. API и формирование расширенной объединенной версии со значениями по умолчанию / пустыми.