文件方式更新数据集方案说明
1. 路径及文件
(1)上传至服务器如下目录下:
/home/guandata/data/guandata-store/upload_dataset (非 minio 环境)
/home/guandata/data/minio/guandata-store/upload_dataset (minio 环境)
(2)每一个数据集在此目录下存储成一个目录,目录名以数据集的 id 命名,即 dsId。
2. 文件格式
(1)存为 parquet 文件格式, snappy 压缩,写成文件组,不要写单个较大的文件。
(2)需对字段名中的如下特殊字符做转义处理:
' ', ',' , ';', '{', '}', '(', ')', '\n', '\t', '=', '.'
选用的转义字符为 '%' 故对 '%' 也需要做转义,scala 示例代码如下:
private val forbiddenParquetColumNameChars = Set(' ', ',', ';', '{', '}', '(', ')', '\n', '\t', '=', '.')
def encodeParquetColumnName(name: String) = name.map { x => {
if (forbiddenParquetColumNameChars.contains(x) || x == '%') {
f"%%${x.toInt}%02x"
} else x.toString
}
}.mkString
3. 数据更新接口
将数据文件拷贝到指定路径下后,调用以下接口通知 BI 服务进行数据集更新。
URL
$home_url/public-api/data-source/{dsId}/refresh-with-file
METHOD
GET
Header
添加x-auth-token 该Token为用户登录系统后的Token,登录接口可参考以下文档1.1章节:使用API获取登录Token。
PARAMETERS
Name | Location | 类型 | 含义 | 是否必填 | 备注 |
dsId | Path | String | 数据集 id | 是 | |
overwrite | Query | Boolean | 是否全量更新 | 是 | true:全量,false:增量 |
fileType | Query | String | 文件类型 | 否 | 目前只支持 PARQUET |
Response
{
"result":"ok", // "ok":接口调用成功(不代表数据集更新成功),"fail":失败
"response": // 成功时返回生成的数据集更新任务相关信息,失败时为 null
{
"taskId":"9ed75970-4439-11eb-a411-93e5c8edcd0e", // 生成的数据集更新任务 id
"status":"已提交",
"result":"处理中"
},
"error": // 失败时返回
{
"status": 500, // 错误码
"message": "提交失败", // 错误信息
"detail": {} // 错误的详细信息
}
}