-
Notifications
You must be signed in to change notification settings - Fork 14
Description
背景:
目前 Excel 数据源插件在 load 和 save 都有不少问题,需要做一次更新
关于 Excel 处理理解的原则
我们可以对单一的 excel 认知为 db , 每一个 sheet 是 该 db 下的 table, csv 可以等同于单一sheet 的 excel 文件。
在加载时,我们应该将 sheet 映射成表, load 和 save 都是以 sheet 为单位来进行操作。
Load CSV:
需要支持的特性:
-
指定 sheetname 进行 load 为表,在加载时可以根据参数
sheetName参数来进行加载制定的sheet,如未显式指定,则默认加载第一个sheet -
支持 skip first n lines 功能, 需要在 load 是在 where 语句中新增
skipFirstNLines参数,值接受正整数 int 类型。比如整个 sheet 有 100 行, 当 skip 5 行,且header=false时,这里预期应该是返回第 6 - 100 行(共95行),如果skip 5 行且 header = true 时,预期是返回第 7 - 100 行,共 94 行 正确预期行为
Save Excel
Append Save
现有的行为,当 save append 时将表作为一张新的 sheet 进行 append 写入,考虑以下的代码
SET rawData='''
{"jack":1,"jack2":2}
{"jack":2,"jack2":3}
''';
SET savePath="/tmp/test_excel.xlsx";
LOAD jsonStr.`rawData` AS table1;
SAVE append table1 AS excel.`${savePath}`
where header = "true";再次执行一次, 会将表以 sheet2 的方式增加到 excel 中,如下

这里的行为不满足 append 的定义,或者说这里要表达的语义是 SaveAsNewSheet 这么一个语义。
期望的一个 append 的 save 行为:
-
默认不指定sheet 的时候,append 应该是以追加的方式,写入默认的第一个sheet 中,需要保持 schema 对齐,否则失败
-
指定已存在的 sheet 中,append 以追加的方式到该 sheet (行为和上一条其实是一致的)
-
指定未存在的 sheet 中,append 以追加写的方式写入新的指定的 sheet name 中(理解为新加sheet,写表进去)
行为兼容性变更:append sheet 的方式由原先默认新增 sheet, 变成指定新的 sheet name 来进行 sheet append,能力上可以保持一致
Overwrite Save
save overwrite 会涉及 excel 文件的覆写还是sheet 的覆写,这里关键的问题,是默认不指定任何 sheet 的情况下,是覆写第一个sheet,还是将整个文件删除进行覆写。
期望的一个 overwrite 的save行为:
- 默认不指定 sheet 的时候,覆写应该是全文件覆写(从用户的心智来看,不指定任何sheet 就有两种情况,一种我只有一个sheet,另一个是我全部的sheet都不想要了)
- 指定 sheet 的时候,覆写单一sheet
这样 save overwrite 的行为在理解上和 save append 是保持一致的, 且与 csv 数据源保持一致
