SELECT ... INTO OUTFILE语句导出数据时,如何指定字段分隔符、行终止符以及文件格式(如CSV)?
在 GBase 8a 中使用 SELECT ... INTO OUTFILE 语句导出数据时,通过 OPTION 子句中的一系列参数来指定字段分隔符、行终止符及文件格式。GBase 8a 没有直接的 CSV 格式关键字,但可以通过组合参数完美模拟标准 CSV 格式。
一、核心语法与参数
导出语句的完整语法结构如下:
SELECT ... FROM ... INTO OUTFILE 'file_name'
[FIELDS TERMINATED BY 'string']
[ENCLOSED BY 'char']
[ESCAPED BY 'char']
[LINES TERMINATED BY 'string']
[CHARACTER SET charset_name]
[WRITEMODE BY ...]
... ;二、如何指定关键格式参数
1. 指定字段分隔符
使用 FIELDS TERMINATED BY 子句。
默认值:如果不指定,默认使用
'\t'(制表符,Tab键)。-- 使用竖线分隔 SELECT * FROM t1 INTO OUTFILE '/data/out1.txt' FIELDS TERMINATED BY '|'; -- 使用逗号分隔(模拟CSV) SELECT * FROM t1 INTO OUTFILE '/data/out2.txt' FIELDS TERMINATED BY ','; -- 使用不可见字符(如\x01) SELECT * FROM t1 INTO OUTFILE '/data/out3.txt' FIELDS TERMINATED BY '\x01';
2. 指定行终止符
使用 LINES TERMINATED BY 子句。
默认值:如果不指定,默认使用
'\n'(换行符)。-- 使用Windows风格的换行符 SELECT * FROM t1 INTO OUTFILE '/data/out4.txt' LINES TERMINATED BY '\r\n';
3. 指定文件格式(模拟CSV及其他格式)
通过组合 FIELDS 和 LINES 的相关参数来定义格式。
标准CSV格式:字段用逗号分隔,字符串用双引号包围,换行符结束。
SELECT * FROM t1 INTO OUTFILE '/data/out.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n';OPTIONALLY ENCLOSED BY '"':表示仅字符串类型的字段会被双引号包围,数字等类型不加。若去掉OPTIONALLY,则所有字段都加引号。ESCAPED BY '"':指定双引号为转义符。当字段内包含双引号时,会转义为两个双引号(""),这是标准CSV的规范。
TSV(制表符分隔)格式:
SELECT * FROM t1 INTO OUTFILE '/data/out.tsv' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';自定义文本格式:
-- 示例:字段用“|#|”分隔,字符串用单引号包围,行以“;\n”结束 SELECT * FROM t1 INTO OUTFILE '/data/out_custom.txt' FIELDS TERMINATED BY '|#|' ENCLOSED BY '\'' LINES TERMINATED BY ';\n';
三、其他重要格式控制参数
| 参数 | 作用 | 示例 |
|---|---|---|
ENCLOSED BY | 字段包围符。
| ENCLOSED BY '\'' (用单引号包围) |
OPTIONALLY | 与 ENCLOSED BY 连用,仅对字符串类型字段生效。 | OPTIONALLY ENCLOSED BY '"' |
ESCAPED BY | 指定转义符,默认是反斜杠 \。 |
|
CHARACTER SET | 指定导出文件字符集,如
| CHARACTER SET UTF8 |
NULL_VALUE | 指定 NULL 值的输出表示,默认是 \N。 | NULL_VALUE 'NULL' |
参数详解部分:明确说明了
TERMINATED BY、ENCLOSED BY、LINES TERMINATED BY的默认值和用法。
五、完整示例与注意事项
一个完整的、模拟标准CSV的导出示例:
SELECT id, name, salary FROM employees INTO OUTFILE '/home/gbase/employees.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
CHARACTER SET UTF8
NULL_VALUE ''
WRITEMODE BY OVERWRITES;关键注意事项:
- 文件路径:必须使用绝对路径。
远程导出:若需将文件生成在客户端机器,需在语句前加
rmt:前缀(无空格)。压缩导出:通过文件后缀自动识别,如
.gz、.snappy、.lzo。默认行为:如果目标文件已存在,默认会报错。可添加
WRITEMODE BY OVERWRITES进行覆盖。
通过灵活组合这些参数,您可以精确控制GBase 8a导出数据的格式,以满足下游系统(如HDFS、Spark、ETL工具)或交换文件(如CSV)的严格要求。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526