如何通过 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)
我已经设置了我的服务帐户,我可以 运行 使用 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)