Teradata及Informatica中去除数据双引号的实现方法咨询
处理数据中的双引号:Teradata导出/加载与Informatica平面文件设置
我来帮你搞定这两个场景的问题,都是日常数据处理里很常见的需求~
一、Teradata中去除双引号的方法
不管是要加载到其他表,还是导出成CSV文件,核心思路都是先清除数据里已有的双引号,再配合导出工具的参数避免新增引号。
1. 加载到其他表时处理
直接用Teradata内置的REPLACE函数,把字段里的双引号替换成空字符串就行。比如你要把product_table的数据同步到target_table,可以这么写SQL:
-- 创建新表并加载数据 CREATE TABLE target_table AS SELECT PRODUCT_ID, -- 把PRODUCT_DESC里的所有双引号去掉 REPLACE(PRODUCT_DESC, '"', '') AS PRODUCT_DESC, -- 其他字段正常保留 CATEGORY, PRICE FROM product_table WITH DATA; -- 或者增量插入数据 INSERT INTO target_table SELECT PRODUCT_ID, REPLACE(PRODUCT_DESC, '"', '') AS PRODUCT_DESC, CATEGORY, PRICE FROM product_table WHERE LOAD_DATE = CURRENT_DATE;
这个方法会把字段里所有的双引号都清除,正好符合你给出的例子,把"TRADE"变成TRADE。
2. 导出为CSV文件时处理
方法一:用EXPORT命令
导出时先在SELECT里处理字段,同时设置QUOTE ''让Teradata不要给字段自动加引号:
EXPORT TO FILE '/your/output/path/products.csv' FORMAT TEXT DELIMITER ',' -- 这里设置空引号,避免导出时新增双引号 QUOTE '' SELECT PRODUCT_ID, REPLACE(PRODUCT_DESC, '"', '') AS PRODUCT_DESC, CATEGORY, PRICE FROM product_table;
方法二:用BTEQ脚本
如果是用BTEQ做批量导出,同样用REPLACE处理字段,同时关闭自动加引号的设置:
.LOGON td_server/your_username,your_password; -- 开启导出到文件 .EXPORT REPORT FILE = '/your/output/path/products.csv'; -- 设置字段分隔符为逗号 .SET SEPARATOR ','; -- 关闭自动给字段加引号的功能 .SET QUOTES OFF; -- 查询时处理双引号 SELECT PRODUCT_ID, REPLACE(PRODUCT_DESC, '"', '') AS PRODUCT_DESC, CATEGORY, PRICE FROM product_table; .EXPORT OFF; .LOGOFF;
二、Informatica加载到平面文件时的去引号设置
当然有专门的选项可以处理,分两种情况来说:
1. 清除源数据里已有的双引号
如果源数据(比如来自数据库或者上游文件)的字段本身带双引号,你可以在Expression转换里处理:
- 在Mapping里添加一个Expression转换
- 新建一个输出端口(比如
OUT_PRODUCT_DESC),表达式写:REPLACE(PRODUCT_DESC, '"', '') - 把这个输出端口连接到目标平面文件的对应字段,这样写入文件时就没有双引号了。
2. 关闭Informatica自动加引号的功能
如果是Informatica默认给字段添加双引号(比如文本格式的平面文件),直接修改目标文件的属性就行:
- 打开目标平面文件的编辑窗口,切换到Properties标签页
- 找到Quote Character选项,把默认的双引号删除(设置为空)
- 要是不需要转义字符,也可以把Escape Character留空
这样Informatica在写入文件时就不会给字段加引号了,配合上面的Expression处理,最终文件就完全没有双引号啦。
内容的提问来源于stack exchange,提问作者sethu
相关产品推荐
相关产品推荐

