APPLY_ONE_HOT_ENCODER
用户定义的转换函数 (UDTF),用于加载独热编码器模型并写出包含编码列的表。
语法
APPLY_ONE_HOT_ENCODER( input‑columns
USING PARAMETERS model_name = 'model‑name'
[, drop_first = 'is‑first']
[, ignore_null = 'ignore']
[, separator = 'separator‑character']
[, column_naming = 'name‑output']
[, null_column_name = 'null‑column‑name'] )
参数
- input‑columns
- 输入关系中要使用的列的逗号分隔列表,或者使用星号 (*) 选择所有列。
参数
model_name
模型的名称(不区分大小写)。
存储类别及其对应的级别。drop_first
- 布尔值,可以是以下值之一:
-
true
(默认值):将分类变量的第一个级别视为引用级别。 -
false
:分类变量的每个级别都在输出视图中具有对应的列
-
ignore_null
- 布尔值,可以是以下值之一:
-
true
(默认值):Null 值将所有对应的 one-hot 二进制列设置为 null。 -
false
:将 input-columns 中的 Null 值视为分类级别
-
separator
- 在输出表中用于分隔输入变量名称和指示变量级别的字符。要避免使用任何分隔符,可将此参数设置为 null 值。
默认值: 下划线 (
_
) column_naming
- 根据指定的方法将分类级别附加到列名:
-
indices
(默认值):使用整数索引来表示分类级别。 -
values
/values_relaxed
:两种方法都使用分类级别名称。如果出现重复的列名称,该函数会尝试通过附加_n
来消除其歧义,其中 n 是从零开始的整数索引(_0
、_1
、...)。如果该函数无法生成唯一的列名称,它将根据所选的方法来处理:
-
values
返回错误。 -
values_relaxed
恢复使用索引。
-
重要
如果
column_naming
设置为values
或values_relaxed
,则以下列命名规则适用:-
超过 128 个字符的输入列名称会被截断。
-
列名可以包含特殊字符。
-
如果参数
ignore_null
设置为 true,则APPLY_ONE_HOT_ENCODER
根据参数null_column_name
中设置的值构造列名。如果省略此参数,则使用字符串null
。
-
null_column_name
- 用于命名 null 值指示列的字符串,仅在
ignore_null
设置为false
且column_naming
设置为values
或values_relaxed
时使用。默认值:
null
注意
注意: 如果输入行包含模型中未存储的级别,则与该分类级别对应的输出行列将作为 null 值返回。示例
=> SELECT APPLY_ONE_HOT_ENCODER(cyl USING PARAMETERS model_name='one_hot_encoder_model',
drop_first='true', ignore_null='false') FROM mtcars;
cyl | cyl_1 | cyl_2
----+-------+-------
8 | 0 | 1
4 | 0 | 0
4 | 0 | 0
8 | 0 | 1
8 | 0 | 1
8 | 0 | 1
4 | 0 | 0
8 | 0 | 1
8 | 0 | 1
4 | 0 | 0
8 | 0 | 1
6 | 1 | 0
4 | 0 | 0
4 | 0 | 0
6 | 1 | 0
6 | 1 | 0
8 | 0 | 1
8 | 0 | 1
4 | 0 | 0
4 | 0 | 0
6 | 1 | 0
8 | 0 | 1
8 | 0 | 1
6 | 1 | 0
4 | 0 | 0
8 | 0 | 1
8 | 0 | 1
8 | 0 | 1
6 | 1 | 0
6 | 1 | 0
4 | 0 | 0
4 | 0 | 0
(32 rows)