我们正尝试使用Java的DataStax驱动程序将CSV文件中的数据插入Cassandra。有哪些可用的方法?
我们当前正在使用正在运行的cqlsh从CSV文件中加载。
答案 0 :(得分:2)
问题很模糊。通常,您应该能够提供代码,并举例说明一些不合适的方法。
话虽这么说,但我刚刚(本周)为工作中的开发人员开设了关于该主题的课程。所以我可以给你一些简单的例子。
首先,您应该建立一个单独的类来处理您的Cassandra连接对象。我通常使用几个构造函数来构建它,以便可以以几种不同的方式调用它。但是每个方法本质上都调用connect
方法,该方法类似于:
public void connect(String[] nodes, String user, String pwd, String dc) {
QueryOptions qo = new QueryOptions();
qo.setConsistencyLevel(ConsistencyLevel.LOCAL_ONE);
cluster = Cluster.builder()
.addContactPoints(nodes)
.withCredentials(user,pwd)
.withQueryOptions(qo)
.withLoadBalancingPolicy(
new TokenAwarePolicy(
DCAwareRoundRobinPolicy.builder()
.withLocalDc(dc)
.build()
)
)
.build();
session = cluster.connect();
有了这个,我还写了一些简单的方法来展示session
对象的某些功能:
public ResultSet query(String strCQL) {
return session.execute(strCQL);
}
public PreparedStatement prepare(String strCQL) {
return session.prepare(strCQL);
}
public ResultSet query(BoundStatement bStatement) {
return session.execute(bStatement);
}
就位后,我可以在服务层中调用这些方法。一个简单的INSERT
(准备语句并绑定值)看起来像这样:
String[] nodes = {"10.6.8.2","10.6.6.4"};
CassandraConnection conn = new CassandraConnection(nodes, "aploetz", "flynnLives", "West-DC");
String userID = "Aaron";
String value = "whatever";
String strINSERT = "INSERT INTO stackoverflow.timestamptest "
+ "(userid, activetime, value) "
+ "VALUES (?,dateof(now()),?)";
PreparedStatement pIStatement = conn.prepare(strINSERT);
BoundStatement bIStatement = new BoundStatement(pIStatement);
bIStatement.bind(userID, value);
conn.query(bIStatement);
此外,DataStax Java驱动程序的Git存储库中有一个名为“ examples”的文件夹。这里是a link to the "basic" examples,我建议您进一步阅读。