個(gè)體營(yíng)業(yè)執(zhí)照可以做網(wǎng)站嘛微商軟文
本文介紹如何在 Doris 中導(dǎo)入 CSV 格式的數(shù)據(jù)文件。Doris 支持靈活的 CSV 格式配置,包括自定義分隔符、字段包圍符等,并提供多種導(dǎo)入方式以滿足不同場(chǎng)景的數(shù)據(jù)導(dǎo)入需求。
導(dǎo)入方式?
Doris 支持以下方式導(dǎo)入 CSV 格式數(shù)據(jù):
- Stream Load
- Broker Load
- Routine Load
- MySQL Load
- INSERT INTO FROM S3 TVF
- INSERT INTO FROM HDFS TVF
參數(shù)配置?
參數(shù)支持情況?
下表列出了各種導(dǎo)入方式支持的 CSV 格式參數(shù):
參數(shù) | 默認(rèn)值 | Stream Load | Broker Load | Routine Load | MySQL Load | TVF |
---|---|---|---|---|---|---|
行分隔符 | \n | line_delimiter | LINES TERMINATED BY | 不支持 | LINES TERMINATED BY | line_delimiter |
列分隔符 | \t | column_separator | COLUMNS TERMINATED BY | COLUMNS TERMINATED BY | COLUMNS TERMINATED BY | column_separator |
包圍符 | 無(wú) | enclose | PROPERTIES.enclose | PROPERTIES.enclose | PROPERTIES.enclose | enclose |
轉(zhuǎn)義符 | \ | escape | PROPERTIES.escape | PROPERTIES.escape | PROPERTIES.escape | escape |
跳過(guò)行數(shù) | 0 | skip_lines | PROPERTIES.skip_lines | 不支持 | IGNORE LINES | skip_lines |
裁剪雙引號(hào) | false | trim_double_quotes | 不支持 | PROPERTIES.trim_double_quotes | 不支持 | trim_double_quotes |
壓縮格式 | plain | compress_type | PROPERTIES.compress_type | 不支持 | 不支持 | compress_type |
注意
- Stream Load:參數(shù)直接通過(guò) HTTP Header 指定,如:
-H "line_delimiter:\n"
- Broker Load:參數(shù)通過(guò) SQL 語(yǔ)句指定,其中:
- 分隔符通過(guò)?
COLUMNS TERMINATED BY
,?LINES TERMINATED BY
?指定 - 其他參數(shù)通過(guò)?
PROPERTIES
?指定,如:PROPERTIES("compress_type"="gz")
- 分隔符通過(guò)?
- Routine Load:參數(shù)通過(guò) SQL 語(yǔ)句指定,其中:
- 分隔符通過(guò)?
COLUMNS TERMINATED BY
?指定 - 其他參數(shù)通過(guò)?
PROPERTIES
?指定,如:PROPERTIES("enclose"="\"")
- 分隔符通過(guò)?
- MySQL Load:參數(shù)通過(guò) SQL 語(yǔ)句指定,其中:
- 分隔符通過(guò)?
LINES TERMINATED BY
,?COLUMNS TERMINATED BY
?指定 - 其他參數(shù)通過(guò)?
PROPERTIES
?指定,如:PROPERTIES("escape"="\\")
- 分隔符通過(guò)?
- TVF:參數(shù)通過(guò) TVF 語(yǔ)句指定,如:
S3("line_delimiter"="\n")
參數(shù)說(shuō)明?
行分隔符?
- 作用:指定導(dǎo)入文件中的換行符
- 默認(rèn)值:
\n
- 特點(diǎn):支持多個(gè)字符組合作為換行符
- 使用場(chǎng)景和示例:
- Linux/Unix 系統(tǒng)文件:
數(shù)據(jù)文件: 張三,25\n 李四,30\n參數(shù)設(shè)置: line_delimiter:\n (默認(rèn)值,可不設(shè)置)
- Windows 系統(tǒng)文件:
數(shù)據(jù)文件: 張三,25\r\n 李四,30\r\n參數(shù)設(shè)置: line_delimiter:\r\n
- 特殊程序生成文件:
數(shù)據(jù)文件: 張三,25\r 李四,30\r參數(shù)設(shè)置: line_delimiter:\r
- 自定義多字符分隔符:
數(shù)據(jù)文件: 張三,25|| 李四,30||參數(shù)設(shè)置: line_delimiter:||
- Linux/Unix 系統(tǒng)文件:
列分隔符?
- 作用:指定導(dǎo)入文件中的列分隔符
- 默認(rèn)值:
\t
(制表符) - 特點(diǎn):
- 支持可見(jiàn)和不可見(jiàn)字符
- 支持多字符組合
- 不可見(jiàn)字符需要使用?
\x
?前綴的十六進(jìn)制表示
- MySQL 協(xié)議特殊處理:
- 不可見(jiàn)字符需要額外增加反斜線
- 如 Hive 的?
\x01
?在 Broker Load 中需要寫成?\\x01
- 使用場(chǎng)景和示例:
- 常見(jiàn)可見(jiàn)字符:
數(shù)據(jù)文件: 張三,25,北京 李四,30,上海參數(shù)設(shè)置: column_separator:,
- 制表符(默認(rèn)):
數(shù)據(jù)文件: 張三 25 北京 李四 30 上海參數(shù)設(shè)置: column_separator:\t (默認(rèn)值,可不設(shè)置)
- Hive 文件(Stream Load):
數(shù)據(jù)文件: 張三\x0125\x01北京 李四\x0130\x01上海參數(shù)設(shè)置: column_separator:\x01
- Hive 文件(Broker Load):
數(shù)據(jù)文件: 張三\x0125\x01北京 李四\x0130\x01上海參數(shù)設(shè)置: PROPERTIES("column_separator"="\\x01")
- 多字符分隔符:
數(shù)據(jù)文件: 張三||25||北京 李四||30||上海參數(shù)設(shè)置: column_separator:||
- 常見(jiàn)可見(jiàn)字符:
包圍符?
- 作用:保護(hù)包含特殊字符的字段,防止被錯(cuò)誤解析
- 限制:僅支持單字節(jié)字符
- 常用字符:
- 單引號(hào):
'
- 雙引號(hào):
"
- 單引號(hào):
- 使用場(chǎng)景和示例:
- 字段包含列分隔符:
數(shù)據(jù):a,'b,c',d 列分隔符:, 包圍符:' 解析結(jié)果:3個(gè)字段 [a] [b,c] [d]
- 字段包含行分隔符:
數(shù)據(jù):a,'b\nc',d 列分隔符:, 包圍符:' 解析結(jié)果:3個(gè)字段 [a] [b\nc] [d]
- 字段既包含列分隔符又包含行分隔符:
數(shù)據(jù):a,'b,c\nd,e',f 列分隔符:, 包圍符:' 解析結(jié)果:3個(gè)字段 [a] [b,c\nd,e] [f]
- 字段包含列分隔符:
轉(zhuǎn)義符?
- 作用:轉(zhuǎn)義字段中與包圍符相同的字符
- 限制:僅支持單字節(jié)字符,默認(rèn)為?
\
- 使用場(chǎng)景和示例:
- 字段包含包圍符:
數(shù)據(jù):a,'b,\'c',d 列分隔符:, 包圍符:' 轉(zhuǎn)義符:\ 解析結(jié)果:3個(gè)字段 [a] [b,'c] [d]
- 字段包含多個(gè)包圍符:
數(shù)據(jù):a,"b,\"c\"d",e 列分隔符:, 包圍符:" 轉(zhuǎn)義符:\ 解析結(jié)果:3個(gè)字段 [a] [b,"c"d] [e]
- 字段包含轉(zhuǎn)義符本身:
數(shù)據(jù):a,'b\\c',d 列分隔符:, 包圍符:' 轉(zhuǎn)義符:\ 解析結(jié)果:3個(gè)字段 [a] [b\c] [d]
- 字段包含包圍符:
跳過(guò)行數(shù)?
-
作用:跳過(guò) CSV 文件的前幾行
-
類型:整數(shù)類型
-
默認(rèn)值:0
-
特殊說(shuō)明:
- 當(dāng) format 為?
csv_with_names
?時(shí),系統(tǒng)會(huì)自動(dòng)跳過(guò)首行(列名),忽略 skip_lines 參數(shù) - 當(dāng) format 為?
csv_with_names_and_types
?時(shí),系統(tǒng)會(huì)自動(dòng)跳過(guò)前兩行(列名和類型),忽略 skip_lines 參數(shù)
- 當(dāng) format 為?
-
使用場(chǎng)景和示例:
- 跳過(guò)標(biāo)題行:
數(shù)據(jù)文件: 姓名,年齡,城市 張三,25,北京 李四,30,上海參數(shù)設(shè)置: skip_lines:1 結(jié)果:跳過(guò)標(biāo)題行,導(dǎo)入后續(xù)數(shù)據(jù)
- 跳過(guò)注釋行:
數(shù)據(jù)文件: # 用戶信息表 # 創(chuàng)建時(shí)間: 2024-01-01 張三,25,北京 李四,30,上海參數(shù)設(shè)置: skip_lines:2 結(jié)果:跳過(guò)注釋行,導(dǎo)入后續(xù)數(shù)據(jù)
- 使用 csv_with_names 格式:
數(shù)據(jù)文件: name,age,city 張三,25,北京 李四,30,上海參數(shù)設(shè)置: format:csv_with_names 結(jié)果:系統(tǒng)自動(dòng)跳過(guò)首行列名
- 使用 csv_with_names_and_types 格式:
數(shù)據(jù)文件: name,age,city string,int,string 張三,25,北京 李四,30,上海參數(shù)設(shè)置: format:csv_with_names_and_types 結(jié)果:系統(tǒng)自動(dòng)跳過(guò)前兩行的列名和類型信息
- 跳過(guò)標(biāo)題行:
裁剪雙引號(hào)?
- 作用:裁剪掉 CSV 文件每個(gè)字段最外層的雙引號(hào)
- 類型:布爾類型
- 默認(rèn)值:false
- 使用場(chǎng)景和示例:
- 裁剪雙引號(hào):
數(shù)據(jù)文件: "張三","25","北京" "李四","30","上海"參數(shù)設(shè)置: trim_double_quotes:true 結(jié)果: 張三,25,北京 李四,30,上海
- 裁剪雙引號(hào):
壓縮格式?
- 作用:指定導(dǎo)入文件的壓縮格式
- 類型:字符串, 忽略大小寫
- 默認(rèn)值:plain
- 支持的壓縮格式:
- plain:不壓縮(默認(rèn))
- bz2:BZIP2 壓縮
- deflate:DEFLATE 壓縮
- gz:GZIP 壓縮
- lz4:LZ4 Frame 格式壓縮
- lz4_block:LZ4 Block 格式壓縮
- lzo:LZO 壓縮
- lzop:LZOP 壓縮
- snappy_block:SNAPPY Block 格式壓縮
- 注意事項(xiàng):
- tar 是一種文件打包格式,不屬于壓縮格式,因此不支持 .tar 文件
- 如需使用 tar 打包的文件,請(qǐng)先解包后再導(dǎo)入
使用示例?
本節(jié)展示了不同導(dǎo)入方式下的 CSV 格式使用方法。
Stream Load 導(dǎo)入?
# 指定分隔符
curl --location-trusted -u root: \-H "column_separator:," \-H "line_delimiter:\n" \-T example.csv \http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load# 處理帶引號(hào)的數(shù)據(jù)
curl --location-trusted -u root: \-H "column_separator:," \-H "enclose:\"" \-H "escape:\\" \-T example.csv \http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load# 導(dǎo)入壓縮文件
curl --location-trusted -u root: \-H "compress_type:gz" \-T example.csv.gz \http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load
Broker Load 導(dǎo)入?
-- 指定分隔符
LOAD LABEL test_db.test_label
(DATA INFILE("s3://bucket/example.csv")INTO TABLE test_tableCOLUMNS TERMINATED BY ","LINES TERMINATED BY "\n"
)
WITH S3
(...
);-- 處理帶引號(hào)的數(shù)據(jù)
LOAD LABEL test_db.test_label
(DATA INFILE("s3://bucket/example.csv")INTO TABLE test_tablePROPERTIES("enclose" = "\"","escape" = "\\")
)
WITH S3
(...
);-- 導(dǎo)入壓縮文件
LOAD LABEL test_db.test_label
(DATA INFILE("s3://bucket/example.csv.gz")INTO TABLE test_tablePROPERTIES("compress_type" = "gz")
)
WITH S3
(...
);
Routine Load 導(dǎo)入?
-- 指定分隔符
CREATE ROUTINE LOAD test_db.test_job ON test_table
COLUMNS TERMINATED BY ","
FROM KAFKA
(...
);-- 處理帶引號(hào)的數(shù)據(jù)
CREATE ROUTINE LOAD test_db.test_job ON test_table
COLUMNS TERMINATED BY ","
PROPERTIES
("enclose" = "\"","escape" = "\\"
)
FROM KAFKA
(...
);
MySQL Load 導(dǎo)入?
-- 指定分隔符
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n';-- 處理帶引號(hào)的數(shù)據(jù)
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
PROPERTIES
("enclose" = "\"","escape" = "\\"
);-- 跳過(guò)表頭
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
TVF 導(dǎo)入?
-- 指定分隔符
INSERT INTO test_table
SELECT *
FROM S3
("uri" = "s3://bucket/example.csv","format" = "csv","column_separator" = ",","line_delimiter" = "\n"...
);-- 處理帶引號(hào)的數(shù)據(jù)
INSERT INTO test_table
SELECT *
FROM S3
("uri" = "s3://bucket/example.csv","format" = "csv","column_separator" = ",","enclose" = "\"","escape" = "\\"...
);-- 導(dǎo)入壓縮文件
INSERT INTO test_table
SELECT *
FROM S3
("uri" = "s3://bucket/example.csv.gz","format" = "csv","compress_type" = "gz"...
);