[英]How do I create a BigQuery Scheduled Query that calls a script/stored procedure with Python?
我正在嘗試修改我繼承的 python 腳本(我是 Python 的新手),它創建位於 json 文件中的 BigQuery 計划查詢。 這個腳本工作正常,直到我需要向它添加一個存儲過程。
存儲過程沒有目標表、目標數據集或寫入首選項。 但是,如果我將這些 null 留空或不傳遞它們,我會收到錯誤消息,告訴我需要提供目標表和數據集。 如果我通過了它們,那么 BigQuery 會告訴我我沒有腳本的目標表。 我發現了很多關於簡單設置的文檔,但沒有關於調用腳本的文檔。
以下是我到目前為止所擁有的示例。
json
{
"query_file": "./scheduled/gaps.sql",
"schedule": "Every 15 Minutes",
"dest_dataset": "dataset",
"dest_table": "gaps"
},
{
"query_file": "./scheduled/stored_procedure.sql",
"schedule": "Every 15 Minutes",
"dest_dataset": "",
"dest_table": ""
}
調用它的地方,它與文檔中的非常相似
transfer_config = bigquery_datatransfer.TransferConfig(
destination_dataset_id=schedule.dest_dataset,
display_name=schedule.formatted_display_name(),
data_source_id="scheduled_query",
params={
"query": query.replace("${project}.", f"{self._project_id}."),
"destination_table_name_template": schedule.dest_table,
"write_disposition": "WRITE_TRUNCATE",
"partitioning_field": ""
},
schedule=schedule.schedule
)
result = self._transfer_client.create_transfer_config(
bigquery_datatransfer.CreateTransferConfigRequest(
parent=self._parent,
transfer_config=transfer_config,
service_account_name=self._service_account_name
),
)
計划查詢旨在運行...查詢。 存儲過程不是查詢,它是一個過程,您可以從查詢中調用它。
該介紹告訴您您有 2 種類型 object:查詢和存儲過程。 您必須在 JSON 模式中進行改進並添加 object 的類型(查詢、function、過程、視圖等),並且您的代碼需要相應地執行不同的 BigQuery API 調用。
但是,請注意,該設計中存在一個陷阱,因為某些 object 可能與其他人存在依賴關系。 例如,您創建了一個存儲過程和一個使用該存儲過程的查詢。 存儲過程必須在預定查詢之前創建,否則會失敗。
所以,你要解決的問題並不簡單。 這就是為什么對於那些類型的依賴關系和配置,像 Terraform 這樣的 IaC(基礎設施即代碼)工具在管理依賴關系(顯式或隱式)方面非常強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.