BigQuery, как автоматически обрабатывать «двойные имена столбцов» при левом соединении - PullRequest
0 голосов
/ 29 октября 2019

Я работаю с набором данных таблиц, который (a) часто требует объединения таблиц, однако также (b) часто имеет повторяющиеся имена столбцов. Каждый раз, когда я пишу запрос следующим образом:

SELECT 
  t1.*, t2.*
FROM t1 
LEFT JOIN t2 ON t1.this_id = t2.matching_id

... Я получаю ошибку Duplicate column names in the result are not supported. Found duplicate(s): this_col, that_col, another_col, more_cols, dupe_col, get_the_idea_col

Я понимаю, что с BigQuery лучше избегать использования * при выборе таблиц мои таблицы данных не слишком велики + у меня большой бюджет больших запросов, и выполнение этих объединений со всеми столбцами значительно помогает в исследовании данных.

Есть ли в любом случае BigQuery может автоматически обрабатывать / переименовывать столбцыв этих ситуациях (например, префикс столбца с именем таблицы), а не запретить запрос все вместе?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Самый простой способ - выбрать записи, а не столбцы:

SELECT t1, t2
FROM t1 LEFT JOIN
     t2
     ON t1.this_id = t2.matching_id;

Это почти то же, что я делаю для специальных запросов.

Если вам нужны результаты в виде столбцов, а незаписи (они не сильно отличаются по результатам), вы можете использовать EXCEPT:

SELECT t1.* EXCEPT (duplicate_column_name),
       t2.* EXCEPT (duplicate_column_name),
       t1.duplicate_column_name as t1_duplicate_column_name,
       t2.duplicate_column_name as t2_duplicate_column_name
FROM t1 LEFT JOIN
     t2
     ON t1.this_id = t2.matching_id;
0 голосов
/ 29 октября 2019

Есть ли в любом случае BigQuery может автоматически обрабатывать / переименовывать столбцы в таких ситуациях (например, префикс столбца с именем таблицы), в отличие от того, чтобы не разрешить запрос все вместе?

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

Так что ниже

#legacySQL
SELECT t1.*, t2.*
FROM table1 AS t1 
LEFT JOIN table2 AS t2 
ON t1.this_id = t2.matching_id   

будет выводить, где все имена столбцов будут иметь префикс с соответствующими псевдонимами, такими как t1_this_id и t2_matching_id

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