簡體   English   中英

如何創建使用 Python 調用腳本/存儲過程的 BigQuery 計划查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM