开发者社区 > 数据库 > 数据仓库 > 正文

云原生数据仓库AnalyticDB adb支持通过根据某个字段做upsert吗?

云原生数据仓库AnalyticDB PostgreSQL版如果是列存表的话, adb支持通过根据某个字段做upsert吗?

展开
收起
真的很搞笑 2023-11-05 16:22:05 90 0
4 条回答
写回答
取消 提交回答
  • ADB-PG 7.0 版本(公测)的存储引擎支持 upsert 语义,此回答整理自钉群“云原生数据仓库AnalyticDB PostgreSQL版交流群”

    2023-11-07 23:50:34
    赞同 展开评论 打赏
  • 云原生数据仓库AnalyticDB PostgreSQL版的列存表确实支持按字段进行upsert操作。但是,需要注意的是,列存表必须是追加优化表,即在创建列存表时,必须指定为 "appendonly=true"。此外,对于行存表和列存表的选择,应根据实际负载而定。例如,如果会频繁地一条或几条地插入数据、已有数据会被频繁的修改和删除,应考虑使用行存表;反之,如果基本是大批量地导入数据,且已有数据很少被修改和删除,则应考虑使用列存表。因为列存表的按列存储格式,数据访问只会读取涉及的列,适合少量列的数据查询、聚集等数据仓库应用场景。

    2023-11-06 10:53:38
    赞同 展开评论 打赏
  • 云原生数据仓库AnalyticDB(基于阿里云的ADB分析型数据库)支持通过某个字段进行UPSERT操作。UPSERT(Update + Insert)是一种特殊的SQL操作,用于在表中更新现有记录或插入新记录,具体取决于是否有匹配的记录。在ADB中,可以使用UPSERT操作来根据某个字段(如主键或唯一索引)来更新或插入记录。

    要使用UPSERT操作,你可以使用以下SQL语句:

    INSERT INTO your_table (column1, column2, column3)
    VALUES (value1, value2, value3)
    ON DUPLICATE KEY UPDATE
    column1 = value1,
    column2 = value2,
    column3 = value3;
    CopyCopy

    在这个例子中,如果your_table表中存在具有相同主键或唯一索引值的记录,那么将根据提供的值更新现有记录。否则,将插入一条新记录。

    2023-11-05 20:26:36
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    云原生数据仓库 AnalyticDB PostgreSQL 版的列存表目前并不直接支持 Upsert 操作,即插入或更新操作。但可以通过一些间接的方式实现类似的功能,比如使用 INSERT INTO ... ON CONFLICT DO UPDATE 语句。
    以下是一个简单的示例:

    INSERT INTO table_name (column1, column2) 
    VALUES ('value1', 'value2')
    ON CONFLICT (unique_column)
    DO UPDATE SET column1 = EXCLUDED.column1;
    

    在这个例子中,当存在重复的 unique_column 值时,将更新对应的 column1 值。如果没有冲突,则插入新的一行。
    请注意,这种方式仍然会涉及到全表扫描以检查是否存在冲突,因此对于非常大的表可能会有一定的性能影响。建议在实际使用前进行充分的测试和性能评估。

    2023-11-05 16:27:46
    赞同 展开评论 打赏

阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 云原生数据仓库 AnalyticDB PostgreSQL版
  • 相关电子书

    更多
    智算时代,基于 Kubernetes 落地云原生 AI 立即下载
    从技术到架构,云原生全面加速应用现代化 立即下载
    安永云原生创新驱动力实践探索 立即下载