

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan ekspresi aturan transformasi untuk menentukan isi kolom
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions"></a>

Untuk menentukan konten untuk kolom baru dan yang sudah ada, Anda dapat menggunakan ekspresi dalam aturan transformasi. Misalnya, menggunakan ekspresi Anda dapat menambahkan kolom atau mereplikasi header tabel sumber ke target. Anda juga dapat menggunakan ekspresi untuk menandai catatan pada tabel target sebagai dimasukkan, diperbarui, atau dihapus pada sumber. 

**Topics**
+ [Menambahkan kolom menggunakan ekspresi](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-adding)
+ [Menandai catatan target menggunakan ekspresi](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Flagging)
+ [Replikasi header tabel sumber menggunakan ekspresi](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Headers)
+ [Menggunakan SQLite fungsi untuk membangun ekspresi](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite)
+ [Menambahkan metadata ke tabel target menggunakan ekspresi](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Metadata)

## Menambahkan kolom menggunakan ekspresi
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-adding"></a>

Untuk menambahkan kolom ke tabel menggunakan ekspresi dalam aturan transformasi, gunakan`add-column`aturan tindakan dan`column`Target aturan.

Contoh berikut menambahkan kolom baru ke`ITEM`Tabel. Ini menetapkan nama kolom baru untuk`FULL_NAME`, dengan tipe data`string`, 50 karakter panjang. Ekspresi menggabungkan nilai-nilai dari dua kolom yang ada,`FIRST_NAME`dan`LAST_NAME`, untuk mengevaluasi`FULL_NAME`. Parameter`schema-name`,`table-name`, dan parameter ekspresi mengacu pada objek dalam tabel database sumber.`Value`dan`data-type`mengacu pada obyek dalam tabel basisdata target.

```
{
    "rules": [
        {
            "rule-type": "selection", 
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "add-column",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "ITEM"
            },
            "value": "FULL_NAME",
            "expression": "$FIRST_NAME||'_'||$LAST_NAME",
            "data-type": {
                 "type": "string",
                 "length": 50
            }
        }
    ]
}
```

## Menandai catatan target menggunakan ekspresi
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Flagging"></a>

Untuk menandai catatan dalam tabel target sebagai dimasukkan, diperbarui, atau dihapus dalam tabel sumber, menggunakan ekspresi dalam aturan transformasi. Ekspresi menggunakan`operation_indicator`fungsi untuk menandai catatan. Rekaman yang dihapus dari sumber tidak dihapus dari target. Sebaliknya, data target ditandai dengan nilai yang disediakan pengguna untuk menunjukkan bahwa itu telah dihapus dari sumber.

**catatan**  
`operation_indicator`Fungsi ini hanya berfungsi pada tabel yang memiliki kunci utama pada basis data sumber dan target. 

Sebagai contoh, aturan transformasi berikut pertama menambahkan baru`Operation`kolom ke tabel target. Kemudian update kolom dengan nilai`D`setiap kali catatan dihapus dari tabel sumber.

```
{
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "add-column",
      "value": "Operation",
      "expression": "operation_indicator('D', 'U', 'I')",
      "data-type": {
        "type": "string",
        "length": 50
      }
}
```

## Replikasi header tabel sumber menggunakan ekspresi
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Headers"></a>

Secara default, header untuk tabel sumber tidak direplikasi ke target. Untuk menunjukkan header untuk mereplikasi, menggunakan aturan transformasi dengan ekspresi yang mencakup header kolom tabel. 

Anda dapat menggunakan header kolom berikut dalam ekspresi. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions.html)

Contoh berikut menambahkan kolom baru ke target dengan menggunakan nilai posisi aliran dari sumber. Untuk SQL Server, nilai posisi aliran adalah LSN untuk titik akhir sumber. Untuk Oracle, nilai posisi aliran adalah SCN untuk titik akhir sumber.

```
{
      "rule-type": "transformation",
     "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "add-column",
      "value": "transact_id",
      "expression": "$AR_H_STREAM_POSITION",
      "data-type": {
        "type": "string",
        "length": 50
      }
    }
```

Contoh berikut menambahkan kolom baru ke target yang memiliki nomor incrementing unik dari sumber. Nilai ini mewakili 35 digit nomor unik di tingkat tugas. 16 digit pertama adalah bagian dari timestamp, dan 19 digit terakhir adalah jumlah record\$1id bertambah oleh DBMS.

```
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-target": "column",
"object-locator": {
"schema-name": "%",
"table-name": "%"
},
"rule-action": "add-column",
"value": "transact_id",
"expression": "$AR_H_CHANGE_SEQ",
"data-type": {
"type": "string",
"length": 50
}
}
```

## Menggunakan SQLite fungsi untuk membangun ekspresi
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite"></a>

Anda menggunakan pengaturan tabel untuk menentukan pengaturan yang ingin Anda terapkan ke tabel yang dipilih atau tampilan untuk operasi tertentu. Aturan pengaturan meja bersifat opsional. 

**catatan**  
Alih-alih konsep tabel dan pandangan, MongoDB dan database DocumentDB menyimpan catatan data sebagai dokumen yang berkumpul bersama-sama di*Koleksi*. Jadi kemudian, ketika bermigrasi dari MongoDB atau sumber DocumentDB, mempertimbangkan jenis rentang segmentasi pengaturan beban paralel untuk dipilih*Koleksi*bukan tabel dan pandangan.

**Topics**
+ [Menggunakan ekspresi CASE](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.CASE)
+ [Contoh](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.Ex)

Berikut ini, Anda dapat menemukan fungsi string yang dapat Anda gunakan untuk membangun ekspresi aturan transformasi.


| Fungsi string | Deskripsi | 
| --- | --- | 
|  `lower(x)`  |  `lower(x)`Fungsi mengembalikan salinan string *`x`* dengan semua karakter dikonversi ke huruf kecil. `lower`Fungsi bawaan bawaan hanya berfungsi untuk karakter ASCII.  | 
|  `upper(x)`  |  `upper(x)`Fungsi mengembalikan salinan string *`x`* dengan semua karakter dikonversi ke huruf besar. `upper`Fungsi bawaan bawaan hanya berfungsi untuk karakter ASCII.  | 
|  `ltrim(x,y)`  |  `ltrim(x,y)`Fungsi mengembalikan string yang dibentuk dengan menghapus semua karakter yang muncul di y dari sisi kiri x. Jika tidak ada nilai untuk y, `ltrim(x)` hapus spasi dari sisi kiri x.  | 
|  `replace(x,y,z)`  |  `replace(x,y,z)`Fungsi mengembalikan string dibentuk dengan mengganti string z untuk setiap kejadian string y dalam string x.  | 
| `rtrim(x,y)` |  `rtrim(x,y)`Fungsi mengembalikan string yang dibentuk dengan menghapus semua karakter yang muncul di y dari sisi kanan x. Jika tidak ada nilai untuk y, `rtrim(x)` hapus spasi dari sisi kanan x.  | 
| `substr(x,y,z)` |  `substr(x,y,z)`Fungsi mengembalikan substring dari string input `x` yang dimulai dengan karakter `y` th, dan yang merupakan *`z`* karakter panjang.  Jika *`z`* dihilangkan, `substr(x,y)` mengembalikan semua karakter melalui akhir string `x` dimulai dengan karakter `y` th. Karakter paling kiri `x` adalah nomor 1. Jika *`y`* negatif, karakter pertama substring ditemukan dengan menghitung dari kanan daripada kiri. Jika *`z`* negatif, maka `abs(z)` karakter yang mendahului karakter ke `y` - dikembalikan. Jika `x` adalah string, maka indeks karakter mengacu pada karakter UTF-8 yang sebenarnya. Jika `x` adalah BLOB, maka indeks mengacu pada byte.  | 
| trim(x,y) |  `trim(x,y)`Fungsi mengembalikan string dibentuk dengan menghapus semua karakter yang muncul di `y` dari kedua sisi`x`. Jika tidak ada nilai untuk`y`, `trim(x)` menghapus spasi dari kedua sisi`x`.  | 

Berikut ini, Anda dapat menemukan fungsi LOB yang dapat Anda gunakan untuk membangun ekspresi aturan transformasi.


| Fungsi LOB | Deskripsi | 
| --- | --- | 
|  `hex(x)`  |  `hex`Fungsi menerima BLOB sebagai argumen dan mengembalikan versi string heksadesimal huruf besar dari konten BLOB.  | 
|  `randomblob (N)`  |  `randomblob(N)`Fungsi mengembalikan BLOB `N` -byte yang berisi byte pseudorandom. Jika *N* kurang dari 1, BLOB acak 1-byte dikembalikan.   | 
|  `zeroblob(N)`  |  `zeroblob(N)`Fungsi mengembalikan BLOB yang terdiri dari `N` byte 0x00.  | 

Berikut ini, Anda dapat menemukan fungsi numerik yang dapat Anda gunakan untuk membangun ekspresi aturan transformasi.


| Fungsi numerik | Deskripsi | 
| --- | --- | 
|  `abs(x)`  |  `abs(x)`Fungsi mengembalikan nilai absolut dari argumen `x` numerik. `abs(x)`Fungsi mengembalikan NULL jika *x* NULL. `abs(x)`Fungsi mengembalikan 0.0 jika **x** adalah string atau BLOB yang tidak dapat dikonversi ke nilai numerik.  | 
|  `random()`  |  `random`Fungsi mengembalikan bilangan bulat pseudorandom antara -9,223,372,036,854,775.808 dan \$19,223,372,036,854.775,807.  | 
|  `round (x,y)`  |  `round (x,y)`Fungsi mengembalikan nilai floating-point *x* dibulatkan ke *y* digit di sebelah kanan titik desimal. Jika tidak ada nilai untuk*y*, itu diasumsikan 0.  | 
|  `max (x,y...)`  |  `max`Fungsi multiargument mengembalikan argumen dengan nilai maksimum, atau mengembalikan NULL jika argumen adalah NULL.  `max`Fungsi mencari argumennya dari kiri ke kanan untuk argumen yang mendefinisikan fungsi penyusunan. Jika ditemukan, ia menggunakan fungsi penyusunan itu untuk semua perbandingan string. Jika tidak ada argumen untuk `max` mendefinisikan fungsi penyusunan, fungsi `BINARY` penyusunan digunakan. `max`Fungsi adalah fungsi sederhana ketika memiliki dua atau lebih argumen, tetapi beroperasi sebagai fungsi agregat jika memiliki argumen tunggal.  | 
|  `min (x,y...)`  |  `min`Fungsi multiargument mengembalikan argumen dengan nilai minimum.  `min`Fungsi mencari argumennya dari kiri ke kanan untuk argumen yang mendefinisikan fungsi penyusunan. Jika ditemukan, ia menggunakan fungsi penyusunan itu untuk semua perbandingan string. Jika tidak ada argumen untuk `min` mendefinisikan fungsi penyusunan, fungsi `BINARY` penyusunan digunakan. `min`Fungsi adalah fungsi sederhana ketika memiliki dua atau lebih argumen, tetapi beroperasi sebagai fungsi agregat jika memiliki argumen tunggal.   | 

Berikut ini, Anda dapat menemukan fungsi pemeriksaan NULL yang dapat Anda gunakan untuk membangun ekspresi aturan transformasi.


| Fungsi pemeriksaan NULL | Deskripsi | 
| --- | --- | 
|  `coalesce (x,y...)`  |  `coalesce`Fungsi mengembalikan salinan argumen non-Null pertama, tetapi mengembalikan NULL jika semua argumen adalah NULL. Fungsi coalesce memiliki setidaknya dua argumen.  | 
|  `ifnull(x,y)`  |  `ifnull`Fungsi mengembalikan salinan argumen non-Null pertama, tetapi mengembalikan NULL jika kedua argumen adalah NULL. `ifnull`Fungsi ini memiliki tepat dua argumen. `ifnull`Fungsinya sama `coalesce` dengan dua argumen.  | 
|  `nullif(x,y)`  |  `nullif(x,y)`Fungsi mengembalikan salinan argumen pertama jika argumen yang berbeda, tetapi mengembalikan NULL jika argumen yang sama.  `nullif(x,y)`Fungsi mencari argumennya dari kiri ke kanan untuk argumen yang mendefinisikan fungsi penyusunan. Jika ditemukan, ia menggunakan fungsi penyusunan itu untuk semua perbandingan string. Jika tidak ada argumen untuk nullif mendefinisikan fungsi penyusunan, maka fungsi penyusunan digunakan. `BINARY`  | 

Berikut ini, Anda dapat menemukan fungsi tanggal dan waktu yang dapat Anda gunakan untuk membangun ekspresi aturan transformasi.


| Fungsi tanggal dan waktu | Deskripsi | 
| --- | --- | 
|  `date(timestring, modifier, modifier...)`  |  `date`Fungsi mengembalikan tanggal dalam format YYYY-MM-DD.  | 
|  `time(timestring, modifier, modifier...)`  |  `time`Fungsi mengembalikan waktu dalam format HH: MM: SS.  | 
|  `datetime(timestring, modifier, modifier...)`  |  `datetime`Fungsi mengembalikan tanggal dan waktu dalam format YYYY-MM-DD HH: MM: SS.  | 
|  `julianday(timestring, modifier, modifier...)`  |  `julianday`Fungsi mengembalikan jumlah hari sejak siang di Greenwich pada 24 November 4714 SM.  | 
|  `strftime(format, timestring, modifier, modifier...)`  |  `strftime`Fungsi mengembalikan tanggal sesuai dengan format string ditentukan sebagai argumen pertama, menggunakan salah satu variabel berikut: `%d`: hari bulan `%H`: jam 00—24 `%f`: \$1\$1 pecahan detik SS.SSS `%j`: hari tahun 001—366 `%J`: \$1\$1 Nomor hari Julian `%m`: bulan 01—12 `%M`: menit 00—59 `%s`: detik sejak 1970-01-01 `%S`: detik 00—59 `%w`: hari dalam seminggu 0—6 Minggu==0 `%W`: minggu tahun 00—53 `%Y`: tahun 0000—9999 `%%`: %  | 

Berikut ini, Anda dapat menemukan fungsi hash yang dapat Anda gunakan untuk membangun ekspresi aturan transformasi.


| Fungsi hash | Deskripsi | 
| --- | --- | 
|  `hash_sha256(x)`  |  `hash`Fungsi ini menghasilkan nilai hash untuk kolom input (menggunakan algoritma SHA-256) dan mengembalikan nilai heksadesimal dari nilai hash yang dihasilkan.  Untuk menggunakan `hash` fungsi dalam ekspresi, tambahkan `hash_sha256(x)` ke ekspresi dan ganti *`x`* dengan nama kolom sumber.  | 

### Menggunakan ekspresi CASE
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.CASE"></a>

 SQLite `CASE`Ekspresi mengevaluasi daftar kondisi dan mengembalikan ekspresi berdasarkan hasil. Sintaks ditampilkan sebagai berikut.

```
    CASE case_expression
     WHEN when_expression_1 THEN result_1
     WHEN when_expression_2 THEN result_2
     ...
     [ ELSE result_else ] 
    END

# Or 

     CASE
     WHEN case_expression THEN result_1
     WHEN case_expression THEN result_2
     ...
     [ ELSE result_else ] 
    END
```

### Contoh
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.Ex"></a>

**Example menambahkan kolom string baru ke tabel target menggunakan kondisi kasus**  
Contoh aturan transformasi berikut menambahkan kolom string baru,`emp_seniority`, ke tabel target,`employee`. Ini menggunakan SQLite `round` fungsi pada kolom gaji, dengan kondisi kasus untuk memeriksa apakah gaji sama atau melebihi 20.000. Jika ya, kolom mendapatkan nilai`SENIOR`, dan hal lain memiliki nilai`JUNIOR`.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "emp_seniority",
      "expression": " CASE WHEN round($emp_salary)>=20000 THEN ‘SENIOR’ ELSE ‘JUNIOR’ END",
      "data-type": {
        "type": "string",
        "length": 50
      }

  }
```

**Example menambahkan kolom string baru ke tabel target menggunakan fungsi SUBSTR**  
Contoh aturan transformasi berikut menambahkan kolom string baru menggunakan SQLite operator atau fungsi untuk menentukan data dalam kolom. Pendekatan ini melibatkan penggunaan SQLite fungsi untuk mengubah data GUID yang dimuat dari Oracle ke format UUID sebelum memasukkannya ke dalam tabel target Postgresql.  
Aturan berikut menggunakan fungsi SQLite substring (SUBSTR), fungsi heksadesimal (HEX), dan huruf kecil (RENDAH) untuk memecah data GUID menjadi beberapa kelompok yang dipisahkan oleh tanda hubung, khususnya sekelompok 8 digit diikuti oleh tiga kelompok 4 digit diikuti oleh sekelompok 12 digit, dengan total 32 digit yang mewakili 128 bit.  
Berikut adalah data sumber sampel dan output pada pemrosesan pasca target melalui aturan transformasi:  
**Tabel Sumber (format Oracle GUID)**    
T\$1 COL2  

```
06F6949D234911EE80670242AC120002
1A2B3C4D5E6F11EE80670242AC120003
F5E4D3C2B1A011EE80670242AC120004
```
**Tabel Target (format PostgreSQL UUID)**    
T\$1 \$1TMP COL2  

```
06f6949d-2349-11ee-8067-0242ac120002
1a2b3c4d-5e6f-11ee-8067-0242ac120003
f5e4d3c2-b1a0-11ee-8067-0242ac120004
```

```
{
  "rule-type": "transformation",
  "rule-id": "2",
  "rule-name": "2",
  "rule-action": "add-column",
  "rule-target": "column",
  "object-locator": {
    "schema-name": "SPORTS",
    "table-name": "TEST_TBL_2"
  },
  "value": "t_col2_tmp",
  "expression": "CASE LOWER(SUBSTR(HEX($T_COL2), 1, 8) || '-' || SUBSTR(HEX($T_COL2), 9, 4) || '-' || SUBSTR(HEX($T_COL2), 13, 4) || '-' || SUBSTR(HEX($T_COL2), 17, 4) || '-' || SUBSTR(HEX($T_COL2), 21, 12)) WHEN '----' THEN NULL ELSE LOWER(SUBSTR(HEX($T_COL2), 1, 8) || '-' || SUBSTR(HEX($T_COL2), 9, 4) || '-' || SUBSTR(HEX($T_COL2), 13, 4) || '-' || SUBSTR(HEX($T_COL2), 17, 4) || '-' || SUBSTR(HEX($T_COL2), 21, 12)) END",
  "data-type": {
    "type": "string",
    "length": 60
  }
}
```

**Example menambahkan kolom tanggal baru ke tabel target**  
Contoh berikut menambahkan kolom tanggal baru,`createdate`, ke tabel target,`employee`. Saat Anda menggunakan fungsi SQLite tanggal`datetime`, tanggal ditambahkan ke tabel yang baru dibuat untuk setiap baris yang disisipkan.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "createdate",
      "expression": "datetime ()",
      "data-type": {
        "type": "datetime",
        "precision": 6
      }
  }
```

**Example menambahkan kolom numerik baru ke tabel target**  
Contoh berikut menambahkan kolom numerik baru,`rounded_emp_salary`, ke tabel target,`employee`. Ini menggunakan SQLite `round` fungsi untuk menambah gaji bulat.   

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "rounded_emp_salary",
      "expression": "round($emp_salary)",
      "data-type": {
        "type": "int8"
      }
  }
```

**Example menambahkan kolom string baru ke tabel target menggunakan fungsi hash**  
Contoh berikut menambahkan kolom string baru,`hashed_emp_number`, ke tabel target,`employee`. SQLite`hash_sha256(x)`Fungsi ini menciptakan nilai hash pada target untuk kolom sumber,`emp_number`.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "hashed_emp_number",
      "expression": "hash_sha256($emp_number)",
      "data-type": {
        "type": "string",
        "length": 64
      }
  }
```

## Menambahkan metadata ke tabel target menggunakan ekspresi
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Metadata"></a>

Anda dapat menambahkan informasi metadata ke tabel target dengan menggunakan ekspresi berikut:
+ `$AR_M_SOURCE_SCHEMA`— Nama skema sumber.
+ `$AR_M_SOURCE_TABLE_NAME`— Nama tabel sumber.
+ `$AR_M_SOURCE_COLUMN_NAME`— Nama kolom di tabel sumber.
+ `$AR_M_SOURCE_COLUMN_DATATYPE`— Tipe data kolom dalam tabel sumber.

**Example menambahkan kolom untuk nama skema menggunakan nama skema dari sumber**  
Contoh berikut menambahkan kolom baru bernama `schema_name` target dengan menggunakan nama skema dari sumber.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "add-column",
      "value":"schema_name",
      "expression": "$AR_M_SOURCE_SCHEMA", 
      "data-type": { 
         "type": "string",
         "length": 50
      }
  }
```