Cassandraを使用していますが、任意の列ファミリーのコンテンツを表示するデータブラウザーを作成したいと思います。UIグリッドを構成するために列名を取得する必要があります。すべての行の列の名前を収集することは可能ですか?
3 に答える
Cassandra 1.1を使用している場合の最良の方法:
SELECT column_name FROM system.schema_columnfamilies WHERE keyspace_name = X AND columnfamily_name = Y
http://www.datastax.com/dev/blog/schema-in-cassandra-1-1も参照してください。
この答えにはいくつかの部分があります。
まず、特定の質問に答えるには、sliceQueryを使用して行のすべての列を取得する必要があります。空のByteBufferを開始値と終了値として渡して、すべての列を効果的に要求します。
ByteBuffer empty = ByteBufferUtil.EMPTY_BYTE_BUFFER;
sliceQuery.setRange(empty,empty,false,100);
次に、列ファミリーに格納されているデータモデルについて仮定する必要があります。
データモデルが静的である場合(オブジェクトごとに1行、属性ごとに1列)、返される列名は表示する列名である必要があります。ただし、データが動的な方法で保存されている場合(たとえば、時系列のように、列ごとに1つのオブジェクト、同じ主キーを持つすべてのオブジェクトが同じ行に保存されている場合)、列がどのように保存されているかを理解する必要があります。名前(おそらく複合)を解釈する必要があります。動的アプローチのもう1つの非常に一般的な使用法は、CQLを介して定義されたときに列ファミリーが永続化される方法です。
列ファミリーがオブジェクトの格納にどのように使用されているかを知る方法はないことを付け加えておきます。クエリできるスキーマがありますが、それはデータが永続化されるときにデータがどのようにフォーマットされるかを示すだけであり、データ(および属性名)がどのようにシリアル化および逆シリアル化されるかは示しません。
これを試して:
select columnfamily_name from system.schema_columnfamilies where keyspace_name=‘mykeyspace';