Google Cloud Datastore では一部のメタデータにプログラムからアクセスできます。これによりメタプログラミングやバックエンドの管理機能の実装が可能となり、一貫性のあるキャッシュ保存が簡単になります。これはたとえばアプリケーション用にカスタムのデータストア ビューアを作成する場合に役立ちます。使用できるメタデータとしては、エンティティ グループ、名前空間、エンティティの種類、アプリケーションが使用するプロパティに関する情報の他、各プロパティのプロパティ表現などが挙げられます。
アプリケーションに関する一部のメタデータは、GCP Console の Cloud Datastore ダッシュボードでも提供されています。ただし、ここに表示されるデータは、いくつかの重要な側面において関数から返されるデータとは異なります。
- 鮮度: API を使用してメタデータを読み取ると最新のデータが取得されますが、ダッシュボードのデータが更新されるのは 1 日 1 回だけです。
- 内容: ダッシュボードの一部のメタデータは API 経由では使用できません。また、その逆の場合もあります。
- 速度: メタデータの取得とクエリはデータストアの取得とクエリと同じ方法で課金されます。名前空間、種類、プロパティに関する情報をフェッチするメタデータ クエリは、実行速度が遅いのが一般的です。目安としては、N 個のエンティティを返すメタデータ クエリにかかる時間は、それぞれが単一のエンティティを返す N 個の通常のクエリにかかる時間とほぼ同じです。また、プロパティ表現クエリ(キーのみではないプロパティ クエリ)は、キーのみのプロパティ クエリよりも遅くなります。エンティティ グループのメタデータに対するメタデータ取得は、通常のエンティティを取得する場合よりもいくらか高速になります。
メタデータ クエリ
次の 3 種類の特別なエンティティは、メタデータ クエリ用に予約されています。
| エンティティ | 説明 |
|---|---|
__namespace__ |
アプリケーション エンティティで使用されているすべての名前空間を検索するために使用します。 |
__kind__ |
特定の種類をクエリするために使用します。 |
__property__ |
種類のプロパティを基準としてクエリを実行するために使用します。 |
これらの種類は、アプリケーションにすでに存在する可能性がある同じ名前の他のエンティティとは競合しません。このような特殊な種類に対してクエリを実行することで、目的のメタデータを含むエンティティを取得できます。
メタデータ クエリによって返されるエンティティは、Datastore の現在の状態に基づいて動的に生成されます。種類が __namespace__、__kind__、__property__ のローカル エンティティ オブジェクトを作成することはできますが、Datastore に保存しようとすると失敗します。
名前空間クエリ
名前空間クエリを使用すると、アプリケーションのエンティティで使用されているすべての名前空間を検索できます。これにより、複数の名前空間にまたがる管理機能などのアクティビティを実行できます。
名前空間クエリは、__namespace__ という特別な種類のエンティティを返します。このようなエンティティのキー名は名前空間の名前です。(空の文字列 "" で示されるデフォルトの名前空間は例外です。空の文字列は有効なキー名ではないため、この名前空間には数値 ID の 1 が代わりにキーとして設定されます)。このタイプのクエリは、特殊な疑似プロパティ __key__ を対象とした範囲のフィルタリングだけをサポートします。このプロパティの値はエンティティのキーです。結果は __key__ 値の昇順で並べ替えることができます(降順にすることはできません)。__namespace__ のエンティティはプロパティを持たないため、キーのみのクエリでもキーのみではないクエリでも同じ情報が返されます。
次の例では、startNamespace 変数と endNamespace 変数に割り当てられた値を範囲とするアプリケーションの名前空間のリストが返されます。
C#
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore C# API のリファレンス ドキュメントをご覧ください。
Go
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Go API のリファレンス ドキュメントをご覧ください。
Java
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Java API のリファレンス ドキュメントをご覧ください。
Node.js
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Node.js API のリファレンス ドキュメントをご覧ください。
PHP
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore PHP API のリファレンス ドキュメントをご覧ください。
Python
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Python API のリファレンス ドキュメントをご覧ください。
Ruby
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Ruby API のリファレンス ドキュメントをご覧ください。
GQL
SELECT __key__ FROM __namespace__ WHERE __key__ >= KEY(__namespace__, 'namespace-a') AND __key__ < KEY(__namespace__, 'namespace-b')
種類クエリ
種類クエリは、種類が __kind__ であるエンティティを返します。このエンティティのキー名はエンティティの種類の名前です。このタイプのクエリは暗黙的に現在の名前空間に限定され、__key__ 疑似プロパティを対象とした範囲のフィルタリングだけをサポートします。結果は __key__ 値の昇順で並べ替えることができます(降順にすることはできません)。__kind__ のエンティティはプロパティを持たないため、キーのみのクエリでもキーのみではないクエリでも同じ情報が返されます。
次の例では、アプリケーションで使用されている種類のリストが出力されます。
C#
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore C# API のリファレンス ドキュメントをご覧ください。
Go
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Go API のリファレンス ドキュメントをご覧ください。
Java
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Java API のリファレンス ドキュメントをご覧ください。
Node.js
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Node.js API のリファレンス ドキュメントをご覧ください。
PHP
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore PHP API のリファレンス ドキュメントをご覧ください。
Python
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Python API のリファレンス ドキュメントをご覧ください。
Ruby
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Ruby API のリファレンス ドキュメントをご覧ください。
GQL
SELECT __key__ FROM __kind__
プロパティ クエリ
プロパティ クエリは、種類が __property__ であるエンティティを返します。これは、エンティティの種類に関連付けられたインデックス付きプロパティを示します(インデックス付けされていないプロパティは含まれません)。プロパティが p、種類が k で表現されるエンティティは次のように構築されます。
- エンティティのキーの種類は
__property__で、キー名は p です。 - エンティティの親キーの種類は
__kind__で、キー名は k です。 - エンティティの
property_representation配列プロパティには、プロパティのすべての表現が格納されます。
たとえば、データストアに name と done というプロパティを持つ 2 つの Task エンティティが格納されているとします。
Key: 'Task:1'
name: 'Read some properties'
done: true
Key: 'Task:2'
name: 'Climb'
done: null
この場合、__property__ クエリによって返される 2 つのエンティティは次のようになります。
Key: '__kind__:Task/__property__:name'
property_representation: [ 'STRING' ]
Key: '__kind__:Task/__property__:done'
property_representation: [ 'BOOLEAN', 'NULL' ]
プロパティ クエリは暗黙的に現在の名前空間に限定され、特定の祖先または __key__ 疑似プロパティの範囲を対象とする限定的なフィルタリングをサポートします。
プロパティ クエリは、キーのみのクエリのほうがキーのみではないクエリよりも効率的です。これは、プロパティの表現を収集する必要がないためです。次の例では、アプリケーションのエンティティの種類すべての名前と、それぞれに関連付けられているプロパティを取得します。
C#
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore C# API のリファレンス ドキュメントをご覧ください。
Go
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Go API のリファレンス ドキュメントをご覧ください。
Java
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Java API のリファレンス ドキュメントをご覧ください。
Node.js
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Node.js API のリファレンス ドキュメントをご覧ください。
PHP
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore PHP API のリファレンス ドキュメントをご覧ください。
Python
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Python API のリファレンス ドキュメントをご覧ください。
Ruby
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Ruby API のリファレンス ドキュメントをご覧ください。
GQL
SELECT __key__ FROM __property__
プロパティ クエリ: プロパティ表現
キーのみではないプロパティ クエリは「プロパティ表現クエリ」と呼ばれ、各プロパティで使用される値の型に関する追加情報を返します。種類が k であるプロパティ p を表すエンティティの property_representation プロパティは、種類 k のエンティティに含まれる p の値のすべての表現を格納する配列です。
各値は次のように表現されます(一部の値の型の表現が共通する点に注意してください)。
| 値の型 | 表現 |
|---|---|
| 整数 | INT64 |
| 浮動小数点数 | DOUBLE |
| ブール値 | BOOLEAN |
| テキスト文字列 | STRING |
| バイト文字列 | STRING |
| 日時 | INT64 |
| データストアのキー | REFERENCE |
| 埋め込みエンティティ | STRING |
| 配列 | 配列の要素の表現 |
| 地理的座標 | POINT |
| Null | NULL |
次の例では祖先プロパティ クエリを使用して、種類が Task であるプロパティのすべての表現を検索します。
C#
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore C# API のリファレンス ドキュメントをご覧ください。
Go
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Go API のリファレンス ドキュメントをご覧ください。
Java
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Java API のリファレンス ドキュメントをご覧ください。
Node.js
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Node.js API のリファレンス ドキュメントをご覧ください。
PHP
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore PHP API のリファレンス ドキュメントをご覧ください。
Python
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Python API のリファレンス ドキュメントをご覧ください。
Ruby
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Ruby API のリファレンス ドキュメントをご覧ください。
GQL
SELECT * FROM __property__ WHERE __key__ HAS ANCESTOR KEY(__kind__, 'Task')
プロパティ クエリ: フィルタリング
プロパティ クエリは __kind__ キーまたは __property__ キーによる祖先フィルタリングをサポートします。これにより、上記のプロパティ表現クエリで見られるように、クエリの結果が単一の種類またはプロパティに限定されます。
プロパティ クエリは、疑似プロパティ __key__ を対象とした範囲を使ってフィルタリングすることもできます。この場合、キーは __kind__ または __property__ のいずれかのエンティティを示します。結果は __key__ 値の昇順で並べ替えることができます(降順にすることはできません)。フィルタリングは(種類、プロパティの順に並んだ)種類とプロパティのペアに適用されます。たとえば、次のようなプロパティを持つエンティティがあるとします。
- 種類が
Taskで次のプロパティを持つcreatedprioritytags
- 種類が
TaskListで次のプロパティを持つcreated
この状況で、次のようにキーのみのプロパティ クエリを実行します。
C#
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore C# API のリファレンス ドキュメントをご覧ください。
Go
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Go API のリファレンス ドキュメントをご覧ください。
該当なしJava
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Java API のリファレンス ドキュメントをご覧ください。
Node.js
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Node.js API のリファレンス ドキュメントをご覧ください。
該当なしPHP
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore PHP API のリファレンス ドキュメントをご覧ください。
Python
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Python API のリファレンス ドキュメントをご覧ください。
該当なしRuby
Cloud Datastore 用のクライアント ライブラリをインストールして使用する方法については、Cloud Datastore のクライアント ライブラリをご覧ください。詳細については、Cloud Datastore Ruby API のリファレンス ドキュメントをご覧ください。
GQL
SELECT __key__ FROM __property__ WHERE __key__ >= KEY(__kind__, 'Task', __property__, 'priority')
これにより、次の種類とプロパティ名のペアが取得されます。
Task, priority
Task, tags
TaskList, created
結果には種類 Task、TaskList のプロパティが含まれていますが、種類 Task の created プロパティは含まれていません。これは、クエリで指定された範囲の外にあるためです。