Source: https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/preprocess/ Documentation version: v5.3.2 # 预处理配置 本文介绍将数据导入悦数图数据库开发版时可选的数据预处理配置。 ## 配置示例 ```` sources: [ { // type:"hdfs" // format:"csv" // header:false // separator:"," // path: "hdfs://127.0.0.1:9000/import_movie/sub_movie.csv" pre_processes: { concat: [ { oldFields: [a, b] newField: "ab" splicer: "_" } ] separate: [ { oldField: "aaa" newFields: [a, b] sep: "&" } ] filter: ["age>=10 AND firstName=='Tom' OR lastName!='Li'", "aa>='ss'"] concatConstant: [ { field: "name" prefixValue: "test_" suffixValue: "_test" } ] newConstantColumn: [ { field: "newColumn" value: "AAA" } ] nonValue: "" udfSql: "select * from $exchange" } // nodetypes: [] // edgetypes: [] } ] ```` ## 配置项 | 选项 | 描述 | 类型 | 是否必选 | 默认值 | `pre_processes.concat` | 将多个字段连接为一个新字段。 | List | 否 | 无 | `pre_processes.concat.oldFields` | 要连接的旧字段列表。 | List | 否 | 无 | `pre_processes.concat.newField` | 连接后创建的新字段的名称。 | String | 否 | 无 | `pre_processes.concat.splicer` | 用于连接旧字段的拼接符。 | String | 否 | 无 | `pre_processes.separate` | 将一个字段分割为多个字段。 | List | 否 | 无 | `pre_processes.separate.oldField` | 要分割的旧字段的名称。 | String | 否 | 无 | `pre_processes.separate.newFields` | 分割后创建的新字段列表。 | List | 否 | 无 | `pre_processes.separate.sep` | 用于分割旧字段的分隔符。 | String | 否 | 无 | `pre_processes.filter` | 过滤数据的条件。过滤条件中的字符串值必须用英文单引号括起来。 | List | 否 | 无 | `pre_processes.concatConstant` | 将字段与常量连接。 | List | 否 | 无 | `pre_processes.concatConstant.field` | 要与常量连接的字段名称。 | String | 否 | 无 | `pre_processes.concatConstant.prefixValue` | 作为前缀的常量值。 | String | 否 | 无 | `pre_processes.concatConstant.suffixValue` | 作为后缀的常量值。 | String | 否 | 无 | `pre_processes.newConstantColumn` | 添加新的常量字段。 | List | 否 | 无 | `pre_processes.newConstantColumn.field` | 新字段的名称。 | String | 否 | 无 | `pre_processes.newConstantColumn.value` | 新字段的常量值。 | String | 否 | 无 | `pre_processes.nonValue` | 用于替换 NULL 值的值。 | String | 否 | 无 | `pre_processes.udfSql` | 用于数据预处理的 Spark SQL 语句。此语句必须遵循格式`select from $exchange `,其中``是自定义的 SQL 语句。例如,`select LENGTH(ab) as ab, REVERSE(newColumn) as newColumn from $exchange`。 若要查看常用的 SQL 操作,请参见 [SQL 参考](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/preprocess/#sql)。 | String | No | N/A ## 预处理顺序 若设置了所有配置项,则按照以下顺序执行:`concat`->`separate`->`filter`->`concatConstant`->`newConstantColumn`->`nonValue`->`udfSql`。 ## SQL 参考 悦数数据迁移支持使用 [Spark SQL](https://spark.apache.org/docs/latest/sql-programming-guide.html) 在数据导入时进行数据处理。本章节列举了常用的 SQL 操作供您参考。 Note 所有 SQL 语句必须遵循格式`select from $exchange `,其中``是自定义的 SQL 语句。 | 运算符/函数 | 示例 | 描述 | `current_timestamp` | `select *, current_timestamp as current_time from $exchange` | 添加一个名为`current_time`的新字段,并将其值设置为当前时间戳。 | `current_date` | `select *, current_date as current_date from $exchange` | 添加一个名为`current_date`的新字段,并将其值设置为当前日期。 | `least`和`greatest` | `select *, least(col1,col2) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`和`col2`中较小的值。 | `=`、`!=`、`>`、`<`、`>=`、`<=`、`<>` | `select * from $exchange where col1='abc'` | 过滤出`col1`的值为`abc`的行。 | `IS NULL`、`IS NOT NULL` | `select * from $exchange where col1 IS NULL` | 过滤出`col1`的值为`NULL`的行。 | `LIKE`、`NOT LIKE` | `select * from $exchange where col1 LIKE '%abc%'` | 过滤出`col1`的值包含`abc`的行。 | `LIKE ALL`、`NOT LIKE ALL` | `select * from $exchange where col1 LIKE ALL('%abc%','%ABC%')` | 过滤出`col1`的值同时包含`abc`和`ABC`的行。 | `LIKE ANY`、`NOT LIKE ANY` | `select * from $exchange where col1 LIKE ANY('%abc%','ABC%')` | 过滤出`col1`的值包含`abc`或以`ABC`开头的行。 | `AND`、`OR` | `select * from $exchange where col1<10 AND col2>20` | 过滤出`col1`的值小于10且`col2`的值大于20的行。 | `NVL` | `select *, NVL(col1, 10) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并在`col1`的值不为`NULL`时将其值设置为`col1`的值;否则将其值设置为10。 | `COALESCE` | `select *, COALESCE(col1,col2) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并在`col1`的值不为`NULL`时将其值设置为`col1`的值;否则将其值设置为`col2`的值。 | `LENGTH` | `select *, LENGTH(col1) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`的值的长度。 | `CONCAT` | `select *, CONCAT(col1,'abc') as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`的值和`abc`的拼接。 | `REVERSE` | `select *, REVERSE(col1) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`的值的反转。 | `LEFT`、`RIGHT` | `select *, LEFT(col1,2) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`的值的前两个字符。 | `SUBSTR` | `select *, SUBSTR(col1,2,3) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`的值的子字符串。该字符串从第二个字符开始,长度为3。 | `UPPER`、`LOWER` | `select *, UPPER(col1) as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`的值的大写形式。 | `REGEXP_REPLACE` | `select *, REGEXP_REPLACE(col1,'a','b') as new_col from $exchange` | 添加一个名为`new_col`的新字段,并将其值设置为`col1`的值中所有`a`替换为`b`后的结果。 关于 Spark SQL 的更多信息,请参见 [Spark SQL 文档](https://spark.apache.org/docs/latest/sql-ref.html)。