精华内容
下载资源
问答
  • hive中数据更新以及实现

    千次阅读 2020-03-12 13:30:04
    hive暂时没有实现更新操作的,所以要更新数据就要通过自己手动进行更新。 拿业务数据来说,使用sqoop脚本是可以直接把全量数据抽取到hive中,sqoop也有两种增量抽取数据的方法,一种是基于自增列,一种是基于时间列...

    问题

    1. hive虽然已经支持更新操作但是效率低,所以要更新数据就要通过自己手动进行更新。
    2. 拿业务数据来说,使用sqoop脚本是可以直接把全量数据抽取到hive中,sqoop也有两种增量抽取数据的方法,一种是基于自增列,一种是基于时间列。可以参考:sqoop增量导入的两种方式;但是这两种方法里面是只可以把新增的数据拉去过来的,变化的数据是没有抽取过来,所以我们使用的增量抽取是使用的表里面的修改时间和创建时间来进行增量抽取。
    3. 抽取过来的数据就要考虑如何进行更新操作,因为抽取过来的数据既有新增也有变化。现在就要考虑到如何将变化的数据进行合并?

    实现

    考虑hive中储存历史状态变化的数据
    使用拉链表(详细查看 拉链表制作
    以下实现方法是不考虑hive中储存历史状态变化的数据,只存储最新状态的数据。

    1.使用窗口函数row_number进行实现

    思路:

    1. 首先抽取的表必须要有一个唯一主键,先根据创建时间和修改时间将新增的和变化的数据拉去过来到一张临时表
    2. 将临时表和之前正式表进行union all操作
    3. 使用row_number函数根据唯一主键进行分组,根据修改时间进行排序,取出修改时间最大的那条数据,更新到正式表既可以(中间有个问题就是dt分区怎么处理),最后加载到正式表的数据是使用到动态分区的既可以解决dt分区问题。

    具体代码实现:
    需求:现有一张订单表,需要每天抽取新增及变化的数据。

    现mysql有一张表,表中使用完成时间和修改时间,表结构如下:
    订单表
    1、先将支付表的历史数据全量加载到hive表中,可以使用动态分区,我是只放到了一个分区中,具体代码如下

    sqoop import \
    --connect jdbc:mysql://IP地址:3306/database \
    --username root \
    --password root \
    --query "SELECT * FROM jc_bill WHERE id!='0' AND \$CONDITIONS"  \
    --target-dir /user/hive/warehouse/ods_cloud_app_vehicleuser.db/ods_jc_bill/dt=2020-03-09 \
    --fields-terminated-by "\t" \
    --delete-target-dir \
    --null-string '\\N' \
    --null-non-string '\\N' \
    --hive-import \
    --m 1 \
    --hive-partition-key dt \
    --hive-partition-value 2020-03-09 \
    --hive-database ods_cloud_app_vehicleuser \
    --hive-overwrite \
    --hive-table ods_jc_bill; 
    

    2、新建一个临时表,将每天存放新增和变化的数据导入,就是根据完成时间和创建时间将数据抽取过来,具体代码如下:

    sqoop import \
    --connect jdbc:mysql://IP地址:3306/database \
    --username root \
    --password root \
    --query "SELECT * FROM jc_bill WHERE date_format(finish_time,'%Y-%m-%d')='$do_date' or date_format(create_time,'%Y-%m-%d')='$do_date' AND \$CONDITIONS"  \
    --target-dir /user/hive/warehouse/ods_cloud_app_vehicleuser_temp.db/ods_jc_bill_temp/dt=$do_date \
    --fields-terminated-by "\t" \
    --delete-target-dir \
    --null-string '\\N' \
    --null-non-string '\\N' \
    --hive-import \
    --m 1 \
    --hive-partition-key dt \
    --hive-partition-value $do_date \
    --hive-database ods_cloud_app_vehicleuser_temp \
    --hive-overwrite \
    --hive-table ods_jc_bill_temp; 
    

    3、
    (1)将临时表和正式表进行union all
    (2)然后根据唯一主键id分组,根据时间倒序,
    (3)取时间最新的那组数据,使用hive的动态分区再重新加载到hive表中。
    具体代码如下:

    set hive.exec.dynamici.partition=true;  --开启动态分区,默认是false 
    set hive.exec.dynamic.partition.mode=nonstrict; --开启允许所有分区都是动态的,否则必须要有静态分区才能使用。
    insert overwrite table ods_cloud_app_vehicleuser.ods_jc_bill partition(dt)
    select
    t2.id,
    t2.order_no,
    t2.status,
    t2.finish_time,
    t2.create_time,
    t2.finish_status,
    t2.amount,
    t2.bill_no,
    t2.refund_no,
    t2.version,
    t2.payment_no,
    t2.orderitem_id,
    t2.dt
    from (
    select  
    t1.id id,
    t1.order_no order_no,
    t1.status status,
    t1.finish_time finish_time,
    t1.create_time create_time,
    t1.finish_status finish_status,
    t1.amount amount,
    t1.bill_no bill_no,
    t1.refund_no refund_no,
    t1.version version,
    t1.payment_no payment_no,
    t1.orderitem_id orderitem_id,
    t1.dt dt,
    row_number() over(distribute by id sort by create_time desc) rn 
    from (
    select * from ods_cloud_app_vehicleuser.ods_jc_bill
    union all
    select * from ods_cloud_app_vehicleuser_temp.ods_jc_bill_temp) t1) t2
    where t2.rn=1;
    

    2.使用函数coalesce来实现

    简介
    语法: COALESCE(T.v1, T.v2, …) 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL

    思路
    首先抽取的表必须要有一个唯一主键,先根据创建时间和修改时间将新增的和变化的数据拉去过来到一张临时表,使用 COALESCE函数取值,如果临时表有数据就从临时表取,而不取正式表的数据,就实现了更新操作(简单思路)

    代码实现
    和上面1的步骤差不多,细节的话需要再考虑,大体上除了使用到的函数不一样,其余步骤应该差不多

    如果考虑要存储历史状态变化的数据,需要使用拉链表
    拉链表的制作方法已进行更新。
    使用拉链表(详细查看 拉链表制作

    3使用max函数实现

    前几步大概和上面差不多
    1、需要有全量数据
    2、每天抽取的增量数据
    3、将全量数据和增量数据union all
    4、使用max函数,取出同一个id中,时间最新的这个id,然后和原表进行join取出最新的全量数据,代码实现如下:
    数据更新代码
    数据更新代码
    以上即可以实现代码的数据更新,有问题请指出,一起学习。

    展开全文
  • echarts 图表数据更新方式

    千次阅读 2019-08-13 15:00:45
    页面 echarts 图表 在做一些数据交互的时候会涉及到一些数据更新。如果只是简单的新数据传递给echarts图表,许多时候我们会发现 旧有的时候依然残留在页面之上 如下一示例 旧数据 series: [{ name: ‘A’, type: ...

    问题表现
    页面 echarts 图表 在做一些数据交互的时候会涉及到一些数据的更新。如果只是简单的新数据传递给echarts图表,许多时候我们会发现 旧有的时候依然残留在页面之上
    如下一示例
    旧数据

    series: [{
    name: ‘A’,
    type: ‘bar’,
    data: [200, 300, 100, 330, 350],
    },{
    name: ‘B’,
    type: ‘bar’,
    data: [500, 100, 400, 300, 600],
    }]
    新数据

    series: [{
    name: ‘C’,
    type: ‘bar’,
    data: [200, 300, 100, 330, 350],
    }]
    如果不做处理,只是进行 chart.setOption(newData),那么旧有的数据 B 将依旧残留在页面之上

    数据残留 实例

    问题产生原因
    chart.setOption(option, {
    notMerge: …,
    lazyUpdate: …,
    silent: …
    })
    setOption 中的 notMerge 即为不合并之意默认为 false,即合并。
    我们在 setOption 的时候 仅仅是传输了一些 新的数据,其它的一些如 图表的类型,基本样式,tooltip 等等均为再次设置,这个时候 notMerge 便起作用了,它将 echarts 一些原有的一些数据样式等与 我们的 newData 一同合并进入 chart 实例当中,从而显现完整的 echarts 图表。
    问题是,我们很希望 只是一些样式 进行了合并,而数据不需要了。这时候矛盾点产生了。

    解决途径
    弃用 默认 merge,主动加载完整的 echarts 图表配置。
    在我们每次 进行 setOption 的时候,如此操作 demo.setOption(demoOption, true) 即可。
    这样就需要每次 传入 完整的 echarts 图表设置,像是一些字体大小颜色等等等。我们关注的核心只应是 数据层面,及其一些跟随数据变化的文字样式等。

    解决数据重复拼写问题 $.extend(true, demoOption, newOption)
    可以通过 jquery的深拷贝方法,将我们 的数据及一些样式更改 放在 newOption 当中,demoOption 中仅仅是一些 echarts 实例的一些基本配置。如此,

    可以实现对 数据及样式的集中管理
    免去了数据 合并 造成旧数据残留的问题
    基本配置如下

    $(function () {
    var echartOpt = {
    fz: ‘15’,
    color: ‘#fff’
    };

    var demo = echarts.init(document.getElementById('trade-history'));
    function Initdemo(data, obj) {
        var demoOption = echarts 图表基本样式
    
        // 有时候 我们也需要将 数据 的样式 也一同提炼出来
        var seriesStyle =  [{
                itemStyle: {
                    normal: {
                        barBorderRadius: 10,
                        borderColor: '#3fa7dc',
                        color: 'red'
                    }
                }
            },
            ...{othersStyle}]                          
    
        var legend =  ['A', 'a']         // 新的图例数据
        var newOption = {
            legend: {
                data: legend
            },
            series: data                // 传入的数据
        }
    
        newOption.series.forEach(function (item, index) {
            $.extend(true, item, seriesStyle[index])    // 将数据样式 加载到我们的 新数据上面
        });
    
        $.extend(true, demoOption, newOption)  // 新旧数据合并
    
        demo.setOption(demoOption, true);
    }
    Initdemo();
    

    })

    展开全文
  • 在一个组件实例中,只有在data里初始化的数据才是响应的,Vue不能检测到对象属性的添加或删除,没有在data里声明的属性不是响应的。 Vue不允许在已经创建的实例上动态添加根级响应式属性,但是可以使用$set方法将...

    知识拓展

    在一个组件实例中,只有在data里初始化的数据才是响应的,Vue不能检测到对象属性的添加或删除,没有在data里声明的属性不是响应的。


    Vue不允许在已经创建的实例上动态添加根级响应式属性,但是可以使用$set方法将相应属性添加到嵌套的对象上。


    数组数据变动,使用某些方法操作数组,变动数据时,有些方法无法被vue监测

    push()pop()shift()unshift()splice()sort()reverse()可被vue检测到
    filter(), concat(), slice()。这些不会改变原始数组,但总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组。

    vue不能检测以下变动的数组:
    1、当你利用索引直接设置一个项时,vm.items[indexOfItem] = newValue
    2、当你修改数组的长度时,例如: vm.items.length = newLength


    对象属性的添加或删除

    由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。

    解决办法:
    使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上

    Vue.set(vm.someObject, 'b', 2) 或者 this.$set(this.someObject,'b',2) (这也是全局 Vue.set 方法的别名)


    异步更新队列

    在最新的项目中遇到了这种情况,数据第一次获取到了,也渲染了,但是第二次之后数据只有在再一次渲染页面的时候更新,并不能实时更新。

    网上查了资料才知道,Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推入到队列中一次。

    解决办法:
    可在数据变化之后立即使用 Vue.nextTick(callback)。这样回调函数在 DOM 更新完成后就会调用。例如:
    在这里插入图片描述
    因为 $nextTick()返回一个 Promise 对象,所以可以使用新的 ES2016 async/await语法完成相同的事情:
    在这里插入图片描述


    Object.assign方法

    object.assign方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。

    vm.object = Object.assign( { } , vm.object , {a:' 1 ', b:' 2 ' })  
    

    注:object必须是已经声明的对象

    关于Object.assign方法更多内容,请访问《Object.assign()》


    vue多层循环,动态改变数据后渲染的很慢或者不渲染

    可在动态改变数据的方法,第一行加上

    this.$forceUpdate();
    
    展开全文
  • 我们在项目中经常会遇到数据更新了,但是视图并没有发生改变。尤其是引用类型的数据。 解决方案 Vue.set( target, propertyName/index, value ) .sync修饰符

    我们在项目中经常会遇到数据更新了,但是视图并没有发生改变。尤其是引用类型的数据。

    解决方案

    1. Vue.set( target, propertyName/index, value )
      在这里插入图片描述
    2. .sync修饰符
      在这里插入图片描述
    展开全文
  • Element表格数据更新界面不更新问题

    千次阅读 2020-12-12 22:40:40
    当我输入后失去焦点判断数据是否发生变化,变化就添加属性,显示保存。 事实上是失去焦点后再点击输入后才显示。 解决代码,加$set 注意事项 第一次添加没用$set,后面才加的话也不起作用。 ...
  • 问题:ECharts图表数据我们都是从后台获取,点击查询重新获取数据时发现图表没有刷新 ...第二个notMerge默认为false,即默认合并两个数据 解决:设置为true myChart.setOption(option,true); ...
  • uniapp数据更新页面视图不更新

    千次阅读 2020-03-23 23:36:03
    在watch函数中监听数据的变化,然后改变需要刷新的视图绑定的显示与否的关键字,强制重新渲染 <template v-if="update"> <!-- 单选 --> <radio-group v-if="data.question.type==1" name...
  • MongoDB 数据更新操作

    千次阅读 2019-03-11 20:14:46
    MongoDB 更新文档 update() 方法 实例 各种更新操作符 "$set" "$set" 与 "." 操作 "$unset" "$inc" "$rename" "$pop" "$...
  • Vue 数据更新但页面没有更新的 7 种情况

    千次阅读 多人点赞 2020-11-23 18:13:32
    1. Vue 无法检测实例被创建时不存在于 data 中的 property 原因:由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的。...
  • jsp数据库操作之数据更新

    千次阅读 2019-09-21 23:15:33
    数据更新 < / title > < / head > < body > < % ! public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver" ; public static final String DBURL = "jdbc:mysql://localhost...
  • echarts数据更新后,图表不更新还存在原数据
  • Vue之数据更新

    千次阅读 2018-11-19 19:34:54
    Vue的数组更新 数组更新监测 Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新。这些方法如下: push() pop() shift() unshift() splice() sort() reverse() 在此我有个例子: 这是HTML页面 &...
  • 解决Vue数据更新数据不渲染问题

    万次阅读 2018-08-30 15:20:45
    Vue包装了数个数组操作函数,使用这些方法操作的数组去,其数据变动时会被vue监测:  push() pop() shift() unshift() splice() sort() reverse() vue2.0还增加个方法可以观测Vue.set(items, index...
  • 记录今天遇到的一个小bug 使用el-table实现表格的...最终解决方案:发现是由于我的数据结构的问题,我是用的是数组,我通过this.role改变的只是数组指向的那个数据,但数组指向的地址并没有发生更改,也就是说数组本身
  • vue 异步数据更新问题

    千次阅读 2019-01-16 18:41:02
    记录一下出现的问题, 数据翻倍 这是复现问题的代码 data() { return { space: "", allresult: [] }; }, methods: { getmessage() { this.allresult = []; axios .get( "htt...
  • 本文主要讲解了一次数据更新在mysql中经历了哪些过程。 先直接看下我们会讲到哪些步骤,文章中 主要有以下9个步骤: (1)更新语句经过 解析,优化 生成执行计划,交由执行器调用存储引擎接口(注:执行器会多次...
  • Vue用v-for循环渲染数组数据,数组数据更新时,视图没有更新,filter,和变异方法都试过了,好像都不行,看网上有说是重复实例化vue的原因,但是不太明白。 ![图片说明]...
  • 将table_b中的数据更新到table_a中指定的数据中去 UPDATE table_a ta,(SELECT tb_value1,tb_value2 FROM table_b WHERE tb_value3 = 'value3') tb SET ta.ta_value1 = tb.tb_value1 WHERE ta.ta_value2 = tb.tb_...
  • antd+react 数据更新后,Table组件不刷新

    千次阅读 2020-10-20 14:58:31
    antd+react 数据更新后,Table组件不刷新为什么会出现这个问题呢?如何解决这个问题? 链接: link. 点击某条数据可开启编辑,失去焦点自动保存,实现过程看链接 ... 上面这张图可以看出失去焦点并没有更新视图,而...
  • vue 数据更新实时刷新

    万次阅读 2019-07-11 14:08:29
    // 这是获取数据的函数   getData() {   .....   }   // 这是一个定时器   timer() {   return setTimeout(()=>{   this .getData()   },5000)  ...
  • 1.data中有对象obj :{name:'远航',age:18} 2.此时新增phone this.obj.phone = '123456'  再次更新 用this.obj.phone = '654321' 视图...3.添加完成以后数据更新,视图未更新,   解决问题:因为obj中没有p...
  • 数据库实验之数据更新

    万次阅读 2018-09-19 22:05:11
    能将这些更新操作应用于实际操作中去;   二、实验环境及准备:   了解更新语句的基本语法和用法; 建立相关数据库,并在数据库中建立表,表中有一定量的记录。     三、实验内容: (写出主要的内容) ...
  • uniapp开发数据更新后视图没变化的解决方法 我们在开发的时候会遇见一些问题,如数据更新了视图没有及时发生变化 常规开发中最常见的2种数据类型就是:数组和对象 在vue动态渲染种数组和对象经常会出现一些不渲染的...
  • 在处理列表时,常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 用vue-router重新路由到当前页面,页面是不进行刷新的 3.采用window.reload(),或者router.go(0)刷新时,整个浏览器...
  • 首先,如上图的黄色按钮是通过v-for 循环产生的,data()里只有数据cards:[ … ],cards的值是通过调用后台接口拿到的。 data(){ return { cards:[] } } <div v-for="card in cards" :key="card.id"> ...
  • 在此仅记下SQL从一个表中把...SQL 从A表取数据更新到B表 的多种方法: 假设有二个表, 分别为:T1, T2 先创建二个表,创建T1 如下代码: CREATE TABLE T1( A NVARCHAR(10), B NVARCHAR(10), DC NVARCHAR(100),...
  • 使用乐观锁进行数据更新 1、基本介绍 乐观锁的应用场景是当要更新一条记录的时候,希望这条记录没有被别人更新。 注意: 目前乐观锁仅支持 updateById(id) 与 update(entity, wrapper) 方法 在 update(entity, ...
  • EF多表关联数据更新

    万次阅读 2016-12-08 13:43:45
    多表关联数据更新 如何使用原生SQL 总结 多表关联数据更新 我们在第四篇文章已经讲过数据的更新了,不过那个是针对单表结构的更新。 这次我们讲下使用EF进行关联数据的更新。 关联数据
  • Oracle 数据库 根据B表的数据更新A表

    千次阅读 2020-03-19 22:25:06
    Oracle 数据库 根据B表的数据更新A表 update A set A.字段2 = (select B.id from B where A.字段2 = B.字段2) where exists (select 1 from B where B.字段2 = A.字段2); -- 如果B表字段2有重复,那么会报错...
  • 大表中大量数据更新问题

    千次阅读 2018-11-08 22:04:39
    最近遇到个大批量数据更新表字段问题,需要将A表中m字段保存的字符串进行某种统一格式的替换,where条件类似m like ‘aaa%’。源数据有1700万条,需要更新的数据有200多万条。因为所更新的字段没有索引,如果用 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,879,238
精华内容 1,151,695
关键字:

数据更新