Требуемый составной индекс не существует, но определен в index.yaml - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть несколько устройств IoT, которые отправляют некоторые данные в хранилище данных Google Cloud.

В хранилище данных установлен режим облачного хранилища в режиме хранилища данных.

В каждой строке есть следующие поля:

  • Имя / ИД
  • current_tempera
  • data
  • device_id
  • event
  • gc_pub_sub_id
  • publ_at
  • target_tempera.

И все они под видом 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, чтобы успешно отправить его в хранилище данныхи я вижу оба индекса на вкладке индексов.

Однако я все еще получаю вышеуказанную ошибку при попытке выполнить запрос.

Что мне нужно добавить / изменить в моих индексах, чтобызаставить этот запрос работать?

1 Ответ

0 голосов
/ 18 сентября 2018

Хотя в комментарии я просто предлагаю 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 очень мала, так что загрузка дополнительных данных приводит к задержке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...