【问题标题】:Passing parameters to Cassandra using Scala使用 Scala 将参数传递给 Cassandra
【发布时间】:2018-07-04 02:28:25
【问题描述】:

我想将参数传递给连接到 Scala 中 Cassandra 的查询执行:

import com.datastax.driver.core.{Session, Cluster}

val cluster = Cluster.builder().addContactPoint("localhost").build()//withPort(8080).build()
val session = cluster.connect("MyKeySpace")

刚刚在 Python 中找到了这个,但我想在 Scala 中进行:

session.execute(
  """
  INSERT INTO users (name, credits, user_id)
  VALUES (%s, %s, %s)
  """,
  ("John O'Reilly", 42, uuid.uuid1())
)

【问题讨论】:

  • 我正在使用 IntelliJ 创建一个 jar 文件并使用 spark-submit 在 spark 中运行
  • 能否澄清问题所在或您要达到的目标是什么?您正在使用 Scala 连接到 Cassandra 集群并尝试运行插入?如果是,您运行时是否遇到问题?或者它不起作用,或者你不知道该怎么做?更详细地描述您面临的问题

标签: scala parameters cassandra cassandra-3.0 datastax-java-driver


【解决方案1】:

要向查询传递参数,您可以在Scala 中使用String Interpolation。 假设您在namecreditsuserId 中有您的查询参数,那么您可以使用如下所示的内容。

val name = "John O'Reilly"
val credits = 42
val userId = java.util.UUID.randomUUID()

session.execute(
  s"""
  INSERT INTO users (name, credits, user_id)
  VALUES ($name, $credits, $userId)
  """
)

【讨论】:

    【解决方案2】:

    如果您使用的是普通的 Scala/Java,我建议您改用 PreparedStatement

    1. 同一条语句多次执行时性能更好,因为不需要多次解析,客户端和服务器之间只传输数据;
    2. 不需要您自己进行字符串转义 - 在字符串插值情况下,您需要注意引号是否正确转义等。

    小例子(来自文档):

    PreparedStatement prepared = session.prepare(
        "insert into product (sku, description) values (?, ?)");
    
    BoundStatement bound = prepared.bind("234827", "Mouse");
    session.execute(bound);
    

    您还可以通过名称绑定单个参数,取消绑定一些等。

    另外,如果您从 Spark 访问 Cassandra,那么最好使用 Spark-Cassandra-Connector,它在从 Cassandra 读取数据和向 Cassandra 写入数据时执行大量优化。

    【讨论】:

      【解决方案3】:

      你可以使用QueryBuilder:

      val keySpaceName = "MyKeySpace"
      val tableName = "users"
      val insert = QueryBuilder.insertInto(keySpaceName, tableName)
        .value("name", "John O'Reilly")
        .value("credits", "42")
        .value("user_id", java.util.UUID.randomUUID())
      val result = session.execute(insert.toString)
      

      解决方案改编自:Datastax QueryBuilder insert statement

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-03
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多