hadoop - 配置单元创建表的多个转义字符
问题描述
我正在尝试将带有管道分隔符的 csv 加载到配置单元外部表中。数据值包含单引号、双引号、括号等。使用 Open CSV 版本 2.3
测试文件.csv
id|name|phone
1|Rahul|123
2|Kumar's|456
3|Neetu"s|789
4|Ravi [Roma]|234
表创建为 -
drop table test_schema.hive_test;
CREATE EXTERNAL TABLE test_schema.hive_test (id string, name string, phone string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES
(
'separatorChar' = '|',
'quoteChar' = '[\'\"]',
'escapeChar' = '\\'
)
LOCATION '/staging/test/hive'
tblproperties ("skip.header.line.count"="1");
输出 -
+-------------+---------------+----------------+
| hive_test.id|hive_test.name |hive_test.phone |
+-------------+---------------+----------------+
| 1 | Rahul |123 |
| 2 | Kumar's |456 |
| 3 | Neetu"s |789 |
| 4 | NULL |234 |
+---------------+------------------------------+
预期产出 -
+-------------+---------------+----------------+
| hive_test.id|hive_test.name |hive_test.phone |
+-------------+---------------+----------------+
| 1 | Rahul |123 |
| 2 | Kumar's |456 |
| 3 | Neetu"s |789 |
| 4 | Ravi [Roma] |234 |
+---------------+------------------------------+
问题是我们在数据中有多个转义序列/引号字符,因此我们需要包含所有这些字符。
解决方案
使用 LazySimpleSerDe(存储为文本文件):
CREATE EXTERNAL TABLE test_schema.hive_test (id string, name string, phone string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/staging/test/hive_test'
tblproperties ("skip.header.line.count"="1");
推荐阅读
- xamarin.forms - 无法从 Plugin.InAppBilling.ItemType 转换为 bool
- sql - 在同一个表中将数据从一列复制到另一列会将原始列中的数据设置为空
- r - 比较测试数据和预测结果
- javascript - 在树结构是对象数组的情况下,将带有树状 js 的树呈现到 symfony 中的问题
- json - JQ:删除 JSON 树中任意位置的键:值对
- python - Pandas - 通过检查同一数据帧的其他行的条件来派生新列的最佳方法
- php - 如何在 PHP 中拆分多个连接词
- javascript - MongoDB 条件更新数组元素
- flutter - Flutter web 从 Uint8List 字节获取文件在偏移量 11 处缺少扩展类型
- r - 使用带有 data.table 的向量中的列名以编程方式创建新列