sql - 根据 id 匹配时另一个表中的值更新表中的列

标签 sql cassandra cql cqlsh

我有两个表:

activities (
    org_id bigint,
    user_id bigint,
    lang text,
    timestamp bigint,
    ...
    PRIMARY KEY ((org_id, user_id), timestamp)

metadata (
    user_id text,
    org_id text,
    lang text,
    date_str text,
    ...
    PRIMARY KEY ((user_id, org_id), date_str)

鉴于: 事件.行>>元数据.行

我需要

update metadata and set metadata.lang = activities.lang for all rows in metadata,
where metadata.user_id = activities.user_id and metadata.org_id = activities.org_id

问:什么是优雅的短 cql 查询来实现相同的目的?

我尝试过:

update metadata set metadata.lang = (select activities.lang from
activities where activities.user_id = metadata.user_id and activities.org_id = metadata.org_id)

这显然因违反基数而失败。

最佳答案

CQL 不支持此类更新语句(请参阅 docs )。您需要在 where 条件中提供实际值。

因此,您需要在代码中完成所有操作(获取数据、生成更新语句等),或者您可以使用 Spark 之类的东西,如下所示(未测试):

metadata = spark.read\
    .format("org.apache.spark.sql.cassandra")\
    .options(table="metadata", keyspace="test")\
    .load()\
    .select("user_id", "org_id")
activities = spark.read\
    .format("org.apache.spark.sql.cassandra")\
    .options(table="activities", keyspace="test")\
    .load()\
    .select("user_id", "org_id", "lang")
joined = activities.join(metadata, 
   (metadata["user_id"] == activitites["user_id"]) &
   (metadata["org_id"] == activities["org_id"]), "inner")\
   .select(metadata["user_id"], metadata["org_id"], "lang")
joined.write\
    .format("org.apache.spark.sql.cassandra")\
    .mode('append')\
    .options(table="metadata", keyspace="test")\
    .save()

关于sql - 根据 id 匹配时另一个表中的值更新表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67654994/

相关文章:

java - 具有自己的证书颁发机构的 Cassandra SSL

mongodb - 分析 - mongodb 或 cassandra

cassandra - 在 cassandra 中创建表时出错 - 错误请求 : Only clustering key columns can be defined in CLUSTERING ORDER directiv

mysql - 删除所有旧条目

sql - 同时在同一个表中插入和选择

cassandra - 如果在 Cassandra 中写入记录时磁盘已满会发生什么?

python - DataStax Enterprise 4.6.1/C* 使用 cqlengine 0.21.0 在 Python 中分页

cassandra - 如何在没有 now() 函数的情况下将自定义 timeuuid 插入 cassandra?

php - 通过浏览器使用 PDO 将 MySQL 表中的数据存储为 CSV

mysql - 如何将参数传递给 Coldfusion 的 SSRS 报告?