java 板


LINE

各位高手,想请教有何种方法解决: 自己本身有写出利用程式将Excel的内容自动插入Cassandra资料库内 但是,後来却想到了一些问题。将Excel内容插入Cassandra资料库之前 都要事先在终端机上下cassandra-cli指令进入资料库, 然後create keyspace 名称;再来create column family 名称; 虽然这样可以解决我先前的问题,却发现今天如果有100 case,每个case 都要不同的keyspace和column family的话,就必须要终端机下重复100 次create的指令,这样造成好多不必要的麻烦。所以就想到何不藉由程式 来自动创建??在执行资料插入前,先问使用者keyspace和column family 然後建立这两项名称在资料库内,确定建立後再执行资料插入的动作。 目前有写出一些程式码,但执行时候出现了问题,想问看看是否有人有更 好的解决方法?? P.S:自己以Excel的使用方式来解读keyspace和colum family的用义 1.keyspace:这里的名称代表一个档案(file)的名称 2.column family:这里的名称代表档案里的表单(table)名称 不论如何在插入资料前都要建出档案,才能插入资料(废话~ =.=a) ---------------------------------程式码如下(片段)---------------------------- 1 public class cassandraWriteData2 { 2 3 //cassandra DB 连线参数设定 4 private static final String CASSANDRA_HOST = "localhost"; 5 private static final int CASSANDRA_PORT = 9160; 6 7 //先设定keyspace name 8 private static final String CASSANDRA_KEYSPACE = "keyspace1"; 9 10 //设定编码方式 11 private static final String CHARSET = "UTF-8"; 12 13 /** 14 * @param args 15 */ 16 public static void main(String[] args) { 17 // TODO Auto-generated method stub 18 //cassandra DB 连线 19 TTransport transport = new TFramedTransport(new TSocket(CASSANDRA_HOST, CASSANDRA_PORT)); 20 TProtocol protocol = new TBinaryProtocol(transport); 21 Cassandra.Client client = new Cassandra.Client(protocol); 22 23 try { 24 transport.open(); 25 26 //Drop existing keyspace, if already exists (be careful, as it throws an exception.) 27 //删除cassandra DB内已存在相同的Keyspace 28 client.system_drop_keyspace(CASSANDRA_KEYSPACE); 29 30 //set column family name 31 String authorsColumnFamilyName = "Authors"; 32 33 //Since this is Apache Cassandra greater than 0.7, create our own keyspace 34 //建立自己想要的keyspace; 35 //利用KsDef来实现 36 KsDef keyspaceDefinition = new KsDef(); 37 keyspaceDefinition.name = CASSANDRA_KEYSPACE; 38 keyspaceDefinition.strategy_class = SimpleStrategy.class.getName(); 39 keyspaceDefinition.setReplication_factorIsSet(true); 40 41 //Now, create a column family definition 42 //建立自己想要的column family name; 43 //利用CfDef来实现; CfDef [变数名称] = new CfDef([keyspace],[column family]); 44 CfDef authorsCfDefinition = new CfDef(CASSANDRA_KEYSPACE, authorsColumnFamilyName); 45 46 //设定column family的编码(排)方法 47 authorsCfDefinition.comparator_type = "UTF8Type"; 48 49 //建立三个column field,分别为:title、url、views,并设定编码方式 50 ColumnDef titleColumnDefinition = new ColumnDef(ByteBuffer.wrap("title".getBytes(CHARSET)), "UTF8Type"); 51 ColumnDef urlColumnDefinition = new ColumnDef(ByteBuffer.wrap("url".getBytes(CHARSET)), "UTF8Type"); 52 ColumnDef viewsColumnDefinition = new ColumnDef(ByteBuffer.wrap("views".getBytes(CHARSET)), "LongType"); 53 54 //设定index_type类型 55 viewsColumnDefinition.index_type = IndexType.KEYS; 56 57 //Add ColumnDef to CfDef 58 //将建立的column field insert 59 authorsCfDefinition.addToColumn_metadata(titleColumnDefinition); 60 authorsCfDefinition.addToColumn_metadata(urlColumnDefinition); 61 authorsCfDefinition.addToColumn_metadata(viewsColumnDefinition); //Set CfDefs to KsDef //再将CfDefs型态转成KsDef keyspaceDefinition.cf_defs = Arrays.asList(authorsCfDefinition); //Now, let Cassandra create our new Keyspace with the KsDef we defined. //使用我们转好的KsDef来创建 keyspace client.system_add_keyspace(keyspaceDefinition); //Now, we need to be in keyspace, just like in Cassandra-CLI "USE <keyspace>" command. //实现Cassandra-CLI的use指令来取得keyspace client.set_keyspace(CASSANDRA_KEYSPACE); //Now, let's begin //We need the now factor long now = System.currentTimeMillis(); //Create a Column Family called "Author" //进入keyspace後,开始创建我们订的column family ColumnParent columnParent = new ColumnParent(authorsColumnFamilyName); --------------------------------------Debug资讯------------------------------- InvalidRequestException(why:Cannot drop non existing keyspace 'keyspace1'.) at org.apache.cassandra.thrift.Cassandra$system_drop_keyspace_result.read(Cassandra.java:33956) at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) at org.apache.cassandra.thrift.Cassandra$Client.recv_system_drop_keyspace(Cassandra.java:1437) at org.apache.cassandra.thrift.Cassandra$Client.system_drop_keyspace(Cassandra.java:1424) at com.nuk.cassandra.cassandraWriteData2.main(cassandraWriteData2.java:60) -------------------------------------问题--------------------------------------- 文中程式码的28行,就是Debug资讯的60行。它说无法删除现有的密钥空间 1. 我有试过将程式码第8行的"keyspace1"改成别的,如:"keyspace100"也是同样说法 原先以为有问题是因为我先前有先透过终端机方式建立了keyspace1(重复??)所以才造成 的问题,後来改成keyspace100之前,有先去检查资料库有无存在相同的名称,也确定没 有,为何依旧有这样的问题存在???以及28行的功能是先删除资料库内的相同的名称,然後 再将自订的keyspace创建,有人知道这样的问题是出在哪吗??? 2. KsDef和CfDef的用法我目前还是不太懂,若可以的话请简单跟说我一下用法是如何?? 若是我用法有错也请指正我用法,并提点我如何正确使用? 3. 目前有去看网路上cassandra-jdbc的用法,但是我对jdbc很陌生..........Q^Q 若是有知道cassandra-jdbc的用法或教法请让我参考一下 补充:关於第一点的密钥空间 在终端机建立keyspace 和column family时,cassandra系统都会将名称转成系统的 编制方式(二进制编码?????),如: user@default] create key space Hello;→2e3f5ab95de6。 user@default] use Hello user@Hello] create column family Test→3b4e5d9f9c9ab4 不知道是否是因为系统必须先(Hello、Test)转成看得懂的编码,才造成不能透过程式 来创建keyspace和column family? --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.127.218.63
1F:→ brandonron:标题少打一个英文字,抱歉!! keyspace 08/08 15:57
2F:推 qrtt1:应该先把 100 个 case 一般化成一个 case (如果可能的话) 08/13 09:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP