【问题标题】:Cassandra COPY command to Update recordsCassandra COPY 命令更新记录
【发布时间】:2017-11-14 22:00:09
【问题描述】:

我想使用 Cassandra COPY 功能更新表中的某些列。但是即使没有找到行,Copy 也会插入新记录。我想在 COPY 命令中进行限制,只有在找到 PRIMARY KEY 行时才能更新 csv 文件中的列。下面共享示例表和 COPY 命令。

CREATE TABLE Orders(
Ord_Id      Text Primary Key,
Ord_Date    Int,
Ord_Acct    Text,
Ord_Comp_Dt Int,
Ord_Status  Text)

Sample Data:
Ord_Id | Ord_Date | Ord_Acct | Ord_Comp_Dt | Ord_Status
ORD001 | 20170602 | A001     | 20170615    | InProgress
ORD002 | 20170603 | A002     | 20170607    | Failed
ORD003 | 20170604 | A003     | 20170616    | InProgress
ORD004 | 20170605 | A003     | 20170617    | InProgress

当使用 Initial Ord_Status='InProgress' 下订单时,上表获取行条目。基于订单完成网络提供带有 Ord_Id、Ord_Status 的数据。

Network Data
 ORD_ID,ORD_STATUS
 ORD001,Failed
 ORD003,Success
 ORD004,Rejected
 ORD005,DataIncomplete

下面提供了复制命令

COPY ord_schema.Orders(Ord_Id,Ord_Status) FROM 'NW170610.csv'

执行 COPY 命令后的表格快照

Sample Data:
Ord_Id | Ord_Date | Ord_Acct | Ord_Comp_Dt | Ord_Status
ORD001 | 20170602 | A001     | 20170615    | Failed
ORD002 | 20170603 | A002     | 20170607    | Failed
ORD003 | 20170604 | A003     | 20170616    | InProgress
ORD004 | 20170605 | A003     | 20170617    | Rejected
ORD005 | Null     | Null     | Null        | DataIncomplete

未找到主键时不应插入 ORD005。 请协助在插入之前检查数据是否存在或在数据不存在时阻止输入。

【问题讨论】:

    标签: cassandra copy dataset


    【解决方案1】:

    Cassandra 做了一个 UPSERT。这意味着,如果没有列(基于主键),它将插入一列。

    我的建议是添加另一列可能是 Ord_Acct(可以为数据带来唯一性的东西)作为聚类/复合键。现在,如果 Ord_Acct 为空,它不会进行插入。因此,总而言之,我建议更改满足您要求的数据模型。

    【讨论】:

    • 谢谢。还有其他应用程序可以插入批量订单订单。更改主键组合将产生巨大影响。
    【解决方案2】:

    在使用复制命令插入之前无法检查行的存在

    复制命令仅解析 csv 并直接插入。因此,您必须编写自己的代码来读取 csv NW170610 并使用选择查询检查每条记录是否存在,如果存在则插入。

    或使用复制到命令转储 Orders 表的 csv

    COPY orders (ord_id) TO 'orders_id.csv';
    

    现在对于NW170610 的每条记录,检查orders_id.csv 中存在的id,如果是,则将记录写入另一个文件complete_order.csv

    现在只需使用命令复制加载complete_order.csv 文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      相关资源
      最近更新 更多