使用SUM, ROUND &转换SQL语句算进GQL


Converting SQL statements with SUM, ROUND & COUNT into GQL

我正在使用官方PHP API SDK和"tomwalder/PHP -gds"与Google数据存储进行交互。

Google Datastore(和GQL)对于我正在处理的99%的数据(几列,一致的数据结构,数十亿行)是完美的,除了一些查询。

最大的问题,我有,是将这个SQL语句转换成GQL:

SELECT column_a, ROUND(SUM(column_b),0) as total_score, COUNT(column_a) as company_name 
FROM companies 
WHERE column_a <> '' AND column_c = '2015-05-30'
GROUP BY column_a 
ORDER BY total_score desc;
如果GQL中没有ROUND, SUM或COUNT可用,那么将数据缓冲到内存并使用PHP来运行计算是唯一的选择吗?对于每个查询20MB的数据,这似乎不是最有效的方法。我真的不想迁移到BigQuery,因为我喜欢从数据读取时Datastore的响应性。

在Datastore中使用聚合函数既不便宜又不方便。

你需要以不同的方式处理问题,并在你的应用层中维护计数/总和等。

这是传统(强大)MySQL灵活性的范式转变。

我个人将两者结合使用。

CloudSQL用于聚合和报告我的应用层更新的数据。

注:感谢使用PHP-GDS!!我正在考虑添加一些聚合的帮助工具到GitHub,如果你想提出一个请求。

汤姆