我们如何使用谷歌融合表执行批量SQL SELECT?

时间:2016-07-08 14:50:40

标签: java sql google-fusion-tables

我有ROWID列表,想要获得带有此类ID的行。所以我这样做:

for (Integer id : duplicateIds) {
        String sqlQuery = "SELECT ROWID, date, containerId FROM " + TABLE + " WHERE ROWID = '" + id + "'";
        Fusiontables.Query.Sql sql = db.query().sql(sqlQuery);
        List<List<Object>> row = sql.execute().getRows();
        allRows.addAll(row);
    }

但duplicateIds列表的大小并不小,我认为这种方法并不好,因为执行SQL查询很耗时。 所以,我想知道是否有可能执行批量查询或者可能存在另一种方法?如何提高效率?

UPD。我发现有这样的事情的批量请求。但是我仍然无法做到这一点并获得List&gt;对象的响应。类型。

提前致谢。

2 个答案:

答案 0 :(得分:0)

以下是如何在融合表上执行批处理API请求的示例。您应该注意每个用户每100秒有一个请求配额,我使用Thread.sleep(TIME)函数来避免错误。

       var shoppingcart = (function ()  {

             var _calculatePrice = function() {
                 return this.price * this.amount;
          };
          return {
              calculatePrice : _calculatePrice
           }
        })();

        var goods = {
           name: 'hammer',
           price: 199,
           amount: 2
        }
        shoppingCart.calculatePrice.call(goods)

答案 1 :(得分:0)

这是一个更好的解决方案。您可以创建 SELECT 查询,以检索所需的数据,而无需批处理多个SELECT查询。您只需构建查询即可使用 IN 子句。

首先,取出dulplicateIds数组并将其转换为字符串,注意删除左右括号:

// Get id array as string and remove opening and closing brackets '[' & ']'
String idsAsString = duplicateIds.toString().replaceAll("\\[|\\]", "");

然后使用 IN 子句撰写查询。

// Build Query
String sqlQuery = 'SELECT * FROM ' + TABLE_ID + ' WHERE ROWID IN (\"' + idsAsString + '\")';

Fusion Tables的SQL API没有实现完整的SQL标准,但它仍然非常强大。在以下链接中查看SELECT查询的文档:

https://developers.google.com/fusiontables/docs/v2/sql-reference#Select

列出了一些您可能会在将来发现有用的其他条款。