如何向sym与.d分目录存储的splayed table追加数据?
针对分区Splayed表的Upsert解决方案
你的结构属于按日期分区的splayed表,全局sym字典位于根目录myroot下,每个日期文件夹内是独立的splayed子表。默认upsert针对单splayed表,适配这种结构需要按以下步骤操作:
1. 挂载根目录
先获取根目录的句柄,方便后续操作:
root:`:myroot/
2. 同步全局sym字典
所有分区共享根目录的sym映射,所以需要先处理新数据中的sym值:
- 找出新数据中未在全局sym里的新符号:
newSyms:distinct newData[`sym] where not newData[`sym] in key root`sym - 若存在新符号,更新根目录的sym字典:
if[not null newSyms; root`sym,:newSyms] - 将新数据的sym列转换为对应的索引值:
newData[`sym]:root`sym[newData[`sym]]
3. 追加到已有分区
假设要把数据追加到2023.01.01的子表:
- 获取目标子表的目录句柄:
targetTbl:`:myroot/2023.01.01/mytable/ - 执行upsert:
targetTbl upsert newData
4. 创建新分区并追加
如果目标日期是新分区(比如2023.01.03),先创建目录结构再操作:
// 创建新分区的目录层级 mkdir`:myroot/2023.01.03/mytable/ // 从已有分区复制元数据文件.d(保证子表结构一致) cp`:myroot/2023.01.01/mytable/.d`:myroot/2023.01.03/mytable/.d // 获取新分区子表句柄并执行upsert newTargetTbl:`:myroot/2023.01.03/mytable/ newTargetTbl upsert newData
内容的提问来源于stack exchange,提问作者chrise
相关产品推荐
相关产品推荐

