首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云SQL:定期将数据导出到CSV,避免重复

云SQL:定期将数据导出到CSV,避免重复
EN

Stack Overflow用户
提问于 2020-03-13 10:12:15
回答 4查看 601关注 0票数 0

我希望定期将数据从Cloud (postgres)导出到CSV文件(例如,每天一次),每次导出DB行时,都不能在下一个导出任务中导出数据。

我目前正在使用POST请求来使用云调度程序执行导出任务。这里的问题(或者至少在我知道之前)是,它无法在单个http导出请求中导出和删除(或更新行以标记为导出)。

是否有可能删除(或更新)已在http导出请求中使用任何Cloud参数自动导出的行?

如果不是,我假设它应该是由pub/sub触发的云功能(使用调度程序每天向pub/sub发送一次数据),但是,是否有任何最佳方法来获取从select状态检索到的所有行的ID (将在导出中使用)来删除(或更新)它们?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-09 14:28:20

谢谢你的回答。有多种方法可以做到这一点,所以我要解释一下我是如何做到的。

在数据库中,我包含了一个列,该列包含插入数据的日期。

我对以下主体使用了云调度程序:

代码语言:javascript
复制
{"exportContext":{"fileType": "CSV", "csvExportOptions" :{"selectQuery" : "select \"column1\", \"column2\",... , \"column n\" from public.\"tablename\" where \"Insertion_Date\" = CURRENT_DATE - 1" },"uri": "gs://bucket/filename.csv","databases": ["postgres"]}}

此调度程序将每天触发一次,并且只导出前一天的数据。

另外,我必须注意,在我在云调度器中使用的查询中,您可以选择要导出的列,这样可以避免导出包含Insertion_Date的列,而只使用该列作为辅助。

最后,云调度程序将在桶中自动创建csv文件。

票数 1
EN

Stack Overflow用户

发布于 2020-03-13 17:27:33

您可以同时使用返回导出和删除(或更新)。

代码语言:javascript
复制
\copy (DELETE FROM pgbench_accounts WHERE aid<1000 RETURNING *) to foo.txt

问题就在撞车的时候。在允许提交删除之前,您如何知道foo.txt一直在写入并刷新到磁盘?或者相反,foo.txt是部分(或完全)编写的,但是崩溃会阻止DELETE提交。

您不能使系统幂等,以便多次导出同一行不会产生问题吗?

票数 1
EN

Stack Overflow用户

发布于 2020-03-19 16:49:10

您可以使用设置来实现您想要的目标:

1.创建一个云函数,从订阅Pub/Sub主题的数据库中提取信息。2.创建Pub/Sub主题以触发该功能。3.创建调用Pub/Sub触发器的作业。4.运行云调度器作业。5.然后创建一个触发器,该触发器激活另一个Cloud函数,以便在csv创建后从数据库中删除所有所需的数据。

在这里,我给你们留下一些文件,如果你们决定走这条路的话,这些文件可以帮助你们。

使用Pub/Sub触发云函数:https://cloud.google.com/scheduler/docs/tut-pub-sub

从云函数连接到Cloud:https://cloud.google.com/sql/docs/mysql/connect-functionsCloud

存储教程:https://cloud.google.com/functions/docs/tutorials/storage

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60668534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档