2013-12-10 34 views
0

我試圖使用配置單元將數據映射並插入到cassandra中。有兩個只有一點經驗,我試圖閱讀並遵守本:http://www.datastax.com/docs/datastax_enterprise3.0/solutions/about_hive通過配置單元在cassandra中插入數據

從我的理解,這是我做的:

  • 我在蜂巢創建外部表,使用CassandraStorageHandler,映射正確的密鑰空間和卡桑德拉列使用:密鑰:柱:價值特殊的名字:

    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"); 
    
  • 我在蜂巢中插入數據(沒有具體):

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

一切似乎都從Hive中找到,表描述是正確的,數據按預期方式出現在表中。 從卡桑德拉,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

「cassandra.cf.validatorType」=「Int32Type,DateType,LongType」應該與Column Family/Table列數據類型匹配。您的test_table列是blob,所以當您向表中插入數據時,必須將其編碼回二進制。

CassandraStorageHandler已折舊。您可以參考http://www.datastax.com/docs/datastax_enterprise3.2/solutions/about_hive獲取最新的CqlStorageHandler。

+0

謝謝,從Handler變更突出了其他錯誤,但我似乎走在正確的道路上。 – kevad