我正在尝试查询数据存储区,我的查询如下所示:
SELECT *
FROM mydb
WHERE Latitude = "18.1" AND Number > "1"
Run Code Online (Sandbox Code Playgroud)
它不起作用.我在数据存储区查询框中收到此错误:
GQL查询错误:您的数据存储区没有此查询所需的复合索引(开发人员提供).
运行我的代码时出现此错误:
找不到匹配的索引.推荐索引是:\n-种类:mydb \n属性:\n - 名称:位置\n - 名称:数字\n
像这样的简单请求工作:
SELECT *
FROM mydb
WHERE Number > "1" AND Number < "5"
Run Code Online (Sandbox Code Playgroud)
我这里只访问一个列可能这就是为什么?
不,
然后我尝试了这样的请求:
SELECT *
FROM mydb
WHERE Latitude = "18.1" AND Number = "1"
Run Code Online (Sandbox Code Playgroud)
这很有效.
我尝试查找解决方案,但我遇到了此页面:https://cloud.google.com/datastore/docs/tools/indexconfig#Datastore_About_index_yaml
经过那个页面后,我收集到了我需要一个index.yaml文件.它应该放在一个名为WEB-INF的文件夹中.但我没有这个文件夹.
这是我的代码的一小部分:
Query<Entity> query = Query
.gqlQueryBuilder(Query.ResultType.ENTITY,
"SELECT * FROM " + kind + " WHERE Location = @location AND Number <= @number")
.setBinding("number", "5").setBinding("location", …Run Code Online (Sandbox Code Playgroud) java google-app-engine gql google-cloud-datastore app-engine-flexible
我正在尝试使用GQL从数据存储区中获取一些数据.
当我SELECT * FROM Kind提出请求时,它可以正常工作,我会收到数据.
但是,当我尝试:
SELECT * FROM kind where num < 1234
Run Code Online (Sandbox Code Playgroud)
我得到一个不允许的字面错误.
我甚至尝试用引号做到这一点:
SELECT * FROM kind where num < '1234'
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误.
有没有人遇到过这个?
这是代码:
Query<Entity> query = Query.gqlQueryBuilder(Query.ResultType.ENTITY,
"SELECT * FROM " + kind + " WHERE num < '100'"
).build();
QueryResults<Entity> results = datastore.run(query);
while (results.hasNext()) {
Entity result = results.next();
myList.add(result.getString("num"));
Run Code Online (Sandbox Code Playgroud) 我认为这是不可能的,如果添加了新索引,则必须重新加载所有数据.
这应该发生吗?
我正在查询看起来像这样的数据存储区:
Query<Entity> query = Query.gqlQueryBuilder(Query.ResultType.ENTITY,
"SELECT * FROM " + kind
+ " WHERE Location = place").build();
results = datastore.run(query);
Run Code Online (Sandbox Code Playgroud)
结果存储在一个 QueryResults<Entity> results;
然后我遍历结果并提取我需要的数据.
这种类型有大约10000个实体,我将它们全部提取出来.
while (results.hasNext()) {
Entity result = results.next();
....
}
Run Code Online (Sandbox Code Playgroud)
这需要10秒才能实现.有没有办法减少这个时间?我知道循环结果导致减速.
我将epoch格式时间转换为正常格式,但是当我将它转换为日期时,我得到了,MM-dd-yyyy hh:mm:ss.
如果我想单独列出我必须使用SimpleDateFormat的日期或时间.但是这会返回一个String.我想知道是否有办法使这个字符串成为Date类型.