适用范围:文件类型数据源(HDFS 文件数据源、FTP/SFTP 文件数据源)。数据在存储侧按「库(database)→ 表(table)」两级目录组织,表内支持用分区目录存放数据,读取时按分区路径读取目录下的数据文件。
1. 目录结构
基础路径(数据源连接上配置的根目录)下,目录层级固定为:
<基础路径>/ 在数据源配置时,作为基础路径设置
└── <database> 第一层:库目录,目录名即库名
└── <table> 第二层:表目录,一个表对应一个目录,目录名即表名
├── <数据文件> 无分区时,数据文件直接放在表目录下
└── <partition>/ 有分区时,分区目录(可按分区字段多层嵌套)
└── <数据文件>
└── _SUCCESS 表示该分区的文件已经就绪
示例:
/data/
└── mydb/ -- database: mydb
└── orders/ -- table: orders
├── orders.csv -- 无分区:数据文件直接放在表目录
└── pt_date=2024-03-13/ -- 分区目录
└── part-00001.parquet -- 数据文件
└── _SUCCESS -- 数据就绪标识,表示该分区的文件已经就绪,注意必须大写
约定:
- 第一层目录即库(database),第二层目录即表(table),系统按目录展示库、表列表。
- 一个库目录下可包含多个表目录。
- 数据文件只放在表目录或其分区目录内;库目录下、表目录之外的其他层级不会被当作数据。
- 当分区文件完全写入后,数据文件同级 touch 一个空文件 _SUCCESS ,用于标识该分区的文件已经完整。
2. 分区(partition)结构
- 分区目录命名固定为
分区字段名=分区值,例如pt_date=2024-03-13。
- 支持多级分区:按分区字段的顺序逐层嵌套目录。例如分区字段为
pt_date、hour时,目录结构为:pt_date=2024-03-13/hour=20/
- 表无分区字段时,数据文件直接放在表目录下(等价于整表只有根目录一个分区)。
- 指定读取某一分区时,将各层
分区字段=分区值转换为对应目录层级。例如读取分区:["pt_date=2024-03-13,hour=20"]等价于读取路径:
<基础路径>/<database>/<table>/pt_date=2024-03-13/hour=20
- 分区字段名需以字母或下划线开头,可包含字母、数字、下划线;分区值无额外约束。
- 表目录下未按
字段=值命名的子目录不会被识别为分区目录。 - 分区目录名以
.开头的目录会被忽略。
|
分区字段(按顺序) |
目录结构 |
|
|
|
|
|
|
3. 文件类型与文件后缀名
文件类型(配置值)与可读取的数据文件后缀对应关系如下:
|
文件类型 |
数据文件后缀 |
说明 |
|
text |
|
按文本行读取,需配置字段/列解析 |
|
csv |
|
按文本行读取,支持配置分隔符、跳过表头行 |
|
json |
|
按文本行读取,支持配置列解析 |
|
schema_free |
|
文本格式,每行是一个客户直接上报神策 8106 的 json |
|
parquet |
|
列结构与类型由文件自带 |
|
orc |
|
列结构与类型由文件自带 |
约定:
- 后缀名大小写不敏感,
.CSV与.csv等价。
- 任务按配置的文件类型筛选数据文件:只读取后缀匹配表内文件,目录中其他文件不参与读取。
- text / csv / json 为文本类格式,按行读取,支持配置跳过表头行与自定义列 schema;parquet / orc 为自描述二进制列式格式,schema 直接从文件读取,不支持自定义列 schema。
- 文本文件编码为 UTF-8。