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()
添加回答
举报