全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件

导入中特殊符号处理

更新时间:2017-12-12 10:59:05

云数据库 HybridDB for PostgreSQL 支持多种数据导入方法:

在数据导入的过程中,经常因为存在特殊字符导致导入失败。本文介绍了预先处理导入数据中的特殊字符的方法,从而消除特殊字符带来的问题。

在上述导入方法中,从 MySQL 导入和从 PostgreSQL 导入中使用的工具,会自动将特殊符号进行转义和包装,您可以直接使用而不需要过多的设置。这里重点介绍在使用 OSS 高速并行导入和通过 COPY 数据导入过程中遇到特殊符号的处理方法。

OSS 高速并行导入

在数据导入过程中,一般是将文件的每行作为一个元组,通过在每行中规定分隔符来分割每一列的数据。下文首先介绍分隔符的使用方法和约束,然后介绍在每列中遇到特殊符号的处理方法。

分隔符

在创建 OSS 外部表语法中,您可以通过在 FORMAT 子句后面指定 DELIMITER 分隔符,如下:

  1. FORMAT 'TEXT' (DELIMITER ',')
  • 如果 FORMAT 'TEXT',则 DELIMITER 缺省值为'\t'
  • 如果 FORMAT 'CSV',则 DELIMITER 缺省值为','

您也可以自定义 DELIMITER,但是创建外部表语法中自定义的 DELIMITER 必须满足以下约束:

  • 必须是一个 ASCII 字符,不允许是汉字或者 2 个以及以上 ASCII 字符。
  • 不支持'\n''\r'
  • 支持除'\n''\r'之外的其他转义字符,使用时前面加 E 或者 e。
  • 支持前面不加 E 的转义字符'\t'
  • 如果是 TEXT 模式,可以设置 DELIMITER 为 OFF,支持单列外部表。

为了能够正常读取数据,您提供的 OSS 文件内容必须严格遵守设置的 DELIMITER。

数据中的特殊符号

在数据导入过程中,出现特殊符号的场景可以分为以下几种:

  • 列中存在和 DELIMITER 相同的字符。

    • 如果您使用 TEXT 模式,则需要在每个 DELIMITER 字符前加 ESCAPE 符。ESCAPE 符可以在创建外表时使用以下命令指定,缺省值为反斜杠(\)。

      1. FORMAT 'TEXT' (ESCAPE '\' )
    • 如果您使用的是 CSV 模式,则需要在每个 DELIMITER 字符前加双引号(”)。
  • 列中存在中文。OSS 外表支持中文数据,但是为了保证显示正确,您需要在创建外表时设置如下编码格式:

    1. ENCODING 'UTF8'
  • 列中存在 null。您可以设置 null 对应的匹配字符,在导入数据时将对应的字符匹配为 null。CSV 模式下缺省值为不带引号的空值,TEXT 模式下缺省值为 \N。以下命令将空格作为 null 的匹配字符,如果该列为空格,则在使用 OSS 文件导入的数据中该列值为 null。

    1. FORMAT 'text' (null ' ' )
  • 列中存在转义字符。您可以在转义字符前增加 ESCAPE 符。ESCAPE 符在创建外表时指定,CSV 模式缺省值为双引号(”),TEXT 模式缺省值为反斜杠(\)。

    • 您可以自定义 ESCAPE 为单个字符。例如,以下命令将 ESCAPE 设置为反斜杠:

      1. FORMAT 'csv' (ESCAPE '\' )
    • 您也可以设置 ESCAPE 为 OFF,避免所有字符被自动转义。
  • 列中存在单引号或者双引号。

    • 如果您使用 TEXT 模式,需要在单引号或者双引号前面增加 ESCAPE 符,默认为反斜杠(\)。
    • 如果您使用 CSV 模式,需要在单引号或者双引号前面增加 ESCAPE 符,默认为双引号(”),同时在该列前后加双引号(”),将整列括起来。

COPY 数据导入

您在使用 \COPY 语句导入数据时,分隔符的使用方法和 OSS 高速并行导入时的使用方法一样,而对数据中出现特殊符号的处理方法也和 OSS 高速并行导入相类似。不同的是 COPY 语句和 CREATE EXTERNAL TABLE 语句用法略有不同,COPY 语句详细用法见 使用 COPY 命令导入数据

本文导读目录