2012-01-20 5 views
1

GAEのデータストアビューアで簡単なレポートを作成しようとしています。 GQLを使うレコードのいくつかのフィールドだけを表示したい。これは可能ですか?データビューアのフィールドを制限する

にはどうすればいいのフィールドを持つエンティティを取るん:

F1、F2、F3、F4、F5、F6

と表示さ

F1、F3、F5、F6

答えて

5

これは不可能です。 the GQL Reference documentationから:

すべてのGQLクエリは常にSELECT *またはSELECT __key__のいずれかで始まります。

およびデータストアの概要のDifferences with SQL sectionから:

データストアを照会する場合、一種のプロパティの サブセットのみを返すすることはできません。 App Engineデータストアは、 のいずれかのエンティティを返すことも、クエリからエンティティキーのみを返すこともできます。制限のこの種が存在する理由については


How Entities and Indexes are Storedについての記事は、GoogleのBigtableの、App Engineのデータストアに電力を供給する分散データベース・システムの背後にある技術的な側面についての優れた洞察力を与えました。 (その他のGoogleサービス)

記事から、データストアのエンティティはいくつかの異なるBigtableに保存されています。 Entity Bigtableにはエンティティのプロパティ全体が格納され、いくつかのオブジェクトにはエンティティのインデックスに従ってソートされたエンティティキーが格納されます(Index Bigtables)。

クエリを実行すると、基本的に2つのステップが実行されます。最初のステップは、クエリがIndex Bigtablesに対して実行され、クエリに一致するエンティティキーのセットを生成することです。 2番目のステップは、キーのセットを使用して、Entity Bigtableからエンティティ全体をフェッチすることです。

したがって、SELECT __key__で始まるクエリを実行すると、データストアは最初の手順を実行するだけですぐに一連のキーを返します。 SELECT *で始まるクエリを実行すると、データストアは両方のステップを実行し、エンティティのセットを返します。

SELECT f1, f3, f5, f6のようなクエリがデータストアでサポートされていない理由については、上記の2番目の手順で何が起こったかをさらに詳しく調べる必要があります。

代わり対応Bigtableの行における個々の列として、各エンティティのプロパティを格納する、単一の列が名前を含むバイナリエンコードされたプロトコルバッファを含む使用される:記事から、Entity Bigtable上ことが述べられています特定のエンティティのすべてのプロパティの値

低レベルプロトコルバッファは、単一の直列化データとして全体エンティティのプロパティを格納するので、エンティティのプロパティのサブセットのみを照会が実際に結果セットをフィルタリングするの余分な後処理工程を取る手段とクエリされたプロパティのみを取得します。これはデータストアのパフォーマンス低下を招き、現時点ではGoogleによってサポートされていない可能性があります。

+0

これは何故でしょうか? – Lumpy

+0

これは現時点でサポートされていない理由を理解した回答を編集しました:) –

関連する問題