hadoop - 如何在 OpenCSVSerde 中存储空值或避免 Hive 表的 LazySimpleSerde 中的引号字符
问题描述
我有一个关于 OpenCSVSerde 和 SimpleLazySerDe 的 Hive 中的 TBLProperties 的问题。
存储在文本文件中的数据文件(由 SQOOP 生成)
表属性
- 将数据存储为 OpenCSVSerde
- 分隔符由
|
- 引用Char by
"
- 转义符
\\
问题是null
值显示为空字符串""
。然后我发现了这个
使用 OpenCSVSerde 将具有 NULL 的列写入某些字符串 - HIVE
我尝试关注该主题,但如果管道|
存储在内容中,则出现一个问题,那么列将发生变化。
- 创建 OpenCSVSerde 表
CREATE TABLE `opencsv_serde`(
`a` string,
`b` string,
`c` string
)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'quoteChar'='\"',
'separatorChar'='|',
'escapeChar'='\\'
)
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
- 创建 LazySimpleSerDe 表(我认为 quoteChar 不起作用)
CREATE TABLE `lazysimple_serde`(
`a` string,
`b` string,
`c` string
)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'field.delim'='|',
'serialization.format'='|',
'escapeChar'='\\',
'quoteChar'='\"'
)
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
TBLPROPERTIES('serialization.null.format'='');
- 将数据插入
opencsv_serde
insert into opencsv_serde
select "a|a", "b", '"c|c"' union all
select "d|d", "e", null;
从 opencsv_serde 的结果中选择数据
opencsv_serde
插入数据
opencsv_serde
到lazysimple_serde
insert into lazysimple_serde
select * from opencsv_serde
- 检查
lazysimple_serde
来自lazysimple_serde 的结果
在 LazySimpleSerDe 中发现列移位
我需要知道如何在 OpenCSVSerDe 中存储 null 或防止在 LazySimpleSerDe 中移动列
谢谢
解决方案
推荐阅读
- python - 如何在 ArcGIS 表的某些特定列中写入值?
- javascript - 在失去 redis 连接(微服务)时杀死 nestjs - node.js 进程
- swift - 无法关闭邮件视图控制器
- wpf - 将样式和控件从另一个程序集导入 WPF 应用程序的正确方法是什么?
- sql-server - 为什么我的 SSIS 包在 Visual Studio 中运行但在服务器上验证失败?
- torch - 如何通过忽略钩子来强制 torch.jit.trace 编译我的模块?
- node.js - 场景完成后如何停止 cucumberjs?
- laravel-5.8 - htmlspecialchars() 期望参数 1 是字符串,数组给定 laravel 5.8
- regex - 用于替换新行的正则表达式
- python-3.x - python return语句的主要问题