目前,我在GCS存储桶中有一个CSV,它每天都会由Google Cloud上托管的管道更新。我已经使用这个CSV通过云UI导入功能在MySQL数据库中填充了一个表,没有问题。
我想做的是让这个导入每天在设定的时间运行,以更新表数据,因为我的管道将更新我的CSV。我看不到任何UI功能可以做到这一点,也不确定最好的方法是什么。我更像是一个数据分析师,而不是SWE,所以试图破解Cloud Run这样的功能有点棘手。。。
更新:我最终做了一些事情来解决我的问题。TL;DR BigQuery+事件触发功能:
-
我放弃了MySQL实例,转而使用BigQuery表。我考虑过使用联邦表(外部数据源,对于像我这样的新手来说(,但由于读取时间慢,可能需要定期探索数据,我觉得这对我来说太笨重了
-
我创建了一个函数,当在GCS存储桶中添加或覆盖文件时触发该函数。这个函数导致CSV导入到我的表中,经过一些修改,我可以截断(覆盖(数据,这对如何设置管道很有用。这要归功于guillaume blaquiere和Mehmet Karakose提出的这条路,但就其本身而言,我还不够熟练,无法亲自编写和设置函数。
-
为了获得第二名,我使用了rickt.org上的这个非常方便的指南:https://rickt.org/2018/10/22/poc-automated-insert-of-csv-data-into-bigquery-via-gcs-bucket-python/.这提供了一个逐步编写和设置功能以触发GCS铲斗更改的过程。
-
对于那些想知道我的修改:
a。我添加了一个job_config.write_disposition行,设置为write_TRUNCATE以覆盖
b。我还更改了uri值,使其只包含我指定的一个CSV,而不是bucket中的所有文件。
有一个小的权限问题,以确保与该功能相关的服务帐户可以访问我的文件/存储桶,但没有太大的问题。测试该函数显示成功,我的BigQuery表按预期进行了更新。我将在接下来的几个晚上进行监控,以确保这一点继续有效,并编辑此回复,以防我因任何意外原因被误解。
目前,GCP的产品有默认的管道,BigQuery、Cloud Spanner、DataStore等。这些管道是从Dataflow提供的。Dataflow不支持云存储上的文本文件到云SQL(Mysql等(
我想,你可以写函数。如果doc添加了云存储,它会读取所有文档并在MySQL中写入表的相关部分。
或
您可以使用gcloud命令工具或restapi(测试版(自动导入MySQL。为了更好地理解,请阅读本文档。
如果您有CSV,并且希望在Datastudio中可视化数据,我建议您使用BigQuery。这是一个拥有大量功能的PB级数据仓库!!
其中之一是能够直接从云存储读取数据并对其进行查询:联合查询。它不是最有效的,但对你来说是最有用的。
您还可以读取该文件并将结果存储在具有INSERT ... SELECT ...
语句的表中。
最后,您可以在BigQuery中加载CSV文件。也不难,但需要更多的代码(在云存储中创建文件时捕获事件,然后将其加载到BigQuery(。但对于像这样简单的代码,我相信你可以找到云函数和云运行的例子。
因此,当数据在BigQuery中时,您可以简单地使用SQL查询来请求它们,就像使用MySQL一样。BigQuery是一种无服务器产品,您只需支付存储的数据量(如果存储在BigQuery中,则为存储在云存储中的数据量(以及您处理的数据量。
您还有很多很棒的文章来解释如何通过分区和聚类来限制BigQuery的成本;我还写了一篇关于配额的文章