Гарантирует ли BigQuery порядок столбцов при выполнении запроса SELECT * из подвыбора? - PullRequest
1 голос
/ 20 января 2020

Гарантирует ли BigQuery порядок столбцов при выполнении SELECT * FROM подзапроса?
Например, заданная таблица t со столбцами a, b, c, d, если бы я выполнил запрос :

SELECT * EXCEPT (a) FROM (SELECT a, b, c, d FROM t)

Будут ли столбцы в результате всегда иметь одинаковый порядок (b, c, d в данном случае)?

1 Ответ

1 голос
/ 20 января 2020

я собираюсь ответить "да"; однако это не задокументировано. Единственная гарантия (согласно документации):

SELECT *, часто называемая звездочкой выбора, создает один выходной столбец для каждого столбца, который отображается после выполнения полного запроса.

Это явно не указывает, что столбцы расположены в том порядке, в котором они определены - т.е. сначала по порядку ссылок в предложении FROM, а затем по порядку в каждой ссылке. Я даже не уверен, что в стандарте SQL указан порядок (хотя у меня есть смутные воспоминания о том, что может быть в стандарте 92).

При этом я никогда не видел любого База данных не производит столбцы в указанном порядке. Кроме того, базы данных (в целом) должны поддерживать порядок столбцов для поддержки INSERT. Вы можете увидеть это сами в INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION. Кроме того, функциональность REPLACE (для замены выражения столбца в списке SELECT) будет иметь меньше смысла, если бы порядок не был гарантирован.

Я мог бы утверждать, что вы "довольно безопасны", предполагая, что порядок такой же. И что мы должны лоббировать Google, чтобы исправить документацию, чтобы прояснить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...