首页 > 数据库 > hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新

hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新

时间:2022-11-24 15:55:59浏览次数:47  
标签:rows create hive version mysql dv hivetest overwrite

hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新

1反向overwrite 操作->解决错误的插入数据的问题。

描述:

​ 例如

​ 学生表:student<id,name,createtime>

​ 在学生表中插入数据,首先我们在23号插入一条数据,然后又插入一条24号的数据。发现差错了。此时可以查询24号之前的数据然后在 overwrite 到原表中

2. where not exists 避免重复插入SQL语句

避免重复插入SQL语句:

insert into TABLE2
select *
from TABLE1 
where not exists (select 1 from TABLE2 where TABLE2.id=TABLE1.id and TABLE2.NAME = TABLE1.NAME)
  • SQL数据写入经常遇到重复插入数据导致数据样本变大,对测试和磁盘造成压力,浪费资源,故需要修改写入语句
  1. 原语句:

    
    0. 建表
    create table IF NOT EXISTS dbgen_version 
    (
        dv_version                varchar(10),
        dv_create_date            date,
        dv_create_time            varchar(10),
        dv_cmdline_args           varchar(10)              
    ) WITH (format = 'ORC')
    1. 清空表(如果有数据)
    trino:hivetest> delete from hive.hivetest.dbgen_version;
    DELETE
    
    Query 20210225_072035_00059_zvank, FINISHED, 1 node
    Splits: 1 total, 1 done (100.00%)
    0.24 [0 rows, 0B] [0 rows/s, 0B/s]
    
     查看语句:
    trino:hivetest> select * from hive.hivetest.dbgen_version;       
     dv_version | dv_create_date | dv_create_time | dv_cmdline_args 
    ------------+----------------+----------------+-----------------
    (0 rows)
    
    Query 20210225_072059_00060_zvank, FINISHED, 1 node
    Splits: 17 total, 17 done (100.00%)
    0.21 [0 rows, 0B] [0 rows/s, 0B/s]
    
    
  2. 插入并查询语句

    trino:hivetest> INSERT INTO hive.hivetest.dbgen_version select * from hive.hive.dbgen_version;
    INSERT: 1 row
    
    Query 20210225_072113_00061_zvank, FINISHED, 3 nodes
    Splits: 69 total, 69 done (100.00%)
    0.53 [1 rows, 67B] [1 rows/s, 127B/s]
    
    查看语句
    trino:hivetest> select * from hive.hivetest.dbgen_version;                                        
     dv_version | dv_create_date | dv_create_time | dv_cmdline_args 
    ------------+----------------+----------------+-----------------
     2.0.0      | 2021-02-02     | 18:32:49       | --scale 10      
    (1 row)
    
    Query 20210225_072152_00062_zvank, FINISHED, 2 nodes
    Splits: 17 total, 17 done (100.00%)
    0.21 [1 rows, 0B] [4 rows/s, 0B/s]
    
    
  3. 插入where not exists限定语句

    trino:hivetest> insert into hive.hivetest.dbgen_version
                 -> select *
                 -> from hive.hive.dbgen_version TABLE1 
                 -> where not exists (select 1 from hive.hivetest.dbgen_version TABLE2 where TABLE2.dv_version=TABLE1.dv_version and TABLE2.dv_create_date = TABLE1.dv_create_date);
    INSERT: 0 rows
    
    查看语句
    Query 20210225_072210_00063_zvank, FINISHED, 3 nodes
    Splits: 198 total, 198 done (100.00%)
    0.44 [3 rows, 176B] [6 rows/s, 400B/s]
    
    trino:hivetest> select * from hive.hivetest.dbgen_version;
     dv_version | dv_create_date | dv_create_time | dv_cmdline_args 
    ------------+----------------+----------------+-----------------
     2.0.0      | 2021-02-02     | 18:32:49       | --scale 10      
    (1 row)
    
    查看语句
    Query 20210225_072216_00064_zvank, FINISHED, 1 node
    Splits: 17 total, 17 done (100.00%)
    0.21 [1 rows, 0B] [4 rows/s, 0B/s]
    
    
  4. 插入一般的语句

    
    trino:hivetest> INSERT INTO hive.hivetest.dbgen_version select * from hive.hive.dbgen_version; 
    INSERT: 1 row
    
    查看语句
    Query 20210225_072237_00065_zvank, FINISHED, 3 nodes
    Splits: 69 total, 69 done (100.00%)
    0.60 [1 rows, 67B] [1 rows/s, 111B/s]
    
    重复插入!!!
    
    trino:hivetest> select * from hive.hivetest.dbgen_version;                     
                
     dv_version | dv_create_date | dv_create_time | dv_cmdline_args 
    ------------+----------------+----------------+-----------------
     2.0.0      | 2021-02-02     | 18:32:49       | --scale 10      
     2.0.0      | 2021-02-02     | 18:32:49       | --scale 10      
    (2 rows)
    
    Query 20210225_072245_00066_zvank, FINISHED, 3 nodes
    Splits: 18 total, 18 done (100.00%)
    0.21 [2 rows, 0B] [9 rows/s, 0B/s]  
    
    

原因

where not exists (select 1 from TABLE2 where TABLE2.id=TABLE1.id and TABLE2.NAME = TABLE1.NAME)限定了两个条件相等情况下不予插入。如果仅限定一个条件,对于有重复数据的情况可能会写入数据不成功,需要检查确认。

3.mysql 两表关联更新update...inner join(用一个表更新另一个表)

标签:rows,create,hive,version,mysql,dv,hivetest,overwrite
From: https://www.cnblogs.com/atao-BigData/p/16922122.html

相关文章

  • MySQL---InnoDB数据存储结构(区_段_碎片区_表空间)
    区_段_碎片区为什么要有区?为什么要有段?为什么要有碎片区?区的分类 表空间 独立表空间系统表空间......
  • 总结我的 MySQL 学习历程,给有需要的人看
    作者|慕课网精英讲师马听你好,我是马听,现在是某零售公司的MySQLDBA,身处一线的我表示有很多话要讲。我的MySQL学习历程在我大三的时候,就开始接触到MySQL了,当时我也是从......
  • mysql的配置文件和逻辑架构
    二进制日志log-bin——主从复制——log-bin=mysql-bin错误日志log-error——默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。——log-error=var/log/m......
  • mysql 表字段约束条件
    目录无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多的关系外键字段的建立多对多关系一对一关系无符号、零填充unsigned idintunsignedzerofill i......
  • MySQL数据库管理
    一、MySQL数据库管理1、库和表行(记录):用来描述一个对象的信息列(字段):用来描述对象的一个属性2、常用的数据类型int:整型float:单精度浮点4字节32位double:双精度浮点......
  • [MySQL] 报错 SELECT list is not in GROUP BY clause and contains nonaggregated co
    报错Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'XXX'whichisnotfunctionallydependentoncolumnsinGROUPBY......
  • 浅谈mysql高性能调优(一)
    mysql的问题介绍(一)mysql索引的实现原理和数据结构mysql索引设计的技巧mysql聚簇索引和非聚簇索引的区别mysql索引的中级调优方案mysql分布式集群的设计原则mysql如何实现高......
  • lightdb开启mysql兼容模式
    首先,从www.hs.net/lightdb下载最新版本并在安装时选择oracle模式,如下:  http://www.light-pg.com/docs/LightDB_Install_Manual/13.8-22.3/install.html#guilight......
  • mysql导入导出
    一、导出数据库1、导出完整数据:表结构+数据(abc是数据库)mysqldump-uroot-pabc>abc.sql2、只导出表结构mysqldump-uroot-pabc>abc.sql二、导入数据库1、......
  • Docker安装及MySQL、Redis等配置
    Docker安装(CentOS版本)Docker安装文档:链接1、卸载系统之前的dockersudoyumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latest\docker-......