KV からテーブルへコンポーネントは、スパースなキーと値 (KV) 形式のデータを通常の表形式の列に変換します。各キーを列名として、各値を対応するセルの値として使用します。これにより、KV 形式でエンコードされた特徴データを、下流モデルのトレーニングや分析にすぐに使用できるようになります。
仕組み
各行にカンマ区切りの key:value ペアを含む KV 列があるとします。
入力 — サンプルごとに行が 1 つ、KV 列が 1 つ:
| kv |
|---|
1:1,2:2,3:-3.3 |
1:10,2:20,3:-33.3 |
出力 — キーごとに数値列が 1 つ:
| kv_1 | kv_2 | kv_3 |
|---|---|---|
| 1.0 | 2.0 | -3.3 |
| 10.0 | 20.0 | -33.3 |
このコンポーネントは、列名とキーインデックス間のマッピングを記録する `key_map` テーブルも書き込みます。
| col_name | col_index | col_type |
|---|---|---|
| kv_1 | 1 | double |
| kv_2 | 2 | double |
| kv_3 | 3 | double |
変換された列は、出力では追加列の前に表示されます。
基本概念
KV フォーマット
KV 列の各値は、key:value,key:value,... というフォーマットに従う必要があります。ここで、
-
キーは列名のインデックス (整数) です。
-
値は BIGINT 型または DOUBLE 型である必要があります。数値データ型の列のみ変換できます。
-
行に重複キーが含まれている場合、コンポーネントはそれらの値を合計します。
key_map テーブル
`key_map` テーブルは、列名とキーインデックスのマッピングおよびデータ型情報を記録します。そのスキーマは、3 つの STRING 列を使用します。
| 列 | 説明 |
|---|---|
col_name |
出力列名 |
col_index |
キーインデックス |
col_datatype |
データの型。指定しない場合、デフォルトは DOUBLE です |
カスタムの `key_map` テーブルをインポートして、変換するキーや出力列が使用するデータの型をコントロールできます。`key_map` テーブルがインポートされると、`key_map` テーブルと入力 KV 列の両方に存在するキーのみが変換され、出力列のデータの型は `key_map` テーブルと一致します。
コンポーネントは、`key_map` テーブルがインポートされたかどうかに関係なく、常に `key_map` テーブルをエクスポートします。
出力列の命名
出力列名は {kv_column_name}_{key} というパターンに従います。たとえば、kv という名前の KV 列とキー 1 は kv_1 を生成します。
列名では、次の文字はサポートされていません: %&()*+-./;<>=?
128 文字を超える名前は 128 文字に切り捨てられます。
追加列名が変換された列名と一致する場合、コンポーネントはエラーをレポートします。
制限事項
-
最大出力列数: 1,200。
top1200がtrueに設定されている場合、出力がこの制限を超えると、コンポーネントは最初の 1,200 列のみをエクスポートします。falseに設定されている場合、コンポーネントは代わりにエラーをレポートします。 -
最大入力行数: 100,000,000
コンポーネントの設定
方法 1: Machine Learning Designer
Machine Learning Designer のパイプラインキャンバスで KV からテーブルへコンポーネントを設定します。
| タブ | パラメーター | 説明 |
|---|---|---|
| フィールド設定 | KV 列 | キーと値のペア形式のデータを含む列の名前 |
| 追加列 | 変更せずにパススルーする列の名前 | |
| KV 区切り文字 | キーと値の間の区切り文字。デフォルト: : |
|
| KV ペア区切り文字 | キーと値のペアの間の区切り文字。デフォルト: , |
|
| パラメーター設定 | 最初の 1,200 列を予約 | 有効にすると、出力が制限を超えた場合に最初の 1,200 列のみをエクスポートします。無効にすると、コンポーネントは代わりにエラーをレポートします |
| チューニング | コンピューティングコア | コア数。入力データ量に基づいて自動的に割り当てられます |
| コアあたりのメモリサイズ | コアあたりのメモリ (MB) 。入力データ量に基づいて自動的に割り当てられます |
方法 2: PAI コマンド
PAI コマンドを使用して、SQL スクリプトコンポーネントからコンポーネントを実行します。詳細については、「SQL スクリプト」をご参照ください。
PAI -name KVToTable
-project algo_public
-DinputTableName=test
-DoutputTableName=test_out
-DoutputKeyMapTableName=test_keymap_out
-DkvColName=kv;
| パラメーター | 必須 | デフォルト値 | 説明 |
|---|---|---|---|
inputTableName |
はい | — | 入力テーブルの名前 |
kvColName |
はい | — | KV 列の名前 |
outputTableName |
はい | — | 出力テーブルの名前 |
outputKeyMapTableName |
はい | — | 出力 `key_map` テーブルの名前 |
inputKeyMapTableName |
いいえ | — | キーと列のマッピングをコントロールするための入力 `key_map` テーブルの名前 |
appendColName |
いいえ | — | 変更せずにパススルーする列の名前 |
inputTablePartitions |
いいえ | すべてのパーティション | 入力テーブルから読み取るパーティション。フォーマット: Partition_name=value。複数レベルのパーティションの場合: name1=value1/name2=value2。複数のパーティションはカンマで区切ります |
kvDelimiter |
いいえ | : |
キーと値の間の区切り文字 |
itemDelimiter |
いいえ | , |
キーと値のペアの間の区切り文字 |
top1200 |
いいえ | true |
出力が制限を超えた場合に最初の 1,200 列のみをエクスポートするかどうか。代わりにエラーをレポートするには false に設定します |
lifecycle |
いいえ | — | 出力テーブルのライフサイクル |
coreNum |
いいえ | システムが決定 | コア数。正の整数である必要があります |
memSizePerCore |
いいえ | システムが決定 | コアあたりのメモリ (MB) 。有効値の範囲: (100, 65536) |
例
-
入力テーブルを作成します。
DROP TABLE IF EXISTS test; CREATE TABLE test AS SELECT * FROM ( SELECT '1:1,2:2,3:-3.3' AS kv UNION ALL SELECT '1:10,2:20,3:-33.3' AS kv ) tmp; -
KV からテーブルへコンポーネントを実行します。
PAI -name KVToTable -project algo_public -DinputTableName=test -DoutputTableName=test_out -DoutputKeyMapTableName=test_keymap_out -DkvColName=kv; -
出力テーブル (
test_out) を確認します。kv_1 kv_2 kv_3 1.0 2.0 -3.3 10.0 20.0 -33.3 -
`key_map` テーブル (
test_keymap_out) を確認します。col_name col_index col_type kv_1 1 double kv_2 2 double kv_3 3 double
よくある質問
`key_map` テーブルを提供した場合、どの列が変換されますか?
`key_map` テーブルと入力 KV 列の両方にキーが表示される列のみが変換されます。
`key_map` テーブルを提供した場合、出力列はどのデータの型を使用しますか?
出力列は、`key_map` テーブルの col_datatype 列で指定されたデータの型を使用します。col_datatype が指定されていない場合、出力はデフォルトで DOUBLE になります。
列名の競合が発生するのはなぜですか?
追加列が変換されたキー列と名前を共有している場合、コンポーネントはエラーをレポートします。コンポーネントを実行する前に、競合する列のいずれかの名前を変更してください。
どの列タイプが変換できますか?
数値データ型の列のみ変換できます。
列名が 128 文字を超えるとどうなりますか?
最初の 128 文字のみが保持されます。
行に重複キーが含まれている場合はどうなりますか?
コンポーネントは重複キーの値を合計します。