После долгих исследований я (вроде) разобрался. Оказывается, это функция уровня базы данных для запроса объектов уровня схемы, например. имена таблиц динамически. BigQuery не поддерживает форматирование в имени таблицы, например, таблицы в соответствии с вопросом (например, 2020product5
, 2019product5
, 2018product6
) не могут быть запрошены напрямую. Однако у него есть функция TABLE_SUFFIX, которая позволяет вам динамически обращаться к таблицам, учитывая, что изменения в именах таблиц расположены в конце таблицы. (Эта функция также позволяла разбивать даты, и многие инструменты, которые используют BQ в качестве приемника данных, используют это. Поэтому, если вы используете BQ в качестве приемника данных, есть большая вероятность, что ваш исходный источник данных уже делает это). Таким образом, имена таблиц, такие как (product52020
, product52019
, product62018
), также могут быть доступны динамически и, конечно же, из студии данных, используя следующее:
SELECT * FROM `project_salsa_101.dashboards.product*` WHERE _table_Suffix = CONCAT(@product_id,@year)
P.S.: Использовал python для создания грязного скрипта, который зацикливался на продуктах и таблицах, копировал и создавал новые, который выглядит следующим образом: (Добавление скрипта с отформатированной строкой, так что это может быть полезно для тех, у кого такой случай с номинальными усилиями)
import itertools
credentials = service_account.Credentials.from_service_account_file(
'project_salsa_101-bq-admin.json')
project_id = 'project_salsa_101'
schema = 'dashboards'
client = bigquery.Client(credentials= credentials,project=project_id)
for product_id, year in in itertools.product(product_ids, years):
df = client.query(f"""
SELECT * FROM `{project_id}.{schema}.{year}product{product_id}`
""").result().to_dataframe()
df.to_gbq(project_id = project_id,
destination_table = f'{schema}.product{product_id}{year}',
credentials = service_account.Credentials.from_service_account_file(
'credentials.json'),
if_exists = 'replace')
client.query(f"""
DROP TABLE `{project_id}.{schema}.{year}product{product_id}`""").result()
person
Hamza
schedule
24.10.2020