我正在尝试使用配置单元映射并向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,但是如果它不是必需的话,我想避免这种开销。
我错过了什么吗?我错过了一步还是事情没有做好?
谢谢!
答案 0 :(得分:1)
“cassandra.cf.validatorType”=“Int32Type,DateType,LongType”应与列族/表列数据类型匹配。您的test_table列是blob,因此当您向表中插入数据时,必须将其编码回二进制。
CassandraStorageHandler已弃用。您可以参考http://www.datastax.com/docs/datastax_enterprise3.2/solutions/about_hive获取最新的CqlStorageHandler。