
# 数据脱敏函数
数据脱敏函数提供一系列不同脱敏形式的函数接口，可以覆盖常见的脱敏场景。通常结合数据脱敏语法，与脱敏列绑定使用，不推荐直接作用在查询语句上。
#### mask_none(column_name)
描述：不作任何脱敏处理，仅内部测试用。
返回值类型：与入参column_name数据类型相同
#### mask_full(column_name)
描述：全脱敏成固定值。脱敏列的数据类型不同，脱敏的固定值不同。
返回值类型：与入参column_name数据类型相同。
#### mask_partial(column_name, mask_digital, mask_from\[, mask_to\])
描述：针对数值类型数据，将第mask_from到mask_to位的数字部分脱敏成mask_digital对应的数字。其中，参数mask_to允许缺省，缺省时即脱敏到数据结束位置。参数mask_digital只能取\[0,9\]区间内的数字。
返回值类型：与入参column_name数据类型相同。
#### mask_partial(column_name \[, input_format, output_format\], mask_char, mask_from\[, mask_to\])
描述：针对字符类型数据，对照指定的输入输出格式，将第mask_from到mask_to位的数字部分脱敏成mask_char指定的字符。
参数说明：
- input_format 输入格式是由V和F组成的字符序列，与脱敏列数据长度相同。V对应位置的字符可能会被脱敏，F对象位置的字符会被忽略跳过，V字符序列标识脱敏范围。输入输出格式参数适用于定长数据，比如，银行卡号、身份证号、手机号等。
  
- output_format 输出格式是由V和其他任意字符组成的字符序列，与脱敏列数据长度相同。V字符位置与input_format的V位置对应，其他字符位置与input_format的F位置对应，且不会脱敏，通常为数据分隔符。
  input_format和output_format可以缺省或指定为空串""，此时，无输入输出格式要求，原始字符序列范围即为脱敏范围。
  
- mask_char 脱敏字符，仅允许长度为1的任意字符。场景的脱敏字符包括"\*"，"#"等。
  
- mask_from 脱敏范围的起始位置，要求大于0。
  
- mask_to 脱敏范围的结束位置，允许缺省。缺省时，即脱敏到原始数据结束位置。
  
返回值类型：与入参column_name数据类型相同。
#### mask_partial(column_name, mask_field1, mask_value1, mask_field2, mask_value2, mask_field3, mask_value3)
描述：按指定三个时间域做部分脱敏，仅适用于日期或时间类型数据。若mask_value取-1，即此mask_field不脱敏。其中，mask_field可以取"month"、"day"、"year"、"hour"、"minute"、"second"六个时间域之一。各域的取值范围需满足实际时间单位的取值范围。
返回值类型：与入参column_name数据类型相同。
![](https://support.huaweicloud.com/sqlreference-dws/public_sys-resources/note_3.0-zh-cn.png)
脱敏函数可以覆盖常见敏感信息的脱敏场景，推荐用户优先使用脱敏函数创建脱敏策略。
数据脱敏函数的使用方法，请参考[数据脱敏](https://support.huaweicloud.com/devg-dws/dws_04_0062.html)。
#### 自定义脱敏函数
支持用户使用PL/pgSQL语言自定义脱敏函数。
自定义脱敏函数需要严格遵循如下要求：
- 返回值与脱敏列类型一致。
- 函数必须可下推。
- 参数列表除脱敏格式外，只能包含一个脱敏列。
- 函数仅实现针对特定数据类型的格式化改写功能，不能涉及与其他表对象的复杂关联操作。
 
不满足前两项中任一项时，创建脱敏策略会报错。不满足后两项中任一项时，可成功创建脱敏策略，但查询执行结果可能会出现不可预知的问题。
如果绑定的自定义脱敏函数被删除，查询会因为脱敏策略失效而执行报错。
