精华内容
下载资源
问答
  • [Author]: kwusqoop导入关系库更新联合主键的问题,把数据从hive中导入关系库,如果关系库表有联合主键的情况,且需要把新导入的数据更新原来的数据。1、创建关系库表CREATE TABLEtest123(id INT NOT NULL,name ...

    [Author]: kwu

    sqoop导入关系库更新联合主键的问题,把数据从hive中导入关系库,如果关系库表有联合主键的情况,且需要把新导入的数据更新原来的数据。

    1、创建关系库表

    CREATE TABLE

    test123

    (

    id INT NOT NULL,

    name VARCHAR(25) NOT NULL,

    age INT,

    PRIMARY KEY (id, name)

    )

    ENGINE=MyISAM DEFAULT CHARSET=utf8

    2、创建hive表

    drop table default.test123;

    create table default.test123

    (

    id int,

    name string,

    age int

    )

    ROW FORMAT DELIMITED fields terminated by '\t'

    STORED AS TEXTFILE;

    导入测试数据:

    insert overwrite table default.test123 select 1,'bill',5 from default.kwu_test limit 1;

    3、sqoop导入mysql数据库

    sqoop export --connect jdbc:mysql://10.130.2.245:3306/test --update-key "id,name" --username kwu --password 'java.netphp' --table test123 --fields-terminated-by '\t' --columns "id,name,age" --export-dir /hive/warehouse/test123

    说明: 关键 --update-key 指定联合主键的值

    修改测试数据:

    insert overwrite table default.test123 select 1,'bill',6 from default.kwu_test limit 1;

    查看mysql数据库中age已经修改为6.

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    原文:http://blog.csdn.net/bdchome/article/details/47343387

    展开全文
  • mysql联合主键

    万次阅读 2018-03-27 13:48:58
    1、hibernate配置联合主键1.1 联合主键的好处:联合主键的好处是不需要因为需要主键而增加一个无用的主键列1.2 联合主键的建表语句CREATE TABLE `HTTP_TERMINAL_DETAIL_STATISTICS` ( `TIME` CHAR(14) NOT NULL ...

    1、hibernate配置联合主键

    1.1 联合主键的好处:

    联合主键的好处是不需要因为需要主键而增加一个无用的主键列

    1.2 联合主键的建表语句

    CREATE TABLE `HTTP_TERMINAL_DETAIL_STATISTICS` (
    	`TIME` CHAR(14) NOT NULL COMMENT '时间',
    	`TERMINAL_TYPE` VARCHAR(128) NOT NULL COMMENT '终端类型',
    	`TERMINAL_ID` VARCHAR(128) NOT NULL COMMENT '终端标识',
    	`QUANTITY` INT(11) DEFAULT NULL COMMENT '请求数量',
    	`CREATE_TIME` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
    	`UPDATE_TIME` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
    	`IS_DELETE` TINYINT(1) NULL DEFAULT NULL COMMENT '是否删除',
    	`VERSION` INT(11) DEFAULT NULL COMMENT '乐观锁',
    	`HOUR_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '小时标识',
    	`DAY_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '天数标识',
    	`MONTH_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '月份标识',
    	`YEAR_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '年份标识',
    	PRIMARY KEY (`TIME`,`TERMINAL_TYPE`,`TERMINAL_ID`)
    ) DEFAULT CHARSET=utf8;

    1.3 联合主键的hibernate配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.sinovoice.hcicloud.daoorm.report">
    	
    	<class name="HttpTerminalDetail" table="HTTP_TERMINAL_DETAIL_STATISTICS">
                <!-- 联合主键 -->
    	    <composite-id>
                    <key-property name="time" type="java.lang.String" column="TIME" />
                    <key-property name="terminalType" type="java.lang.String" column="TERMINAL_TYPE" />
                    <key-property name="terminalId" type="java.lang.String" column="TERMINAL_ID" />
                </composite-id>
            
                    <!-- 乐观锁配置 version元素必须紧挨着id后面-->
    		<version name="version" column="VERSION" type="java.lang.Integer"></version>
    		
    		<property name="quantity" type="java.lang.Integer" column="QUANTITY"/>
    		<property name="createTime" column="CREATE_TIME"/>
    		<property name="updateTime" column="UPDATE_TIME"/>		
    		<property name="isDelete" type="java.lang.Integer" column="IS_DELETE"/>
    		
    		<property name="hourName" type="java.lang.String" column="HOUR_NAME"/>
    		<property name="dayName" type="java.lang.String" column="DAY_NAME"/>
    		<property name="monthName" type="java.lang.String" column="MONTH_NAME"/>		
    		<property name="yearName" type="java.lang.String" column="YEAR_NAME"/>
    	</class>
    </hibernate-mapping>

    2、乐观锁

    2.1 什么是乐观锁

    使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据

    2.2 乐观锁的配置方式

    <!-- 乐观锁配置 version元素必须紧挨着id后面-->
    <version name="version" column="VERSION" type="java.lang.Integer"></version>

    3、mysql数据类型

    数字类型

    类型大小范围(有符号)范围(无符号)用途
    TINYINT1 字节(-128,127)(0,255)小整数值
    SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
    MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
    INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
    BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
    FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
    浮点数值
    DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
    浮点数值
    DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值
    日期类型

    类型大小
    (字节)
    范围格式用途
    DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
    TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
    YEAR11901/2155YYYY年份值
    DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
    TIMESTAMP4

    1970-01-01 00:00:00/2038

    结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

    YYYYMMDD HHMMSS混合日期和时间值,时间戳
    字符串类型
    类型大小用途
    CHAR0-255字节定长字符串
    VARCHAR0-65535 字节变长字符串
    TINYBLOB0-255字节不超过 255 个字符的二进制字符串
    TINYTEXT0-255字节短文本字符串
    BLOB0-65 535字节二进制形式的长文本数据
    TEXT0-65 535字节长文本数据
    MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
    MEDIUMTEXT0-16 777 215字节中等长度文本数据
    LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
    LONGTEXT0-4 294 967 295字节极大文本数据

    4、mysql数据库聚合查询语句

    SELECT TERMINAL_TYPE,TIME,SUM(QUANTITY) FROM HTTP_TERMINAL_DETAIL_STATISTICS GROUP BY TIME;

    这个查询语句在聚合某个字段的基础上实现将当前字段进行求和计算。

    5、查询mysql指定数据库的表个数:

    SELECT COUNT( * ) FROM information_schema.tables WHERE TABLE_SCHEMA = '库名';


    展开全文
  • MYSQL replace into 联合主键 更新插入项目场景:问题描述:解决方案:REPLANCE INTO 和联合主键 项目场景: 用户填表关联信息(姓名+身份证+卡号): 项目场景:填表时填写姓名自动联想以前填过的数据,但是可能...

    项目场景:

    用户填表关联信息(姓名+身份证+卡号):
    项目场景:填表时填写姓名自动联想以前填过的数据,但是可能同一姓名身份证对应多条卡号记录


    问题描述:

    提示:每次新增数据,姓名+身份证+卡号三条信息有相同的不插入,有差异则新增:

    解决方案:REPLANCE INTO 和联合主键

    在这里插入图片描述

    把id主键删掉 ,将name,id_number,bank_aacount做联合主键 用 REPLANCE INTO直接替换插入
    REPLACE INTO app_villager_issue_share_data ( id, name, id_number, bank_account, create_time )
    VALUES
    	( REPLACE ( UUID( ), '-', '' ),'张三','1001','666',now() )
    	
    
    <insert id="replaceInto">
    		REPLACE INTO app_villager_issue_share_data ( id, NAME, id_number, bank_account, create_time )
    		VALUES
    		( REPLACE ( UUID( ), '-', '' ),#{name},#{idNumber},#{bankAccount},now() )
    	</insert>
    
    展开全文
  • 使用WHEN THEN进行SQL语句拼接,实现不同主键数据批量更新(支持联合主键) public static function updateBatch($tableName = "", $multipleData = array()){ //$tableName = env("DB_PREFIX").$tableName; ...
    • 拼接函数

    使用WHEN THEN进行SQL语句拼接,实现不同主键数据批量更新(支持联合主键)

        public static function updateBatch($tableName = "", $multipleData = array()){
    
            //$tableName = env("DB_PREFIX").$tableName;
            if( $tableName && !empty($multipleData) ) {
    
                $updateColumn = array_keys($multipleData[0][1]);
                $referenceColumn = array_keys($multipleData[0][0]);
                $referenceColumnString = "(";
                foreach ($referenceColumn as $value => $item){
                    $referenceColumnString .= "`".$item."`";
                    if($value!=count($referenceColumn)-1)
                        $referenceColumnString .=",";
    
                }
                $referenceColumnString .= ")";
                $referenceColumnStringEnd = $referenceColumn[count($referenceColumn)-1];
    
    
                $whereIn = "";
    
                $q = "UPDATE ".$tableName." SET ";
                foreach ( $updateColumn as $uColumn ) {
                    $q .=  $uColumn." = CASE ";
    
    
                    foreach( $multipleData as $data ) {
                        $referenceColumnStringValue = "(";
    
                        foreach ($data[0] as $value => $item) {
                            $referenceColumnStringValue .= "'".$item."'";
                            if($value!=$referenceColumnStringEnd)
                                $referenceColumnStringValue .=",";
                        }
                        $referenceColumnStringValue .= ")";
    
                        $q .= "WHEN ".$referenceColumnString." = ".$referenceColumnStringValue.
                            " THEN '".$data[1][$uColumn]."' ";
                    }
                    $q .= "ELSE ".$uColumn." END, ";
                }
                foreach( $multipleData as $data ) {
                    $whereIn .= "(";
                    foreach ($data[0] as $value => $item) {
                        $whereIn .= "'".$item."'";
                        if($value!=$referenceColumnStringEnd)
                            $whereIn .=",";
                    }
                    $whereIn .= ")";
                    $whereIn .= ",";
                }
                $q = rtrim($q, ", ")." WHERE ".$referenceColumnString." IN (".  rtrim($whereIn, ', ').")";
    
                // Update
                return DB::update(DB::raw($q));
    
            } else {
                return false;
            }
    
        }
    
    • 调用方法

    方法第一个参数$tableName是数据表名称。第二个参数$multipleData是修改的数据,该参数需要特殊的数据结构,不过结构比较清晰和简单。数据结构实际上是一个数组,该数组中的每一个子数组表示每一条需要修改的数据,而该子数组下的两个数组:第一个数组表示主键(单个主键时只有一条数据),第二个数组表示需要修改的数据。

    具体如下:

            $testColor =
                [
                    [//这个数组表示每一条需要更新的数据
                        [//这个数组表示主键
                            "super_color" => "123sdaffsad4",
                            "color_name" => "name1",
                        ],
                        [//这个数组表示更新的内容
                            "test" => "asjkldhflqwer",
                        ]
                    ],
                    [
                    [
                        "super_color" => "123sdaffsad4",
                        "color_name" => "name1231",
                    ],
                        [
                            "test" => "asjkldhflqwer",
                        ]
                    ]
                ];

     

    展开全文
  • 解决sqoop导入关系库更新联合主键的问题,把数据从hive中导入关系库,如果关系库表有联合主键的情况,且需要把新导入的数据更新原来的数据。
  • 目前环境是一张主表数据量在一亿的样子,之前做插入更新处理是用的KETTLE抽取工具,然而这张表是四个字段的联合主键,这样判断起来效率就会非常低,现在跑任务直接会卡死不动。网上找了一些类似的解决方案
  • 使用注解来定义联合主键

    万次阅读 2013-06-05 16:56:04
    下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键 下面取至hibernate的API文档: 定义组合主键的几种语法: 1、将组件类注解为@Embeddable,并将组件的属性注解为...
  • Hibernate 联合主键

    千次阅读 2012-08-25 18:19:51
    为什么要使用联合主键 ,自从项目上有需求之后才真正明白,现在把自己的使用心得写下来供以后查阅; 简单说下项目上的要求,现在用户登录系统之后要进行备注信息的填写,既然可以添加备注当然也就可以修改,那么,...
  • 联合主键中ON DUPLICATE KEY UPDATE的使用

    千次阅读 2019-03-11 16:41:16
    联合主键中ON DUPLICATE KEY UPDATE的使用一,ON DUPLICATE KEY UPDATE 一般使用二,在发生多出冲突时的问题三,联合主键中发生冲突的情况结语 一,ON DUPLICATE KEY UPDATE 一般使用 ON DUPLICATE KEY UPDATE 是...
  • JPA:联合主键

    2015-11-27 13:00:48
    JPA中将联合主键看做一个对象,所以将联合主键放在一个类中 AirLine.java import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public ...
  • 数据库主键外键联合主键 主键类型 所有数据库表必须具有一个主键列。 主键唯一地标识表中的一行,因此它受到以下约束的约束: 独特 非空 不可变的 选择主键时,我们必须考虑以下方面: 主键可用于通过...
  • 需要先删除已经存在的联合主键,SQL如下: ALTER TABLE “table_name” DROP CONSTRAINT “table_name_pkey” 步骤二: 然后添加新的主键: alter table table_name add primary key (a,b,c,d,e) 即可更改联合主键...
  • 问题综述 : mysql 出现联合主键过多 在通过主键选择更新或添加时 不能很好起到重复数据过滤 解决方式:重修表结构 删掉不用联合主键(删掉时可能因为历史原因产生重复数据不能修改联合主键) 解决方式: 删除表中...
  • Django使用联合主键

    2019-01-15 17:47:00
    今天闲着没事,突然想起一个以前遇到的一个小问题。... 单张表内建立联合主键: class IotTemp(models.Model): mac = models.CharField(max_length=64, blank=False) temperature = models.Flo...
  • 联合主键引发的思考

    2020-05-14 10:36:59
    仔细查看表发现,这个表使用的联合主键(a,b,c),再看看执行的 SQL,发现 where 条件之后 a='xxx' and b='xxx',顿时反应过来,数据唯一标识是 a-b-c 三个字段数据决定的,若用 a-b 去判定,会进行多条数据的更新,...
  • mysql的联合主键与复合主键区别

    千次阅读 2018-10-30 15:53:50
    复合主键就是指你表的主键含有一个以上的字段组成 。 例如; create table test ( name varchar(19), id number, value varchar(10), primary key (id,name) ) 上面的id和name字段组合起来就是你test表的复合主键 ...
  • JPA中使用联合主键产生的若干问题

    千次阅读 2016-12-24 10:40:10
    最近在做一个项目,关于考试系统的,后台用的SpringBoot框架,因为设计需求,需要在某个实体中使用一个联合主键,而同时这个实体由与其他两个实体有映射关系,于是开始了踩坑之旅。。。 先看一下实体,是一个考试的...
  • 慎用hibernate联合主键

    千次阅读 2012-07-04 16:46:33
    OID是hibernate当中一个很重要的概念,没有OID的话hibernate就无法帮你管理持久化对象,但是有的时候数据库中的表是没有主键的,这个时候就不得不使用联合主键来作为OID,有时候是将所有字段联合有时候是部分字段的...
  • **根据多个字段联合主键增删改查** mybatisplus只支持一个主键,如何使mybatisplus支持对多个主键的增删改查? mapper继承MppBaseMapper<br> 实体类中联合主键的字段需要用@MppMultiId注解修饰<br> **...
  • 今天收到了一个新需求,需要更新一个有联合主键的表,一开始拿到数据库(DB2)的时候,打开发现它的key键有两个,再看唯一键却只有一条,但是一条记录里面对应了多个字段,于是我查了一下资料,发现原来所谓的一张表...
  • 前些天在使用JPA时,遇到了表需要用联合主键的问题,百度了好久才找到答案,下面分享一下 1.先把主键单独拿出来作为一个实体类,并实现序列化接口 2.set,get构造方法 equals hascode重写 3.在对应表字段的实体类...
  • 一张表,有id,name,age三个字段 要求id自增 name,age做联合主键 判断数据是否唯一 应该怎么做
  • spring jpa 联合主键更好用的办法

    千次阅读 2017-02-02 12:45:14
    当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用JPA注解实现联合主键的代码 1 首先需要建立一个复合主键类,用来存放需要生产联合主键的属性,该类需要实现序列化。 package ...
  • mysql联合主键和单一主键

    千次阅读 2017-03-04 21:42:00
    ◆虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 ◆建立索引会占用磁盘空间的索引文件。一般情况这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,789
精华内容 15,115
关键字:

联合主键如何更新