通过 Sqoop 将数据从 Oracle DB 加载到 Cassandra 后,我能够通过 Cassandra 和 Hive 查看我的数据。我被告知,在执行此操作时,每个文件都会生成 2 个文件,从而产生空间问题。为了解决这个问题,我删除了 Hive 中的表并创建了一个外部表并将其映射到 Cassandra 中的列族。但我无法查看 Hive 表中的任何数据。我正在使用 Datastax Enterprise 3.0.1。使用 Sqoop,我将表“test”从 Oracle DB 迁移到键空间“test_keyspace”中同名的 Cassandra 列族。我能够使用以下命令通过 cassandra-cli 查看数据:list test;
在 cqlsh 中描述列族给出以下结果:
CREATE TABLE test (
rowkey text PRIMARY KEY,
bar text,
gump bigint,
home text,
note text,
pay text
) WITH
comment='' AND
comparator=text AND
read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
default_validation=text AND
min_compaction_threshold=4 AND
max_compaction_threshold=32 AND
replication_on_write='true' AND
compaction_strategy_class='SizeTieredCompactionStrategy' AND compression_parameters:stable_compression='SnappyCompressor';
我用来创建 Hive 表的命令是:
CREATE external TABLE test (
rowkey string,
bar string,
gump string,
home string,
note string,
pay string
)
STORED BY 'org.apache.hadoop.hive.cassandra.CassandraStorageHandler'
TBLPROPERTIES ( "cassandra.ks.name" = "test_keyspace" );
当我在 Hive 中输入“show tables”时,会列出该表。但是“select * from test”会将表中除行键之外的所有值显示为 NULL。
有人知道解决办法吗?
答案1
尝试像这样创建表:
CREATE external TABLE test (
rowkey string,
bar string,
gump string,
home string,
note string,
pay string
)
STORED BY 'org.apache.hadoop.hive.cassandra.CassandraStorageHandler'
WITH SERDEPROPERTIES("cql.primarykey"="rowkey"
TBLPROPERTIES ( "cassandra.ks.name" = "test_keyspace", "cassandra.cql.type"="text, text, text, text, text, text" );