文件方式更新数据集方案说明
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": {}                                      // 错误的详细信息
  }
}