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