2

我正在我的公司实施我的第一个“自动化”数据摄取管道。我们的客户不想让我们在他们的数据库中进行任何调用(甚至创建副本等)。到目前为止,我认为最好的解决方案是端点(让他们将数据推送到存储中),这样我们就可以使用它并继续所有的数据科学过程。我的云提供商是 Google Cloud,我的客户使用 MySQL 服务器。

我一直在网上阅读许多主题,并访问了以下链接:

Google Cloud Data Lifecycle - 对于批处理,它谈到了 Cloud Storage、Cloud Transfer Appliance、Transfer Appliance

签名 URL - 这些 URL 是有时间限制的资源,用于访问(例如,Google Cloud Storage)并将数据写入其中。

我的简单解决方案是用户签名 URL -> 云存储 -> 数据流 -> BigQuery。这是一个好方法吗?

总而言之,我正在寻求有关最佳实践的建议以及让用户在 GCP 中插入数据而不暴露他的数据或我的基础架构的可能方法。

禁忌:

  • 客户端将定期发送数据(每天一次摄取)
  • 数据是半结构化的(我将创建和内部管道进行转换)
  • 预处理后,数据必须发送到 BigQuery
4

2 回答 2

1

此处可能不需要签名的 URL 和数据流。当您不希望用户拥有 Google 帐户来访问 Cloud Storage 时,通常会使用签名 URL,但在处理可恢复上传时也会考虑更多。如果您知道您的客户在推送数据时将拥有一个 Google 帐户,那么可以跳过它(尤其是因为代码在后端而不是在客户的移动应用程序中运行,所以不需要超时来保护私钥)。您可以简单地使用 App Engine 创建一个基本的 Web 应用程序,客户端将使用该应用程序执行每日推送,然后将其上传到 Cloud Storage 存储桶执行可恢复上传. App Engine 还将确保文件格式正确,并遵循您在上传之前定义的特定约束。

至于 Dataflow,由于它的最佳用途是流式传输,而在您的情况下,它是一种被动的批量摄取,因此当您需要每天只进行一次转换时,为持续运行的服务付费可能不是最好的方法。更有效的是使用Cloud Functions预处理和应用转换,这将由Cloud Storage 存储桶中的对象更改通知触发。然后,该函数将使用其 API 将数据推送到 BigQuery。

完整的流程是:App Engine Web 应用清理转储 -> 存储 API -> 存储桶对象更改通知 -> 触发云函数 (CF) -> CF 下载对象 -> CF 执行转换 -> CF 将行保存到 BigQuery

GAE -> GCS -> CF -> BQ

于 2020-02-07T18:52:41.447 回答
0

在我看来,gsutil 可以完成将数据定期推送到云存储的工作。一般我们可以用gsutil传输不太大的文件。

我会亲自编写一个包含 gsutil cp 命令的 cron 作业,以将文件从本地系统推送到云存储桶。

从 mysql 读取和写入文件可以通过简单的 spring boot 作业来完成。

Mysql -> (写入文件) -> 文件 -> gsutil cp -> 云存储

于 2021-11-03T00:09:26.193 回答