Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra CQL2 Java客户端结果二进制数据_Cassandra_Cql - Fatal编程技术网

Cassandra CQL2 Java客户端结果二进制数据

Cassandra CQL2 Java客户端结果二进制数据,cassandra,cql,Cassandra,Cql,我已经使用CQL2构建了一个表,从cqlsh和hive命令提示符中可以看到数据。但当我从java客户机读取数据时,它会显示两列的二进制值,如下所示 "hr1":"\u0000\u0000\u0000\u000e","hr2":"\u0000\u0000\u0000)" 在创建表之后,我们已经从CQL提示符在列“col1”上创建了索引 我的java代码如下所示: public void read() { if (null != cluster && null

我已经使用CQL2构建了一个表,从cqlsh和hive命令提示符中可以看到数据。但当我从java客户机读取数据时,它会显示两列的二进制值,如下所示

"hr1":"\u0000\u0000\u0000\u000e","hr2":"\u0000\u0000\u0000)"
在创建表之后,我们已经从CQL提示符在列“col1”上创建了索引

我的java代码如下所示:

   public void read() {
        if (null != cluster && null != keySpace) {
            CqlQuery<String, String, String> cqlQuery = new CqlQuery<String, String, String>(
                    keySpace, StringSerializer.get(), StringSerializer.get(),
                    StringSerializer.get());
            cqlQuery.setQuery("select * from myTable where col1 = 'HR100'");
            QueryResult<CqlRows<String, String, String>> result = cqlQuery
                    .execute();
            CqlRows rows = result.get();
            for (int i = 0; i < rows.getCount(); i++) {
                RowImpl<String, String, String> row = (RowImpl<String, String, String>) rows
                        .getList().get(i);
                System.out.println("Row key = " + row.getKey());
                for (HColumn<String, String> column : row.getColumnSlice()
                        .getColumns()) {
                    System.out.println("Column name = "
                            + column.getName().toString());
                    System.out.println("Colmn value = "
                            + column.getValue().toString());
                }
            }

        }
    }
public void read(){
if(null!=集群&&null!=键空间){
CqlQuery CqlQuery=新的CqlQuery(
键空间、StringSerializer.get()、StringSerializer.get(),
StringSerializer.get());
setQuery(“从myTable中选择*,其中col1='HR100'”);
QueryResult结果=cqlQuery
.execute();
CqlRows rows=result.get();
对于(int i=0;i
这里的问题是您试图将每个值作为字符串读取。这种方法适用于字符串值。但是当涉及到其他类型时,必须在读取之前指定适当的序列化程序。可以使用列元数据了解columnfamily的数据类型

所以在这种情况下,迭代是不可能的,您必须阅读下面的各个列

ColumnSlice<String, Integer> slice = row.getColumnSlice();
HColumn<String,Integer> col = slice.getColumnByName("column_name");
columnsice slice=row.getcolumnsice();
HColumn col=slice.getColumnByName(“column_name”);
这里我使用了一个整数类型作为值,因为我需要一个整数


请在

中查找更多详细信息,您可以发布您的模式吗?以下是模式定义-创建表myTable(col1 varchar主键、col2 varchar、col3 varchar、hr1 int、hr2 int、hr3 varchar);我提供模式作为4-5条评论的一部分,因为帖子不允许我这样做。ColumnFamily:myTable键验证类:org.apache.cassandra.db.marshal.UTF8Type默认列值验证程序:org.apache.cassandra.db.marshal.UTF8Type单元格排序:org.apache.cassandra.db.marshal.UTF8Type GC宽限秒数:864000压缩最小/最大阈值:4/32读取修复机会:0.1 DC本地读修复机会:0.0刷新时填充IO缓存:写入时假复制:真缓存:密钥\u仅Bloom筛选器FP机会:DefaultBuild索引:[myTable.col3,myTable.hr1,myTable.hr2]列元数据:列名:col2验证类:org.apache.cassandra.db.marshall.UTF8Type列名:hr2验证类:org.apache.cassandra.db.marshall.Int32Type列名:hr1验证类:org.apache.cassandra.db.marshal.Int32Type索引名:ahr索引类型:键索引选项:{}列名:col3验证类:org.apache.cassandra.db.marshal.UTF8Type索引名称:adt索引类型:键索引选项:{}列名:col1验证类:org.apache.cassandra.db.marshal.UTF8Type索引名称:snm索引类型:键索引选项:{}压缩策略:org.apache.cassandra.db.Compression.SizetieredCompressionStrategy压缩选项:sstable_压缩:org.apache.cassandra.io.Compression.SnappyCompressor