google-bigquery - 在 BigQuery 中批量删除数据传输
问题描述
随着时间的推移,许多不同的人在我们的演示项目中创建了一个测试传输,但从未清理过它。我很想批量删除所有转移。有谁知道这样做的方法?
解决方案
我在Cloud Workflows上构建了类似的东西。
从本质上讲,您需要一个工作流来为您执行从BigQuery 数据传输 API开始的步骤并发出一些命令:
- 获取传输配置列表
- 遍历它们
- 为他们发出删除 API 调用
https://cloud.google.com/bigquery-transfer/docs/reference/datatransfer/rest
我的代码是清理 Cloud Workflows(您需要使用 Transfer Service API 调用稍微调整一下这个)
#cloud workflow to cleanup
main:
steps:
- initialize:
assign:
- project: "marton-data"
- location: "us-central1"
- getList:
call: WorkflowsList
args:
project: ${project}
location: ${location}
result: items
- loopItems:
call: WorkflowListLoopItems
args:
items: ${items}
result: res
- final:
return: ${res}
WorkflowsList:
params: [project,location]
steps:
- list:
call: googleapis.workflows.v1.projects.locations.workflows.list
args:
parent: ${"projects/"+project+"/locations/"+location}
pageSize: 100
result: listResult
- documentFound:
return: ${listResult.workflows}
WorkflowDelete:
params: [name]
steps:
- delete:
call: googleapis.workflows.v1.projects.locations.workflows.delete
args:
name: ${name}
result: deleteResult
- logStep:
call: sys.log
args:
text: ${"Calling "+name+" \r\n Results returned "+json.encode_to_string(deleteResult)}
- deleteDone:
return: ${deleteResult}
WorkflowListLoopItems:
params: [items]
steps:
- init:
assign:
- i: 0
- result: ""
- check_condition:
switch:
- condition: ${items[i].name=="projects/marton-data/locations/us-central1/workflows/workflow_cleanup"}
next: assign_loop
- condition: ${len(items) > i}
next: iterate
next: exit_loop
- iterate:
steps:
- process_item:
call: WorkflowDelete
args:
name: ${items[i].name}
result: result
- assign_loop:
assign:
- i: ${i+1}
next: check_condition
- exit_loop:
return: ${result}
logMessage:
params: [collection]
steps:
- log:
call: http.post
args:
url: https://logging.googleapis.com/v2/entries:write
auth:
type: OAuth2
body:
entries:
- logName: ${"projects/" + sys.get_env("GOOGLE_CLOUD_PROJECT_ID") + "/logs/workflow_logger"}
resource:
type: "audited_resource"
labels: {}
jsonPayload: ${collection}
推荐阅读
- linux - bash中的for循环无法编辑目录中的所有文件
- r - 当结果页面与搜索页面具有相同的 URL 时,如何对结果页面进行网络抓取?
- javascript - 打字机 JS - .typeString 无法正常工作
- java - 如何从具有通配符返回类型的通用函数将返回值分配给对象?
- http-headers - Angular HttpClient 不发送带有 Content-Type 的请求;应用程序/json 标头
- python - 在 HTML 中的绘图上设置配置选项,不使用 show() 函数
- react-native - Ejected Expo App 和 React Native CLI App 有什么区别?
- python - 当我尝试导入 keras_vggface 时,得到“没有名为 'keras.engine.topology' 的模块”
- javascript - 创建一个冷却系统,每个用户单独工作,而不是命令本身 Twitch/Node/TMI
- maven - com.avaya.sce.runtime 包不存在如何修复