精华内容
下载资源
问答
  • java BigDecimal类型null处理 比较 运算
    万次阅读
    2019-09-24 10:32:45

    BigDecimal null处理

    BigDecimal a=BigDecimal.ZERO;
    a.equals(null)   // 判断时可以将可能null值 放括号内

    BigDecimal 比较

    BigDecimal b;

    b.compareTo(BigDecimal.ZERO)==0   等于0

    b.compareTo(BigDecimal.ZERO)==1  大于0

    b.compareTo(BigDecimal.ZERO)==-1  小于0

    BigDecimal 的运算

        add(BigDecimal)        BigDecimal对象中的值相加,然后返回这个对象。 
        subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。 
        multiply(BigDecimal)  BigDecimal对象中的值相乘,然后返回这个对象。 
        divide(BigDecimal)     BigDecimal对象中的值相除,然后返回这个对象。 
        toString()                将BigDecimal对象的数值转换成字符串。 
        doubleValue()          将BigDecimal对象中的值以双精度数返回。 
        floatValue()             将BigDecimal对象中的值以单精度数返回。 
        longValue()             将BigDecimal对象中的值以长整数返回。 
        intValue()               将BigDecimal对象中的值以整数返回。

    更多相关内容
  • HIVE中的NULL处理

    千次阅读 2019-01-30 10:35:47
    背景: 在此记录下使用 sqoop将数据从mysql导出到 hive过程中需要注意的几个地方,包括 NULL值处理、增量导入、parquet格式的日期类型 注:这种数据传输工具其实没必要深究所有用法,用到哪块去...一、NULL处理 1. ...

    背景:
    在此记录下使用 sqoop将数据从mysql导出到 hive过程中需要注意的几个地方,包括 NULL值处理增量导入parquet格式的日期类型

    注:这种数据传输工具其实没必要深究所有用法,用到哪块去研究下就行了

    Sqoop版本:1.4.6 - CDH5.13.0


    一、NULL处理

    1. 观察测试

    先看执行语句:

    sqoop import --connect jdbc:mysql://10.3.1.4:3308/anti_fraud --username catchd --password Edrayd8^u --table c_apply_info --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-overwrite --create-hive-table --hive-database test --hive-table c_apply_info --delete-target-dir -m 1

    注:-m 1 启动 1个map任务来并行导入数据,默认是4个,最好不要将数字设置为高于集群的节点数

    这是mysql转hive存储为text类型的基本导出语句

    我们注意看mysql中的NULL值在导入成Hive表后是如何存在的:
    这里写图片描述

    我们测试下这个null到底是个啥:

    执行 hive语句:

    select * from test.c_apply_info where remark is null
     
    • 1

    发现 无法显示 null字符串的记录!

    select * from test.c_apply_info where remark = 'null'
     
    • 1

    这种方式才能查找出,说明确实是null字符串,并且在HDFS中也是以null字符串形式存储的

    2.null字符串转为NULL

    添加下面两条参数可以实现:

    param含义
    –null-string <null-string>如果指定列为字符串类型,使用指定字符串替换值为null的该类列的值
    –null-non-string <null-string>如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值

    添加后再测试:

    sqoop import --connect jdbc:mysql://10.3.1.4:3308/anti_fraud --username catchd--password Edrayd8^u --table c_apply_info --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-overwrite --create-hive-table --hive-database test --hive-table c_apply_info --delete-target-dir -m 1 --null-string '\\N' --null-non-string '\\N'

    可以看到,加上–null-string语句后,‘null’ 字符串变成了NULL:
    这里写图片描述

    执行 hive语句:

    select * from test.c_apply_info where remark is null
     
    • 1

    发现这样可以成功查询出NULL值

    select * from test.c_apply_info where remark = 'NULL'
     
    • 1

    而这种方式并不能,说明确实是NULL,而不是字符串

    由于我们 –null-string 后添加的是 '\\N',那么通过这个能不能查出NULL值呢:

    select * from test.c_apply_info where remark = '\N'
    select * from test.c_apply_info where remark = '\\N'
     
    • 1
    • 2

    发现上面这两种方式并不行

    注:经测试,–null-string 后添加 '\\N' 或者 'NULL' 都可以!即都可以在hive表中通过is null 的方式查出NULL值,但不同的是--null-string '\\N'实际在HDFS中是以\N的存储NULL,而--null-string 'NULL'实际在HDFS中是以NULL的存储NULL

    3.扩展

    我们可以通过 serialization.null.format 属性指定 hive的NULL值识别:

    alter table test.c_apply_info SET SERDEPROPERTIES('serialization.null.format' = 'aaa'); 
     
    • 1

    通过该语句,我们可以把hive表中的‘aaa’字符串转化为NULL值,我们在查询hive表时,原本显示的aaa字符串就会变为NULL!但实际HDFS存储时还是aaa!

    注:该属性value不能为中文!

    通过这个也可以实现我们对NULL值处理的某些需求!


    二、增量导入

    核心参数:

    param含义
    –check-column用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似. 注意:这些被指定的列的类型不能使任意字符类型(在关系数据库中),如char、varchar等类型都是不可以的,同时–check-column可以去指定多个列
    –incremental用来指定增量导入的模式,两种模式分别为Append和Lastmodified
    –last-value指定上一次导入中检查列指定字段最大值,即会导入比lastvalue指定值的数据记录

    注意:上面三个参数都必须添加

    执行语句:

    sqoop import --connect jdbc:mysql://10.3.1.4:3308/anti_fraud --username catchd--password EdrwMd8^u --table c_apply_info --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-database test --hive-table c_apply_info --incremental lastmodified --check-column update_time --last-value '2018-06-27 00:00:00' -m 1 --null-string '\\N' --null-non-string '\\N'

    以上语句使用 lastmodified 模式进行增量导入,结果报错

    错误信息:--incremental lastmodified option for hive imports is not supported. Please remove the parameter --incremental lastmodified

    错误原因:Sqoop 不支持 mysql转hive时使用 lastmodified 模式进行增量导入,但mysql转HDFS时可以支持该方式!

    我们使用append方式导入:

    sqoop import --connect jdbc:mysql://10.3.1.4:3308/anti_fraud --username catchd--password EdrwMd8^u --table c_apply_info --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-database test --hive-table c_apply_info --incremental append--check-column update_time --last-value '2018-06-27 00:00:00' -m 1 --null-string '\\N' --null-non-string '\\N'

    增量导入成功!


    三、指定parquet格式

    执行语句:

    sqoop import --connect jdbc:mysql://10.3.1.4:3308/anti_fraud --username moercredit --password EdrwM7ayd8^u --table c_apply_info --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-overwrite --create-hive-table --hive-database test --hive-table c_apply_info --delete-target-dir -m 1 --null-string '\\N' --null-non-string '\\N' --as-parquetfile --outdir /root/sqoop

    在上面的基础上指定了parquet文件格式java中间文件的目录路径outdir

    建立完成后查看建表语句:

    show CREATE TABLE test.c_apply_info
     
    • 1
    1   CREATE TABLE `test.c_apply_info`(
    2     `id` bigint, 
    3     `cust_id` bigint, 
    4     `channel_id` bigint, 
    5     `product_type` int, 
    6     `apply_amount` string, 
    7     `apply_period` int, 
    8     `repayment_type` int, 
    9     `loan_usage` int, 
    10    `loan_usage_other` string, 
    ............
    31    `remark` string, 
    32    `is_deleted` int)
    33  ROW FORMAT SERDE
    34    'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
    35  STORED AS INPUTFORMAT 
    36    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
    37  OUTPUTFORMAT 
    38    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
    39  LOCATION
    40    'hdfs://cdh1:8020/user/hive/warehouse/test.db/c_apply_info'
    41  TBLPROPERTIES (
    42    'COLUMN_STATS_ACCURATE'='false', 
    43    'avro.schema.url'='hdfs://cdh1:8020/user/hive/warehouse/test.db/c_apply_info/.metadata/schemas/1.avsc', 
    44    'kite.compression.type'='snappy', 
    45    'numFiles'='0', 
    46    'numRows'='-1', 
    47    'rawDataSize'='-1', 
    48    'totalSize'='0', 
    49    'transient_lastDdlTime'='1534771094')
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    关于:ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    SerDe 是Serialize/Deserialize的简称,用于指定序列化和反序列化
    serde包括内置类型:Avro、ORC、RegEx、Thrift、Parquet、CSV、JsonSerde
    也可以写一个自定义类 继承 AbstractSerde类,重写initialize和deserialize等方法,然后hive语句:add jar MySerde.jar

    问题:
    发现 mysql 中的 datetime 类型字段create_time和update_time都变成了bigint类型!
    原来parquet格式和之前默认Text格式不同,之前是把datetime(mysql)转为string,parquet是把datetime转化为bigint


    展开全文
  • el-date-picker时间清空值为null处理

    千次阅读 2020-10-24 12:18:17
    当项目有时间选择器有查询条件定义数据为数组值,初始化值为空,当选择后值为一个数组,里面有两个值,再次清空时,值将变为null,传入后台将报错,采用watch监听处理这块bug! 项目中的一些代码 <el-col :span=...

    element 时间选择器处理选择值

    当项目有时间选择器有查询条件定义数据为数组值,初始化值为空,当选择后值为一个数组,里面有两个值,再次清空时,值将变为null,传入后台将报错,采用watch监听处理这块bug!elementui的时间选择器

    项目中的一些代码

    <el-col :span="10">
              <el-form-item label="日期">
                <el-date-picker
                  v-model="overallForm.time"
                  type="datetimerange"
                  :picker-options="pickerOptions"
                  range-separator="至"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  format="yyyy-MM-dd HH:mm:ss"
                  value-format="yyyy-MM-dd HH:mm:ss"
                  :default-time="['00:00:00', '23:59:59']"
                  align="right"
                ></el-date-picker>
              </el-form-item>
            </el-col>
            定义的data
     data() {
        return {
          pickerOptions: {
            shortcuts: [
              {
                text: "最近一周",
                onClick(picker) {
                  const end = new Date();
                  const start = new Date();
                  start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
                  picker.$emit("pick", [start, end]);
                },
              },
              {
                text: "最近一个月",
                onClick(picker) {
                  const end = new Date();
                  const start = new Date();
                  start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
                  picker.$emit("pick", [start, end]);
                },
              },
              {
                text: "最近三个月",
                onClick(picker) {
                  const end = new Date();
                  const start = new Date();
                  start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                  picker.$emit("pick", [start, end]);
                },
              },
            ],
          },
          overallForm: {
            time: [],
          },
        }
      },
      methods:{
        check(){
          let params = {
                 startTime:  this.overallForm.time[0] ,
                 endTime:  this.overallForm.time[1] ,
                 limit: this.page.pageSize,
                 page: this.page.pageNo,
              };
            //请求axios
            *************************
           } 
      }
    

    这样在发送接口时会暴露出一些问题。就如上文中提到选择数据后清空后值不在是array而是null,这样使用watch监听

    watch不要直接监听整个对象,直接监听精准值,避免不必要的性能浪费

      watch: {
        "overallForm.time"(newVal) {
          if (newVal == null) {
            this.overallForm.time = [];
          }
        },
      },
    

    这样中间暴露的一些弊端就解决了

    展开全文
  • 表格导出值为null处理为空字符串

    千次阅读 2019-07-15 10:42:38
    无论什么导出方法,都需要set,get方法 所以在类里面做处理就行了。 第二种方法是在sql语句里进行处理: 利用mysql语法:IFNULL(expr1,'') expr1为要查的属性。 ...

    无论什么导出方法,都需要set,get方法

    所以在类里面做处理就行了。

    第二种方法是在sql语句里进行处理:

    利用mysql语法:IFNULL(expr1,'')  expr1为要查的属性。

     

     

    展开全文
  • cdh hue sqoop export 空值null处理

    千次阅读 2018-12-05 17:45:33
    INSERT OVERWRITE DIRECTORY '${TMP_PATH}' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' NULL DEFINED AS "\\N" ${HQL}; 二、删除目标库重复数据 三、导出 四、删除HDFS临时文件 注意点: 查出时...
  • package com.powerpeak.adstation.config; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import ...
  • 数据库中null处理

    千次阅读 2018-08-12 21:46:42
    判断null值必须使用is null 或is not null 不能使用=null或!=null 例:1.select * from tbstudent where tsage is null --查询所有tsage例为空的同学信息  2.select * from tbstudent where tsage is not null -...
  • iOS —— 数据解析Null处理

    千次阅读 2016-06-07 11:48:58
    在使用JSON解析数据时总会出现null数据导致向某一对象发送消息时向NSNull发送,导致崩溃现象。 例:2016-06-07 11:48:02.008 MyDemo[1396:62255] -[NSNull objectForKeyedSubscript:]: unrecognized selector sent ...
  • 前言:在实际项目中,我们难免会遇到一些 null ... 这种空字符串 我们这里使用默认Jackson和fastJson的Json转化器对null处理做一个对比 1.默认Jackson的JSON转化器对null的处理 写一个JacksonConfig配置类 pac...
  • mybatis-plus更新字段为null处理

    千次阅读 2019-11-05 09:34:48
    在mybatis-puls重设置的全局更新策略 为null的字段忽略更新。但是在某些业务需求下面,可能需要某些字段更新为null值。那么改如何设置 1,
  • List类型的判空和null处理

    千次阅读 2020-02-27 16:32:17
    if (list == null || list.size() == 0) {} if (list != null && list.size() != 0) {} 可能会有人疑问如果满足 list == null ,那么这个list不就为空了吗?为什么还要再使用另一个条件 list.size == 0 呢...
  • @RequestParam 接收参数的值为null处理

    千次阅读 2020-08-12 11:40:15
    @RequestMapping(value = "/test") public String test( @RequestParam(value = "profit",required = false,defaultValue = "0") int ...第一种处理方式(如上图):defaultValue请求参数的默认值,一般和 required =.
  • mysql之null处理函数

    千次阅读 2019-04-08 14:31:47
    null处理函数 IFNULL(expr1,expr2) 如果第一个参数 expr1 不为NULL则直接返回它,否则返回第二个参数 expr2。返回值是数字或者字符串。它相当于oracle中的nvl函数 SELECT ifnull(1,0); SELECT ifnull(NULL,10); ...
  • clickhouse中对于null处理和其他数据库有点差别。测试分析如下: 1.建表语句 CREATE TABLE default.testeasy ( `sequenceId` UInt32, `tableaId` String, `eventOccurTime` DateTime, `abnormalTags` ...
  • 关于map中取值null处理

    千次阅读 2018-05-24 14:22:00
    2019独角兽企业重金招聘Python工程师标准>>> ...在map中取值为null ,转换成String的时候 null 变成了“null” 开发谨记 转载于:https://my.oschina.net/u/198077/blog/1817998
  • FreeMarker 对null值的处理技巧

    千次阅读 2018-07-31 09:57:21
    The FreeMarker template language doesn't know the Java language null at all. It doesn't have null keyword, and it can't test if something is null or not.   1.判断是否存在,通过exists关键字.....
  • freemarker中对null值的处理

    万次阅读 2022-01-23 11:09:10
    1. freemarker不支持null。 如果值为null会报错,如下: FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> setmeal.sex [in ...
  • 前端优雅的处理接口返回的Josn数据中有null值的情况,再也不用写一堆非空校验了
  • 数据库查询字段空值null处理

    千次阅读 2020-02-28 14:52:30
    以下都将为空的int型字段处理成0值(处理后的值需要和对应字段的类型一致) mysql数据库: select ifnull(字段名,0) from 表名; sqlserver数据库: select isnull(字段名,0) from 表名; case when columnName ...
  • Python3之处理null

    千次阅读 2021-01-12 17:10:28
    处理None值 :param origin: :return: """ if type(origin) == dict: result = json.dumps(origin).replace("null", '""') rst = json.loads(result) return rst result = origin.replace("nu
  • Clickhouse 对null值的处理

    千次阅读 2022-01-24 13:40:57
    SQL语言对于NULL值的判断 Clickhouse 使用 SQL SELECT 命令及 WHERE ...为了处理这种情况,Clickhouse提供了以下两个函数来判断值是否为NULL IS NULL isNull(value) MySQL里,额外提供了 <=> (比较操作符),
  • SpringBoot框架返回Json数据中null处理,将字符串类型null值转换为"",将集合数组类型null值转换为[],将原始数据类型null值转换为0,将布尔类型null值转换为false,将实体对象null值转换为{}。 1.自定义null值...
  • elasticsearch 处理null

    千次阅读 2018-07-25 18:03:51
    select eid,ent_name from ent_search where enttype_code is NULL; 在elasticsearch中,我们使用的api为exists,这个查询是:查询这个字段为空的或者没有这个字段的: GET ent_search/_search { &quot;_...
  • Oracle唯一约束中NULL处理

    千次阅读 2018-11-25 18:22:09
    根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束。   CREATE TABLE TESTAA (ID NUMBER) SELECT * FROM ...
  • DataX处理mysql为null的数据到hive

    千次阅读 2022-04-24 12:23:51
    默认情况下,HFDS Writer会将null值存储为空字符串(‘’),而Hive默认的null值存储格式为\N。所以后期将DataX同步的文件导入Hive表就会出现问题。 解决方案 修改DataX HDFS Writer的源码,增加自定义null值存储...
  • sqoop将mysql的一张表导入到hive中,发现以前is null的字段导入到hive的时候,被转换为了字符串’NULL’或’null’。 原语句: sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true –connect ...
  • 利用Java 8 Optional 来进行null处理

    千次阅读 2017-07-13 00:44:22
    短文中,介绍了如何利用Java 8 Optional 来进行null处理
  • DataX将HDFS数据迁移到Mysql中NULL值的处理
  • Oracle中常用的几个函数及null处理

    千次阅读 2017-04-24 22:42:15
    4 排序后对null值的处理: 使用nulls first 和nulls last select * from A t order by t.a nulls first 5 in 对null处理。 首先 select 1 from dual where 1 != null select 1 ...
  • java中如何优雅的进行null处理

    千次阅读 2020-07-16 13:53:45
    } // 如果value为null,返回value为null的Optional对象,否则生成一个value为传入value的对象 public static Optional ofNullable(T value) { return value == null ? empty() : of(value); } // 获取当前Optional...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,559,981
精华内容 1,023,992
关键字:

null处理