
# 构建字典与表格进行数据富化
字典和表格是对数据进行富化时主要使用的两种数据结构，本文档主要介绍这两种数据结构的常见构建方式，并对比不同构建方式的优缺点。
#### 字典构建
不同字典构建方式对比参考如下：
表1不同字典构建方式对比 
| **构建方式**  | **优点**                     | **缺点**                 |
|:---|:---|:---|
| 直接构建      | 直观、简单、方便。                  | 如果内容较多，规则会相对冗长。且静态不灵活。 |
| 从任务配置资源构建 | 内容较多且经常修改时推荐使用，易于维护。       | 不易于扩展和跨任务复用，不支持自动刷新。   |
| 从表格构建     | 高级场景下使用，维护机制更灵活。           | 需要构建和维护对应的表格，过程相对繁琐。   |
| 从字典函数构建   | 基于逻辑动态构建字典，特定场景下适用。        | 较为高级，不易于维护。            |
| 从其他表达式构建  | 从日志事件的字段中动态提取映射关系，特定场景下适用。 | 较为高级，不易于维护。            |
   
- 直接构建
  ```
  e_dict_map({"400": "error", "200": "ok", "*": "other"}, "status", "message")
  ```
  
- 从任务配置资源构建
  ```
  e_dict_map(res_local("http_code_map"), "status", "message")
  ```
  其中http_code_map是任务高级配置项，值为：{"400": "error", "200": "ok", "\*": "other"}
  
- 从表格构建 使用tab_to_dict从表格构建。而表格的构建参见本文后面的表格构建。
  ```
  e_dict_map(tab_to_dict(tab_parse_csv("status_code,status_info\n400,error\n200,ok\n*,other"), "status_code", "status_info"), "status", "message")
  ```
  
- 从字典函数构建
  ```
  e_dict_map(dct_make("400", "error", "200",  "ok", "*",  "other"), "status", "message")
  ```
  
- 从其他表达式构建
  ```
  e_dict_map(json_parse(v("http_code_map")), "status", "message")
  ```
  此处从源日志的http_code_map字段中获取映射关系。
  
 
#### 表格构建
不同表格构建方式对比参考如下：
表2不同表格构建方式对比 
| **构建方式** | **优点**               | **缺点**                      |
|:---|:---|:---|
| 从文本构建    | 直观、简单、方便。            | 如果内容较多，规则会相对冗长。不易于维护、扩展和复用。 |
| 从OBS资源构建 | 内容较多且不常修改时推荐使用，易于维护。 | 编写相对复杂。                     |
   
- 从文本构建
  ```
  e_table_map(tab_parse_csv("city,name,age\nshanghai,baixiao,10\ncity:nanjing,Maki,18"), "name",["city", "age"])
  ```
  
- 从OBS资源构建
  ```
  e_search_table_map(tab_parse_csv(res_obs_file("https://obs.xxx.myhuaweicloud.com","dsl-test-xx","data.csv")), "name",["city", "age"])
  ```
  其中data.csv是obs中的文件，值为：
  ```
  e_search_table_map(tab_parse_csv(res_obs_file("https://obs.xxx.myhuaweicloud.com","dsl-test-xx","data.csv")), "name",["city", "age"])
  ```
  
 
