如何通过 Python google 客户端 API 列出我预定的查询?

How do I list my scheduled queries via the Python google client API?

我已经设置了我的服务帐户,我可以 运行 使用 client.query() 在 bigQuery 上查询。

我可以将所有预定查询写入这种新的 client.query() 格式,但我已经有很多预定查询,所以我想知道是否有办法可以 get/list 预定查询然后使用该信息 运行 来自脚本的查询。

使用云 SDK 有一个命令可以让你得到你想要的以及更多: bq ls --transfer_config --transfer_location=US --format=prettyjson,更多信息请点击此处 -

在您的命令提示符下执行此操作(假定已安装 google 云 SKD)将为您提供以下内容(红色部分 = 计划查询 sql):


接下来,您可以 运行 将其作为 Python 中的 shell 子进程并解析出来:

import pandas as pd
import json
from subprocess import PIPE, run, call

response = run('bq ls --transfer_config --transfer_location=US --format=prettyjson', 
               stdout=PIPE, 
               stderr=PIPE, 
               universal_newlines=True, 
               shell=True)

response

这是上面的前几行:

CompletedProcess(args='bq ls --transfer_config --transfer_location=US --format=prettyjson', returncode=0, stdout='[\n  {\n    "dataSourceId": "scheduled_query",\...

然后要到达 sql,您可以通过 response.stdout 访问输出并解析为 json,然后将您的方式字典化为所需的结果或将其放入 pandas数据帧格式并从那里开始,如下所示:

data = json.loads(response.stdout)
df = pd.json_normalize(data)

df.columns =

dataSourceId
datasetRegion
destinationDatasetId
disabled
displayName
name
schedule
state
updateTime
userId
emailPreferences.enableFailureEmail
params.destination_table_name_template

### sql located in this one
params.query

params.write_disposition
scheduleOptions.startTime
params.overwrite_destination_table
params.source_dataset_id
params.source_project_id
scheduleOptions.endTime
nextRunTime

是的,您可以使用 APIs。当您不知道使用哪一个时,我有一个提示。使用@Yev

提出的命令

bq ls --transfer_config --transfer_location=US --format=prettyjson

但记录 API 调用。为此使用 --apilog <logfile name> 参数

bq --apilog ./log ls --transfer_config --transfer_location=US --format=prettyjson

而且,神奇的是,您可以找到命令调用的 API: https://bigquerydatatransfer.googleapis.com/v1/projects/<PROJECT-ID>/locations/US/transferConfigs?alt=json

然后,简单的 google 搜索会将您带到 correct documentation


在 python 中,将依赖项添加到 requirements.txt 中:google-cloud-bigquery-datatransfer 并使用该代码

from google.cloud import bigquery_datatransfer

client = bigquery_datatransfer.DataTransferServiceClient()
parent = client.common_project_path("<PROJECT-ID>")
resp = client.list_transfer_configs(parent=parent)
print(resp)