通过配置单元在cassandra中插入数据

时间:2013-12-10 11:03:44

标签: cassandra hive datastax-enterprise

我正在尝试使用配置单元映射并向cassandra插入数据。由于两者都很少,我试着阅读并遵循这一点:http://www.datastax.com/docs/datastax_enterprise3.0/solutions/about_hive

根据我的理解,这就是我的工作:

  • 我使用CassandraStorageHandler在hive中创建一个外部表,使用:key,:column和:value special names映射到右键空间和cassandra列:

    CREATE EXTERNAL TABLE test_table (myproductid INT , mydate TIMESTAMP , quantity BIGINT )
    STORED BY 'org.apache.hadoop.hive.cassandra.CassandraStorageHandler'
    WITH SERDEPROPERTIES ( "cassandra.ks.name" = "test",
    "cassandra.columns.mapping" = ":key,:column,:value");
    
  • 我在hive中插入数据(没有具体):

    INSERT OVERWRITE TABLE test_table
    SELECT anId, aTimestamp, COUNT(*)
    FROM myDataTable
    GROUP BY anId, aTimestamp;
    

似乎从Hive找到了所有内容,表格描述是正确的,数据按预期显示在表格中。 来自Cassandra,DESCRIBE test_table显示:

CREATE TABLE test_table (
key blob,
column1 blob,
value blob,
PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE AND
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'SnappyCompressor'};

数据未输入,如果我SELECT,则显示为二进制数据:

0x3238373639 | 0x323031332d30312d30322030303a30303a3030 |   0x31

我尝试按照文档添加到SERDEPROPERTIES:

"cassandra.cf.validatorType" = "Int32Type, DateType, LongType"

还有:

"cassandra.cql3.type" = "int, timestamp, bigint"

但没有变化。

我阅读了一些文档,特别是关于转换数据类型的UDF,但是如果它不是必需的话,我想避免这种开销。

我错过了什么吗?我错过了一步还是事情没有做好?

谢谢!

1 个答案:

答案 0 :(得分:1)

“cassandra.cf.validatorType”=“Int32Type,DateType,LongType”应与列族/表列数据类型匹配。您的test_table列是blob,因此当您向表中插入数据时,必须将其编码回二进制。

CassandraStorageHandler已弃用。您可以参考http://www.datastax.com/docs/datastax_enterprise3.2/solutions/about_hive获取最新的CqlStorageHandler。