1 回答

TA貢獻1982條經驗 獲得超2個贊
經過大量研究后,我(有點)解決了這個問題。事實證明,這是一個數據庫級功能,可以動態查詢模式級實體(例如表名)。BigQuery 不支持表名稱內的格式設置,例如無法直接查詢相關表(例如2020product5、2019product5、 )。2018product6但是,它確實有一個 TABLE_SUFFIX 函數,允許您動態訪問表,因為表名的更改位于表的末尾。(此功能還允許進行 dateweise 分區,并且許多使用 BQ 作為數據接收器的工具都可以利用此功能。因此,如果您使用 BQ 作為數據接收器,則很有可能您的原始數據源已經在這樣做)。因此,像 ( product52020, product52019, product62018) 這樣的表名稱也可以動態訪問,當然也可以使用以下命令從 Data Studio 訪問:
SELECT * FROM `project_salsa_101.dashboards.product*` WHERE _table_Suffix = CONCAT(@product_id,@year)
PS:使用 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()
添加回答
舉報