PROGRAMMING

投稿日:2018-03-08 更新日:

Google Cloud Datastore で複雑なクエリを実行する

今回は、Google Cloud Datastoreでフィルタリングとソートと同時にやろうとしたところ
エラーが発生してしまったので、その事象と解決策を紹介します。

* 開発環境
ホストOS: Windows10
ゲストOS: Ubuntu16.04(Vagrant)
Python 3.5.2
pip 8.1.1
Flask 0.12.2

* Pythonのソースコード
client = datastore.Client(PROJECT_ID)
query = client.query(kind='users')
query.order = ['name']
query.add_filter('age', '=', 24)
results = list(query.fetch())

上記のコードを実行すると、以下のようなエラーが発生しました。

raise make_exception(headers, error_status.message, use_json=False)
gcloud.exceptions.BadRequest: 400 no matching index found. recommended index is:
- kind: users
  properties:
  - name: name
  - name: age

どうやら、単純なクエリ用のインデックス(1 つのプロパティに関するクエリなど)は自動的に作成されるが
複雑なクエリ用のインデックスは、index.yaml という設定ファイルで定義する必要があるらしいです。
ひとまず設定ファイルを作成します。
設定ファイルの中身はエラーで出てきたものをそのまま貼り付ければOK。

* WEB-INF/index.yaml
indexes:
- kind: users
  properties:
  - name: name
  - name: age

インデックスを作成(更新?)するため、以下のコマンドを実行します。
$ gcloud datastore create-indexes WEB-INF/index.yaml
Configurations to update:

descriptor:      [WEB-INF/index.yaml]
type:            [datastore indexes]
target project:  [PROJECT ID]

Do you want to continue (Y/n)?  y

再度Pythonのスクリプトを実行すると、無事目的のデータを取得することができました!

-PROGRAMMING
-, ,


comment

メールアドレスが公開されることはありません。

関連記事

Webエンジニア 歴5年 ポートフォリオ&経歴

Webエンジニア 歴5年 ポートフォリオ&経歴 これから本格的に個人事業主として独立して働いていこうと思い 私のポートフォリオや経歴をまとめました!! Web関連のお仕事を誰に依頼しようか迷ってる… …

Flask(Python)でWebアプリ開発!初心者でも簡単!

Flask(Python)でWebアプリ開発!初心者でも簡単! 今回はFlaskというPythonのフレームワークを使って Webアプリケーションを作成する方法を紹介します。 * 実行環境 ホストOS …

Google Cloud Datastore に外部からアクセスする方法

Google Cloud Datastore に外部からアクセスする方法 * 実行環境 ホストOS: Windows10 ゲストOS: Ubuntu16.04(Vagrant) Python 3.5. …

新人プログラマ が 実務で心がけておくべき4つのこと

新人プログラマ が 実務で心がけておくべき4つのこと こんにちは。 今回は、エンジニア歴4年の私から見た 研修を終えたばかりの新人さんが実務で苦労しないために 意識してほしい4つのことを紹介したいと思 …

エンジニア の 私が仕事を受注する際に設けたルール

エンジニア の 私が仕事を受注する際に設けたルール こんにちは、フリーランスエンジニアのかわはらです。 大変ありがたいことに、2020年に入ってからより一層 たくさんの方にお仕事をご依頼いただくことが …