亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據自定義參數在表名稱中使用類似 python 的字符串格式查詢

如何根據自定義參數在表名稱中使用類似 python 的字符串格式查詢

開心每一天1111 2023-12-12 15:52:41
所以我有幾個表格,其中包含每年的每種產品,表格如下: 2020product5, 2019product5, 2018product6等等。我在谷歌數據工作室中添加了兩個自定義參數,分別命名為year和product_id,但無法在表名稱本身中使用它們。我之前使用過參數化查詢,但在類似的情況下,where product_id = @product_id但此設置僅在所有數據都在同一個表中時才有效,這不是我當前的情況。在 python 中,我使用類似的字符串格式化程序f"{year}product{product_id}",但在這種情況下顯然不起作用...使用 Bigquery 默認CONCAT和FORMAT函數沒有幫助,因為兩者都會拋出以下驗證錯誤:Table-valued function not found: CONCAT at [1:15]那么,如何在基于自定義參數的表名稱中使用類似 python 的字符串格式來查詢 google data studio 中的 bigquery 表呢?
查看完整描述

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()


查看完整回答
反對 回復 2023-12-12
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號