IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> datax之源码优化 -> 正文阅读

[大数据]datax之源码优化

CommonRdbmsWriter 类里 
fillPreparedStatementColumnType方法里

?

 String str = column.asString();
                    if (DataBaseType.PostgreSQL.compareTo(dataBaseType)==0&&StringUtils.isNotEmpty(str)&&str.indexOf('\u0000')>-1){
                        //如果writer是postgresql  并且字段类型是text vachar  然后值value!=null  同时含有这个特殊字符
                        str = str.replace('\u0000',' ').replace(" ","");
                    }
                    if (DataBaseType.Oracle.compareTo(dataBaseType)==0){
                        if (columnSqltype==Types.VARCHAR&&str!=null&&str.getBytes(StandardCharsets.UTF_8).length>=4000){
                                    //全中文3000字       9000 字节  -> 1333字符  4000字节
                                    //全英文5000字       5000字节   -> 4000字符  4000字节
                                    //中文1500 英文1000  字节5500   -> 2000(中1500英500)  5000字符 -> 1333字符
                                    str = str.substring(0, Math.min(str.length(), 4000));
                                    if (str.getBytes(StandardCharsets.UTF_8).length>=4000){
                                        str = str.substring(0, 1333); //直接认为全是中文
                                    }
                        }
                        if (columnSqltype==Types.NVARCHAR&&str!=null&&str.length()>=2000){
                            //2000中文   2000英文
                            if (str.getBytes(StandardCharsets.UTF_8).length>2000){
                                //有中文
                                str = str.substring(0, 1333);
                            }else { //有中英文
                                str= str.substring(0, 1500 );
                            }
                        }
                    }
                    preparedStatement.setString(columnIndex + 1, str);
                    break;

说下优化点

1.优化输出到postgresql里时候 有个特殊字符\u0000 在插入的时候会报错直接替换为无了。这个不会影响结果,因为这个字符本身大多时候就没有意义

2.优化oraclewriter时,由于hive的string是不限长度的,但是oracle的varhcar2最长是4000字节,1333汉字,nvarchar2000是2000字符。

但是在insert into? oracle_table values ("2000个汉字的时候") 会报一个下面的错 【仅能绑定要插入的LONG列的LONG值的错】

在insert into? oracle_table values ("1500个汉字的时候") 不会报错....

但是在直接向表里粘贴2000汉字时候,不会报错

有熟悉这块的可以自行更改。。这个改动的目的是保证所有数据都插入到oracle即使部分数据残缺。

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:49:32  更:2022-05-01 15:52:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:24:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码