1 回答

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
經(jīng)過(guò)大量研究后,我(有點(diǎn))解決了這個(gè)問(wèn)題。事實(shí)證明,這是一個(gè)數(shù)據(jù)庫(kù)級(jí)功能,可以動(dòng)態(tài)查詢模式級(jí)實(shí)體(例如表名)。BigQuery 不支持表名稱內(nèi)的格式設(shè)置,例如無(wú)法直接查詢相關(guān)表(例如2020product5、2019product5、 )。2018product6但是,它確實(shí)有一個(gè) TABLE_SUFFIX 函數(shù),允許您動(dòng)態(tài)訪問(wèn)表,因?yàn)楸砻母奈挥诒淼哪┪?。(此功能還允許進(jìn)行 dateweise 分區(qū),并且許多使用 BQ 作為數(shù)據(jù)接收器的工具都可以利用此功能。因此,如果您使用 BQ 作為數(shù)據(jù)接收器,則很有可能您的原始數(shù)據(jù)源已經(jīng)在這樣做)。因此,像 ( product52020, product52019, product62018) 這樣的表名稱也可以動(dòng)態(tài)訪問(wèn),當(dāng)然也可以使用以下命令從 Data Studio 訪問(wèn):
SELECT * FROM `project_salsa_101.dashboards.product*` WHERE _table_Suffix = CONCAT(@product_id,@year)
PS:使用 python 創(chuàng)建一個(gè)臟腳本,該腳本循環(huán)遍歷產(chǎn)品和表,并復(fù)制并創(chuàng)建新的腳本,如下所示:(添加帶有格式化字符串的腳本,因此對(duì)于任何有這種情況的人來(lái)說(shuō),只需付出一定的努力,它可能會(huì)很有用)
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()
添加回答
舉報(bào)