# Renameフィルター関数

Treasure DataのData Connector用renameフィルタープラグインは、カラム名を変更します。このプラグインは以下の2つのオプションを取ります。columnsはサポートされていますが、新規使用には推奨されなくなりました。

| **オプション** | **説明** |
|  --- | --- |
| rules | ルールベースの名前変更操作の配列。（ルールについては以下を参照。） |
| columns | キーが既存のカラム名であるマップ。値は新しい名前。 |


* [設定](#configuration)
* [名前変更ルール](#renaming-rules)
* [名前変更ルール：character_types](#renaming-rule-character_types)
* [例：character_types](#example-character_types)
* [名前変更ルール：first_character_types](#renaming-rule-first_character_types)
* [例：first_character_types](#example-first_character_types)
* [名前変更ルール：lower_to_upper](#renaming-rule-lower_to_upper)
* [例：lower_to_upper](#example-lower_to_upper)
* [名前変更ルール：regex_replace](#renaming-rule-regex_replace)
* [例：regex_replace](#example-regex_replace)
* [名前変更ルール：truncate](#renaming-rule-truncate)
* [例：truncate](#example-truncate)
* [名前変更ルール：upper_to_lower](#renaming-rule-upper_to_lower)
* [例：upper_to_lower](#example-upper_to_lower)
* [名前変更ルール：unique_number_suffix](#renaming-rule-unique_number_suffix)
* [ヒント：unique_number_suffix](#hint-unique_number_suffix)
* [例：unique_number_suffix](#example-unique_number_suffix)
* [ユースケース例](#use-case-example)
* [Columns：非推奨](#columns-not-recommended)


# 設定

load.ymlのfiltersセクションに、この例のようにtype: renameフィルターを追加します：

```yaml
    in:
    ...
    filters:
    - type: rename
      rules:
      - rule: upper_to_lower
      - rule: character_types
        pass_types: [ "a-z", "0-9" ]
        pass_characters: "_"
        replace: "_"
    out:
    ...
```

# 名前変更ルール

rulesは以下に示すルールの配列で、すべてのカラムに対して上から順に適用されます。

| **rule** | **説明** |
|  --- | --- |
| character_types | 文字を種類で制限します。制限された文字を置換します。 |
| first_character_types | 最初の文字を種類で制限します。制限された最初の文字にプレフィックスを付けるか置換します。 |
| lower_to_upper | 小文字のアルファベットを大文字に変換します。 |
| regex_replace | 正規表現で置換します。 |
| truncate | 切り詰めます。 |
| upper_to_lower | 大文字のアルファベットを小文字に変換します。 |
| unique_number_suffix | スキーマ内でカラム名を一意にします。 |


## 名前変更ルール：character_types

character_typesルールは制限された文字を置換します。

| **オプション** | **説明** | **必須？** |
|  --- | --- | --- |
| pass_characteres | 許可する文字。 | デフォルトは`""` |
| pass_types | 許可する文字のセット。配列は「a-z」（小文字のアルファベット）、「A-Z」（大文字のアルファベット）、または「0-9」（数字）で構成する必要があります。 | デフォルトは`[]` |
| replace | 許可されない文字を置換する文字。1文字のみで構成する必要があります。 | デフォルトは`"_"` |


### 例：character_types

```yaml
    # この設定は、「_」、小文字のアルファベット、数字以外の文字を「_」に置換します。
    filters:
      ...
      - type: rename
        rules:
        - rule: character_types
          pass_characters: "_"
          pass_types: [ "a-z", "0-9" ]
```

## 名前変更ルール：first_character_types

first_character_typesルールは、先頭の制限された文字にプレフィックスを付けるか置換します。

| **オプション** | **説明** | **必須？** |
|  --- | --- | --- |
| pass_characters | 許可する文字。 | デフォルトは"" |
| pass_types | 許可する文字のセット。配列は「a-z」（小文字のアルファベット）、「A-Z」（大文字のアルファベット）、または「0-9」（数字）で構成する必要があります。 | デフォルトは[ ] |
| prefix | 許可されない最初の文字を置換する文字。 | prefixまたはreplaceのいずれかが必須 |
| replace | 許可されない最初の文字にプレフィックスとして付ける文字。 | prefixまたはreplaceのいずれかが必須 |


### 例：first_character_types

```yaml
    # この設定は、名前が「_」または小文字のアルファベットで始まらない限り、カラム名に「_」のプレフィックスを付けます。
    filters:
      ...
      - type: rename
        rules:
        - rule: first_character_types
          pass_characters: "_"
          pass_types: [ "a-z" ]
          prefix: "_"
```

## 名前変更ルール：lower_to_upper

lower_to_upperルールは小文字のアルファベットを大文字に変換します。

### 例：lower_to_upper

```yaml
    # この設定はすべての小文字のアルファベットを大文字に変換します。
    filters:
      ...
      - type: rename
        rules:
        - rule: lower_to_upper
```

## 名前変更ルール：regex_replace

regex_replaceルールは正規表現に基づいてカラム名を置換します。

| **オプション** | **説明** | **必須？** |
|  --- | --- | --- |
| match | この文字列をマッチさせる[Java形式の正規表現](https://docs.oracle.com/javase/tutorial/essential/regex/)。 | 必須 |
| replace | 各マッチに対してJava形式で置換する文字列。 | 必須 |


### 例：regex_replace

```yaml
    # この設定はすべてのパターンを置換します
    filters:
      ...
      - type: rename
        rules:
        - rule: regex_replace
          match: "([0-9]+)_dollars"
          replace: "USD$1"
```

## 名前変更ルール：truncate

truncateルールはカラム名を切り詰めます。

| **オプション** | **説明** | **必須？** |
|  --- | --- | --- |
| max_length | カラム名を切り詰める長さ。 | デフォルトは128 |


### 例：truncate

```yaml
    # この設定は20文字目以降のすべての文字を削除します。
    filters:
      ...
      - type: rename
        rules:
        - rule: truncate
          max_length: 20
```

## 名前変更ルール：upper_to_lower

upper_to_lowerルールは大文字のアルファベットを小文字に変換します。

### 例：upper_to_lower

```yaml
    # この設定はすべての大文字のアルファベットを小文字に変換します。
    filters:
      ...
      - type: rename
        rules:
        - rule: upper_to_lower
```

## 名前変更ルール：unique_number_suffix

unique_number_suffixルールは、番号をサフィックスとして付けることでスキーマ内のカラム名を一意にします。

| **オプション** | **説明** | **必須？** |
|  --- | --- | --- |
| delimiter | サフィックス番号の前に挿入される区切り文字。非数字の1文字のみである必要があります。 | デフォルトは`"_"` |
| digits | サフィックス番号のゼロ埋め桁数を指定する整数。サフィックス番号はこの桁数でゼロ埋めされます。 | オプション |
| max_length | カラム名を切り詰める長さ。カラム名はサフィックス番号の前に切り詰められます。 | オプション |
| offset | サフィックス番号の開始整数。最初の重複カラム名には（`offset` + 1）がサフィックスとして付きます。 | デフォルトは`1` |


### ヒント：unique_number_suffix

カラム名を一意にする手順は非常に単純ではありません。多くの実行可能な方法があります。この名前変更ルールは以下のように動作します：

基本方針：

* サフィックス番号は元のカラム名ごとにカウントされます。
* カラム名は最初のカラムから最後のカラムまで固定されます。


最初（左端）のカラムから最後（右端）のカラムまで適用される実際の手順：

1. 切り詰められた名前が左側のカラムと重複しない場合、カラム名をそのまま（切り詰めて）固定します。
2. それ以外の場合はカラム名にサフィックスを付けます。


a. 元のカラム名に対するサフィックス番号を（切り詰めて）追加しようとします。b. サフィックス付きの名前が左側のカラムや元のカラムと重複しない場合、それを固定します。c. それ以外の場合はサフィックス番号を増やして(a)を再試行します。

### 例：unique_number_suffix

```yaml
    # この設定は重複するカラム名に番号をサフィックスとして付けます。（例：["column", "column", "column"]は["column", "column_2", "column_3"]になります。）
    filters:
      ...
      - type: rename
        rules:
        - rule: unique_number_suffix
```

# ユースケース例

異なるカラム名でデータをインポートするには、.ymlにこのrenameフィルターを追加します。

ソースデータの例

```bash
$ td connector:preview load.yml
+---------+---------------+
|    0_ID | 1_Animal-Name |
+---------+---------------+
| 1       | "Lion"        |
| 2       | "Gorilla"     |
| 3       | "Zebra"       |
| 4       | "Giraffe"     |
| 6       | "Frog"        |
+---------+---------------+
```

以下のrenameフィルターを追加した場合：

```yaml
    in:
    ...
    filters:
    - type: rename
      rule:
      - rule: upper_to_lower
      - rule: character_types
        pass_types: ["a-z", "0-9"]
        pass_characters: "_"
        replace: "_"
      - rule: first_character_types
        pass_types: ["a-z"]
        pass_characters: "_"
        prefix: "_"
```

この場合、Data Connectorはカラム0_IDを_0_idに、1_Animal-Nameを_1_animal_nameに名前変更します。

```bash
$ td connector:preview load.yml
+---------+---------------+
|    0_id | 1_animal_name |
+---------+---------------+
| 1       | "Lion"        |
| 2       | "Gorilla"     |
| 3       | "Zebra"       |
| 4       | "Giraffe"     |
| 6       | "Frog"        |
+---------+---------------+
```

# Columns：非推奨

columnsは指定されたマップに従って各カラム名を変更します。columnsは新規使用には推奨されなくなりました。代わりにrulesを使用してください。

```yaml
    filters:
      ...
      - type: rename
        columns:
          my_existing_column1: new_column1
          my_existing_column2: new_column2
```

columnsとrulesが一緒に指定された場合、columnsはrulesの前に適用されます。（一緒に指定することは推奨されません。）