使用 API 将 Bigquery 数据导出到外部应用程序的最佳 GCP 架构
The best GCP architecture for exporting Bigquery data to an external application with API
我将以下这些 GCP 产品一起用于 CRM 系统:
- 云SQL
- 应用引擎
- 大查询
每周一次,外部应用程序以这种方式从 Bigquery 导出数据:
- 外部应用程序使用令牌向 Appengine 发出请求。
- AppEngine 从云端检索此令牌的权限 SQL,进行一些额外的计算以获得允许的 ID 列表。
- Appengine 运行使用这些 ID 过滤的 Bigquery 查询。类似这样的东西:SELECT * FROM table WHERE id IN(ids)
- Appengine 在 JSON.
中使用未修改的查询结果响应外部应用程序
问题是导出不是很频繁,但数据量可能很大,我不想用这些数据加载 AppEngine。在这种情况下还有哪些其他 GCP 产品有用?请记住,我需要从 Appengine 和 CloudSQL.
检索权限
不清楚 JSON 是直接来自 BigQuery 查询结果,还是您在应用程序中对 render/format 进行了额外处理。我假设直接结果。
想到的一个选择是利用云存储。您可以使用 signed url 功能为您的(潜在的大)结果提供 time-limited link,而无需公开 public 访问权限。
加上 BigQuery 将结果导出到 GCS 的能力(通过 export job, or using the newer EXPORT DATA SQL 语句,您可以 运行 查询并将结果直接传送到 GCS。
有了这个,您可以简单地将用户重定向到当前流程末尾的已签名 URL。这里还有一些额外的功能是互补的,例如使用 GCS 数据生命周期功能自动老化和删除文件,因此您无需担心结果的缓慢积累。
我将以下这些 GCP 产品一起用于 CRM 系统:
- 云SQL
- 应用引擎
- 大查询
每周一次,外部应用程序以这种方式从 Bigquery 导出数据:
- 外部应用程序使用令牌向 Appengine 发出请求。
- AppEngine 从云端检索此令牌的权限 SQL,进行一些额外的计算以获得允许的 ID 列表。
- Appengine 运行使用这些 ID 过滤的 Bigquery 查询。类似这样的东西:SELECT * FROM table WHERE id IN(ids)
- Appengine 在 JSON. 中使用未修改的查询结果响应外部应用程序
问题是导出不是很频繁,但数据量可能很大,我不想用这些数据加载 AppEngine。在这种情况下还有哪些其他 GCP 产品有用?请记住,我需要从 Appengine 和 CloudSQL.
检索权限不清楚 JSON 是直接来自 BigQuery 查询结果,还是您在应用程序中对 render/format 进行了额外处理。我假设直接结果。
想到的一个选择是利用云存储。您可以使用 signed url 功能为您的(潜在的大)结果提供 time-limited link,而无需公开 public 访问权限。
加上 BigQuery 将结果导出到 GCS 的能力(通过 export job, or using the newer EXPORT DATA SQL 语句,您可以 运行 查询并将结果直接传送到 GCS。
有了这个,您可以简单地将用户重定向到当前流程末尾的已签名 URL。这里还有一些额外的功能是互补的,例如使用 GCS 数据生命周期功能自动老化和删除文件,因此您无需担心结果的缓慢积累。