我可以将数据从 CloudSQL 实时加载到 BigQuery 吗?



目前正在抓取数据并将其转储到cloudSQL postgres数据库中..这些数据趋于指数级增长,我需要一种有效的方法来执行查询..数据库以~3GB/天的速度增长,我希望将数据保留至少3个月..因此,我已经将我的CloudSQL连接到BigQuery..以下是我在BigQuery上运行的查询示例,但我对此持怀疑态度..不确定查询是否在Postgres中执行或大查询..

SELECT * FROM EXTERNAL_QUERY("project.us-cloudsql-instance", "SELECT date_trunc('day', created_at) d, variable1, AVG(variable2) FROM my_table GROUP BY 1,2 ORDER BY d;");

似乎查询是在postgreSQL中执行的,而不是BigQuery..这是真的吗? 如果是,我有没有办法将数据从PostgreSQL实时加载到BigQuery并直接在BigQuery中执行查询?

我认为您正在使用federated queries.这些查询旨在从 BigQuery 和 CloudSQL 获取数据:

BigQuery Cloud SQL

联合使 BigQuery 能够实时查询驻留在 Cloud SQL 中的数据,而无需复制或移动数据。它支持Cloud SQL中的MySQL(第二代(和PostgreSQL实例。

查询是在 CloudSQL 中执行的,这可能会导致性能低于在 BigQuery 中运行的性能。

EXTERNAL_QUERY在云 SQL 中执行查询,并将结果作为临时表返回。结果将是一个BigQuery表。

现在,目前将数据加载到 BigQuery 的方法来自:GCS、其他 Google Ad Manager 和 Google Ads(可读数据源(、通过在数据流管道中使用流式插入、DML 语句和 BigQuery I/O 转换插入单个记录。

这个解决方案非常值得一看,它与你需要的非常相似:

MySQL to GCS 运算符对 MySQL 表执行 SELECT 查询。SELECT 提取所有大于(或等于(最后一个高水位线的数据。高水位线是表的主键(如果表是仅追加的(,或者是修改时间戳列(如果表接收更新(。同样,SELECT 语句也会在时间(或行(上回溯一点,以捕获上次查询中可能删除的行(由于上述问题(。

通过Airflow,他们设法使BigQuery每15分钟与MySQL数据库保持同步。

尽管从技术上讲,可以将查询重写为

SELECT date_trunc('day', created_at) d, variable1, AVG(variable2) 
FROM EXTERNAL_QUERY("project.us-cloudsql-instance", 
"SELECT created_at, variable1, variable2 FROM my_table")
GROUP BY 1,2 ORDER BY d;

不过不建议这样做。最好尽可能多地在CloudSQL上进行聚合和过滤,以减少必须从CloudSQL传输到BigQuery的数据量。

相关内容

  • 没有找到相关文章

最新更新