巨大的where子句

时间:2012-10-11 13:16:48

标签: google-fusion-tables

我在融合表中遇到数据可视化问题。例如,我有下一个代码:

function initialize() {
    map = new google.maps.Map(document.getElementById('map_canvas'), {
        center: new google.maps.LatLng(38.71980474264242, -121.552734375),
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    fusionLayer = new google.maps.FusionTablesLayer({
        query: {
            select: 'column',
            from: 'tableId',
            where: "a huge where clause"
        },
        map: map
    });
}

正如你所看到的,我在查询的'where'选项中有一个“huge where子句”。但是在初始化期间,google maps API会对URI执行大量的GET请求:

  

http://mt1.googleapis.com/mapslt?hl=en-US&lyrs=ft:tableId|sc:'column'|sg:{huge_where_clause}&x=6&y=13&z=5&w=256&h=256&source=apiv3&token=74442

所有请求都失败,状态代码为414:Request-URI Too Large。

所以,我的问题是:是否可以使用巨大的where子句查询fusion表或使用POST请求而不是GET?

1 个答案:

答案 0 :(得分:1)

GET URL限制为~2k个字符,正如您所指出的,您当然可以创建一个更长的复杂WHERE子句,这会导致此问题。

如果你刚刚超过限制,一个解决方案可能是重命名你的列,以便它们不那么长。

或者,您可以简化查询。如上所述,这是一个经过的查询:

zip IN ('zip1', 'zip2', ..., 'zipN')

但你可能会重写以保存很多角色:

zip < zipN