Я имею в виду ответ Иордании относительно «решения эволюционирующих схем» Dealing with evolving schemas.Таблицы союзов с другой схемой
Как я разделяю подобную проблему, я попытался запросить таблицы с другой схемой и получил следующие результаты:
Select a,b,c
FROM (Select 1 as a, 2 as b), --Test_a
(Select 1 as a, 2 as b, 3 as c), --Test_b
работает отлично ... я поставил Test_a и Test_b в физические таблицы (все поля обнуляемым) и попробовал:
Select a,b,c
FROM (Select a,b, from BI_WORKSPACE.Test_a),
(Select a,b,c from BI_WORKSPACE.Test_b)
Он также прекрасно работает
, но когда я попытался
Select a,b,c
FROM BI_WORKSPACE.Test_a,
BI_WORKSPACE.Test_b
Не удалось ... Есть ли ошибка, что-то я делаю неправильно? Последний образец - тот, который я получил после того, как он позволяет мне «развить» мою схему с течением времени. я бы хотел избежать изменения схемы всех существующих таблиц всякий раз, когда добавляю столбец для поддержки новой бизнес-потребности.
Большое спасибо за помощь.
Причина для спрашивать:. Мы проводим наши данные в «Ежедневные таблицы» поэтому при запросе мы платим только за период мы заинтересованы в Как BQ не поддерживает «динамический SQL», мы создали автономный который принимает шаблон запроса и генерирует запрос на требуемый период. Что-то вроде: Вход:
Select a,b,c FROM [<Source>]
Выход:
Select a,b,c FROM [MYDATASET.TABLE20140201], [MYDATASET.TABLE20140202], [MYDATASET.TABLE20140203], [MYDATASET.TABLE20140204] , [MYDATASET.TABLE20140205] , [MYDATASET.TABLE20140206] , [MYDATASET.TABLE20140207]
Наш процесс не знает логики запроса. Иногда мы добавляем поля для поддержки меняющихся потребностей бизнеса. Использование динамических подвыборок будет усложнять работу персонала, а изменение схемы для всех сотен существующих таблиц дорого и подвержено ошибкам. Любые предложения?
Спасибо Джордана за ваш ответ ... Честно говоря, я бы не ожидал, что первый и второй по work, но если они это сделают, я бы ожидать, что 3-го по работа также ... Я отредактировал вопрос, чтобы лучше объяснить мою мотивацию. –
Помогает ли вам использовать «(SELECT * FROM [MYDATASET.TABLE20140201]) как ваш подзапрос (вместо того, чтобы явно указывать поля? Это не изменит, какие поля вы получите для доступа, поскольку вы 't изменить поля, которые действительно необходимы в запросе. –
Я боюсь, что это не сработало ... Я попытался Выберите a, b, c FROM (SELECT * FROM [BI_WORKSPACE.Test_a]), (SELECT * FROM [BI_WORKSPACE.Test_b]), и получен Ошибка: Поле 'c' не найдено в таблице 'BI_WORKSPACE.Test_a'; –