私はcassandraとhectorを初めて使用しているので、cqlクエリを実行しようとしていますが、私は "select * from users"というクエリを実行しますか?cqlクエリを使用してJavaクライアントhectorで異なるデータ型を取得する方法
私のコラムの家族は次のようになります。私は、クエリを実行するには、次のコードを使用し
UPDATE COLUMN FAMILY users
WITH comparator = UTF8Type
AND key_validation_class=UTF8Type
AND column_metadata = [
{column_name: full_name, validation_class: UTF8Type}
{column_name: email, validation_class: UTF8Type}
{column_name: state, validation_class: UTF8Type, index_type: KEYS}
{column_name: gender, validation_class: UTF8Type}
{column_name: birth_year, validation_class: LongType, index_type: KEYS}
{column_name: education, validation_class: UTF8Type}
];
:
CqlQuery<String, String, String> cqlQuery = new CqlQuery<String, String, String>(Keyspace,stringSerializer,stringSerializer,stringSerializer);
cqlQuery.setQuery("select * from users");
QueryResult<CqlRows<String, String, String>> result = cqlQuery.execute();
if (result != null && result.get() != null) {
List<Row<String, String, String>> list = result.get().getList();
for (Row row : list) {
System.out.println(".");
List columns = row.getColumnSlice().getColumns();
for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
HColumn column = (HColumn) iterator.next();
System.out.print(column.getName() + ":" + column.getValue()
+ "\t");
}
System.out.println("");
}
}
しかし、理由は「birth_year」列のバリデーションクラスロング私ができます」値を取得します。それが動作たより
CqlQuery<String, String, Long> cqlQuery = new CqlQuery<String, String, Long>
TutorialBase.tutorialKeyspace, stringSerializer, stringSerializer, longSerializer);
cqlQuery.setQuery("select birth_year from users");
:私はこれに私のクエリを変更した場合
KEY:Carl birth_year: 'strange chars?' full_name:Carl Smith gender:M eduction:electrician state:LA
: は、私は1つのレコードのみがあると仮定し、以下の結果が得られます。
これを行うには1つのクエリでどのようにすることができますか?また、列ファミリの行にブール値や浮動小数点数などのデータ型がある場合はどうすればよいですか?
こんにちはlibjack、あなたの反応に感謝します。 列ファミリのすべての列がデフォルトの検証クラスとしてbyteBufferを持つ場合にのみ可能であることを意味しますか?これは、私が欲しいものではありません。なぜなら、データをcassandraに挿入するとき、有効なデータのチェックは機能していないからです。 birth_yearという列に文字列を挿入することは可能です。 私はあなたのコードを試していますが、メソッド 'getLong()'は認識されません。 – Rubenski
私は間違ったwhithを見つけました: "col.getValue()。getLong()" "column.getValueBytes()。getLong()"にする必要があります 私の前の質問は解決しました。列ファミリに複数のvalidation_classeを含めることは可能です。 – Rubenski
Right、getLong()はByteBufferのメソッドなので、getValue()はByteBufferがHColumnに指定された型である場合にのみ返します。 – libjack