BigQuery Global Alias ​​of Wildcard для самостоятельного присоединения - PullRequest
0 голосов
/ 21 ноября 2018

Часто мне нужно присоединить таблицу к себе, и на основе предиката соответствия вывести все столбцы из обеих таблиц.например,

SELECT t1.*, t2.* FROM `t` t1 JOIN `t` t2 USING(Id) WHERE xxxx

Проблема заключается в том, что вы получаете коллизии имен столбцов, поскольку они являются одинаковыми исходными таблицами / столбцами в каждом.

Есть ли способ избежатьэто, но все еще использовать '*'?Я проверил документ и не вижу никаких опций в standardSQL

В идеале, я бы просто хотел, чтобы к проекциям с подстановочными знаками применялся префикс, а не псевдонимы для каждого столбца по отдельности / вручную, так как многие наши таблицы очень широки.и изменить, и ручная прокрутка просто трудоемка

например, я хотел бы иметь возможность сделать что-то вроде этого, чтобы префикс каждого столбца T2 со строкой "t2 _"

SELECT t1.*, t2.* PREFIX("t2_") FROM `t` t1 JOIN `t` t2 USING(Id) WHERE xxxx

В настоящее время, вероятно, не существует такого чистого решения, если только я не пропустил его в doco (надеюсь, что так!), Если есть какое-либо временное решение SQL, использующее другие методы, пожалуйста, дайте мне знать!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Приведенный ниже подход немного спорен, поскольку он указывает на функции BigQuery Legacy SQL, но почему бы не использовать их, когда это удобно: o)

Итак, ниже приведено описание BigQuery Legacy SQL, и вы можетеиспользуйте его, чтобы получить результат, который вам нужен.В случае, если вам понадобятся функции стандартного SQL для дальнейшей обработки этого результата - вы можете просто сохранить его во временной таблице и затем использовать для дальнейшей обработки

Между тем, приведенный ниже код не требует указывать столбцы ирезультат сглаживается

#legacySQL
SELECT *
FROM [project:dataset.table] t1
JOIN [project:dataset.table] t2
ON t1.Id = t2.Id  
WHERE xxxx    

Хитрость в том, что все столбцы таблицы с псевдонимом t1 - будут иметь префикс t1_, как t1_col1, t1_col2 и т. д .;и весь столбец из t2 будет иметь префикс t2_, как t2_col1, t2_col2 и т. д., поэтому нет column name collisions

0 голосов
/ 21 ноября 2018

Просто выберите t1 и t2 вместо:

SELECT t1, t2 FROM `t` t1 JOIN `t` t2 USING(Id) WHERE xxxx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...