本文为您介绍如何使用Table2KV转化普通表为KV(Key:Value)格式的表。
使用限制
转换后的结果表不会显示原表中的空值。您可以在结果表中指定需要保留的列,并且输出的列与原表的列一致。
如果存在输入Key_map表,则转化的列为Key_map表与KV表中Key的交集。
如果存在的输入Key_map表与输入表类型冲突,则输出的Key_map表使用您指定的类型。
输入表中需要转换为KV的列只能为BIGINT或DOUBLE类型。
组件配置
您可以使用以下任意一种方式,配置Table2KV组件参数。
方式一:可视化方式
在Designer工作流页面配置组件参数。
页签 | 参数 | 描述 |
字段设置 | 转换列 | 需要转换的列名称。 |
保持原样列 | 不需要转换的列名称。 | |
key和value的分割符 | Key和Value之间的分割符。默认为半角冒号(:)。 | |
kv间的分割符 | KV对之间的分割符。默认为半角逗号(,)。 | |
参数设置 | 指定是否将列转换为编号 | 指定是否将列转换为编号,取值如下:
|
执行调优 | 核心数 | 系统根据输入数据量,自动分配训练的实例数量。 |
内存数 | 系统根据输入数据量,自动分配内存。单位为MB。 |
方式二:PAI命令方式
使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本。
PAI -name TableToKV
-project algo_public
-DinputTableName=maple_tabletokv_basic_input
-DoutputTableName=maple_tabletokv_basic_output
-DselectedColNames=col0,col1,col2
-DappendColNames=rowid;
参数名称 | 是否必选 | 参数描述 | 默认值 |
inputTableName | 是 | 输入表的表名称。 | 无 |
inputTablePartitions | 否 | 输入表中指定参与训练的分区,格式为 如果是多级分区,格式为 如果指定多个分区,则需要使用半角逗号(,)分隔。 | 默认选择所有分区。 |
selectedColNames | 否 | 选择的列名称,只能为BIGINT或DOUBLE类型。 | 默认选择整张表。 |
appendColNames | 否 | 需要保留的列名称,该列会被原样写入至输出表中。 | 无 |
outputTableName | 是 | 输出的KV表名称。 | 无 |
kvDelimiter | 否 | Key和Value的分割符。 | 半角冒号(:) |
itemDelimiter | 否 | KV间的分割符。默认为半角逗号(,)。 | 半角逗号(,) |
convertColToIndexId | 否 | 指定是否将列转换为编号。取值如下:
| 0 |
inputKeyMapTableName | 否 | 输入的索引表名称。 该参数仅当 | 半角引号(“”) |
outputKeyMapTableName | 由convertColToIndexId决定。 | 输出的索引表名称。当且仅当convertColToIndexId=1时该参数必选。 | 无 |
lifecycle | 否 | 输出表的生命周期。取值为正整数。 | 无 |
coreNum | 否 | 节点个数。取值范围为[1, 9999]的正整数。与memSizePerCore参数配对使用。 | 系统自动分配。 |
memSizePerCore | 否 | 单个节点的内存大小,单位为兆。取值范围为[1024, 64*1024]的正整数。 | 系统自动分配。 |
示例
数据生成
drop table if exists test; create table test as select * from ( select 0 as rowid, 1 as col0, 1.1 as col1, 2 as col2 union all select 1 as rowid, 0 as col0, 1.2 as col1, 3 as col2 union all select 2 as rowid, 1 as col0, 2.3 as col1, 4 as col2 union all select 3 as rowid, 1 as col0, 0.0 as col1, 5 as col2 ) tmp;
PAI命令行
PAI -name TableToKV -project algo_public -DinputTableName=test -DoutputTableName=test_output -DselectedColNames=col0,col1,col2 -DconvertColToIndexId=1 -DoutputKeyMapTableName=test_key_map -DappendColNames=rowid;
输出说明
输出表test_output
rowid
kv
0
0:1,1:1.1,2:2
1
0:0,1:1.2,2:3
2
0:1,1:2.3,2:4
3
0:1,1:0,2:5
输出表test_key_map
col_name
col_index
col_datatype
col0
0
bigint
col1
1
double
col2
2
bigint