使用datastax驱动程序将数据插入cassandra

时间:2018-11-15 11:04:17

标签: cassandra datastax-java-driver

我们正尝试使用Java的DataStax驱动程序将CSV文件中的数据插入Cassandra。有哪些可用的方法?

我们当前正在使用正在运行的cqlsh从CSV文件中加载。

1 个答案:

答案 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,我建议您进一步阅读。