当前位置: 首页 > news >正文

完美解决hive external表中csv字段内容含“,“逗号的问题

为解决hive表中csv字段内容含","逗号的问题,网上几乎都是说要用org.apache.hadoop.hive.serde2.OpenCSVSerde。
使用方法为:

1、mysql导出时,加一个ENCLOSED BY ‘"’,
示例:

 mysql -h 10.16.0.10 -P 13306 -u root -p123 -e "SELECT * FROM loan.rm_rent_plan limit 100 INTO OUTFILE '/tmp/rm_rent_plan.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n'"

这样出来的csv:

"000002219E7B4C819FC011D14B170B2F","2F4F17BC110C45FDA9076E8F8E3CE000","76CBA33718744533A3030E55FC55CA78","26","2015-06-16","2015-07-15","11474.00","11474.00","10364.55","1109.45","174544.31","11474.00","11474.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00",\N,"7.200000","10",\N,"10",\N,"transfer","2015-07-15 00:00:00","transfer","2024-05-14 13:35:15"
"000008F2551D4F21BEB386521D2AA8ED","80385054F2784911908CACBFC9D65AE3","9122EE380B7643229EB9F1F5F39A834C","41","2017-09-16","2017-10-15","14668.00","14668.00","13890.48","777.52","0.00","14668.00","14668.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00",\N,"8.200000","10",\N,"10",\N,"transfer","2017-10-15 00:00:00","transfer","2024-05-14 13:35:15"

2、hive外部表使用ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.OpenCSVSerde’,
例如:

CREATE external TABLE acct.tmp_yecai_rm_rent_plan (  id STRING COMMENT 'id',  order_id STRING COMMENT '订单号:订单基本信息表id',  ...,  update_time TIMESTAMP COMMENT '修改时间'  ) COMMENT '租金计划表'ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "\"", "escapeChar" = "\\")STORED AS textfile location '/dmp/acct/tmp/yecai/rm_rent_plan/test'

这个方案其它都完美,但唯一的问题是\N无法识别为null
网上翻了好久,结果发现OpenCSVSerde确实不支持null value的表示。
需求有人提出了,但还没解决:
https://github.com/ogrodnek/csv-serde/issues/15

本人又是追求完美型的性格,所以接着查找,最后终于找到了,就是hive原生的csv支持转义符自定义, ESCAPED BY ‘\’, 原来如此简单
示例:

CREATE external TABLE acct.tmp_yecai_rm_rent_plan (  id STRING COMMENT 'id',   order_id STRING COMMENT '订单号:订单基本信息表id',   equip_id STRING COMMENT '设备id:设备表表id',   periods INT COMMENT '租金期次',   start_date DATE COMMENT '本期计息开始日',   plan_date DATE COMMENT '计划还款日期',  updated_by STRING COMMENT '修改人',   update_time TIMESTAMP COMMENT '修改时间'  ) COMMENT '租金计划表'ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ESCAPED BY '\\'STORED AS textfile location '/dmp/acct/tmp/yecai/rm_rent_plan/test'

这样几近完美了,转义,空值问题全部解决了。

http://www.dtcms.com/a/317401.html

相关文章:

  • 贪心算法学习 跳跃游戏
  • 利用OJ判题的多语言优雅解耦方法深入体会模板方法模式、策略模式、工厂模式的妙用
  • macOS Python 安装
  • 《设计模式之禅》笔记摘录 - 13.迭代器模式
  • 外观模式(Facade Pattern)及其应用场景
  • 【设计模式精解】从根上理解模板方法设计模式及其应用
  • RN项目环境搭建和使用-Mac版本(模拟器启动不起来的排查)
  • Python虚拟环境完全指南:pyenv vs venv 在macOS上的使用详解
  • Mac安装WebStorm
  • java中Reflection反射(一)
  • MCU AI/ML - 弥合智能和嵌入式系统之间的差距
  • Java猜数字简易小游戏可复制
  • qt6 cmake vscode加载qrc图片资源
  • vue3 el-select el-option 使用
  • 批量打印Excel条形码
  • Linux入门DAY18
  • 单变量单步时序预测:CNN-GRU卷积神经网络结合门控循环单元
  • EasyExcel高效工具类:简化Excel导入导出,支持多Sheet与枚举转换
  • 基于CentOS-7.6部署k8s-1.24.0,containerd作为CRI,nerdctl作为容器管理CLI
  • Datawhale AI 夏令营 让AI读懂财报PDF(多模态RAG)202508
  • bool 类型转换运算符重载
  • WordPress自定义.js文件排序实现方法
  • CSS :is () 与 :where ():简化复杂选择器的 “语法糖”
  • 凸优化:鞍点和对偶停止设计准则
  • 基于PHP的快递管理系统的设计与实现
  • 利用C++11和泛型编程改进原型模式
  • 开发笔记 | 接口与抽象基类说明以及对象池的实现
  • SpringBoot 3.x整合Elasticsearch:从零搭建高性能搜索服务
  • JSON巴巴 - 专业JSON格式化工具:让任何JSON都能完美格式化
  • 基于 Jenkins Pipeline 实现 DITA 文档自动化构建与发布(开源方案)