我有一些IoT设备正在将一些数据发送到Google Cloud Datastore。
数据存储已在数据存储模式下设置为Cloud Firestore。
每行具有以下字段:
这些都是ParticleEvent
类型。
我希望运行以下查询; select current_temperature, target_temperature from ParticleEvent where device_id = ‘abc123’ order by published_at desc
。
当我尝试运行该查询时出现以下错误:
GQL查询错误:您的数据存储区没有此查询所需的综合索引(开发人员提供)。
因此,我设置了一个包含以下内容的index.yaml
文件:
indexes:
- kind: ParticleEvent
properties:
- name: data
- name: device_id
- name: published_at
direction: desc
- kind: ParticleEvent
properties:
- name: current_temperature
- name: target_temperature
- name: device_id
- name: published_at
direction: desc
我使用了gcloud
工具将其成功发送到数据存储区,并且可以在“索引”标签中看到两个索引。
但是,当我尝试运行查询时,仍然出现上述错误。
我需要添加/更改索引以使此查询正常工作吗?
答案 0 :(得分:2)
尽管在评论中我只是建议select *
(我认为这是最好的方法)
有一种方法可以使您的查询正常工作。
- kind: ParticleEvent
properties:
- name: device_id
- name: published_at
direction: desc
- name: current_temperature
- name: target_temperature
之所以select
结束,是因为您需要较低级别的current_temperature
和target_temperature
索引。
为什么我不建议这种方式是因为,当您的数据增长并且您需要更多的索引组合时,只是因为 select
个特定的列。您的索引大小将成倍增长。
但是,如果您确定只使用一次并总是查询这样的数据,然后随意为其建立索引,就可以了。
或者,如果您的计算机与Google云之间的连接带宽很小,以至于下载更多数据会导致您滞后。