本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 AWS DMS 將資料遷移至 Amazon DynamoDB 資料表。Amazon DynamoDB 是全受管的 NoSQL 資料庫服務,可提供快速且可預測的效能,並具有無縫的可擴展性。 AWS DMS 支援使用關聯式資料庫或 MongoDB 做為來源。
在 DynamoDB 中,資料表、項目與屬性都是您會用到的核心元件。資料表是項目的集合,而每個項目都是屬性的集合。DynamoDB 使用稱為分割區索引鍵的主索引鍵,唯一識別資料表中的各個項目。您也可以使用索引鍵和次要索引提供更多的查詢靈活性。
您要使用物件映射將資料從來源資料庫遷移到目標 DynamoDB 資料表。物件映射可讓您判斷來源資料在目標中的位置。
當 在 DynamoDB 目標端點上 AWS DMS 建立資料表時,它會建立與來源資料庫端點中一樣多的資料表。 AWS DMS 也會設定數個 DynamoDB 參數值。資料表的建立成本取決於要遷移的資料量和資料表數量。
注意
AWS DMS 主控台或 API 上的 SSL 模式選項不適用於某些資料串流和 NoSQL 服務,例如 Kinesis 和 DynamoDB。根據預設,它們是安全的,因此 AWS DMS 顯示 SSL 模式設定等於無 (SSL 模式 = 無)。您無需為端點提供任何其他組態即可使用 SSL。例如,使用 DynamoDB 作為目標端點時,預設情況下其是安全的。所有對 DynamoDB 的 API 呼叫都使用 SSL,因此 AWS DMS 端點中不需要額外的 SSL 選項。您可以使用 HTTPS 通訊協定 ( AWS DMS 是在連線到 DynamoDB 資料庫時預設使用的通訊協定),透過 SSL 端點安全地放置和擷取資料。
為了協助提高傳輸速度, AWS DMS 支援對 DynamoDB 目標執行個體進行多執行緒完全載入。DMS 使用包括下列項目的任務設定來支援此多執行緒操作:
-
MaxFullLoadSubTasks
:使用此選項,指出要平行載入的來源資料表數目上限。DMS 會使用專用子任務,將每個資料表載入到其對應的 DynamoDB 目標資料表。預設值為 8。最大值為 49。 -
ParallelLoadThreads
– 使用此選項指定 AWS DMS 用於將每個資料表載入其 DynamoDB 目標資料表的執行緒數目。預設值為 0 (單一執行緒)。最大值為 200。您可以要求提高此上限。注意
DMS 會將資料表的每個區段指派給自己的執行緒,以進行載入。因此,將
ParallelLoadThreads
設定為您針對來源中資料表所指定的區段數量上限。 -
ParallelLoadBufferSize
:使用此選項,指定要在平行載入執行緒用來將資料載入至 DynamoDB 目標的緩衝區中儲存的記錄數量上限。預設值為 50。最大值為 1000。使用此設定搭配ParallelLoadThreads
;ParallelLoadBufferSize
,只有在有多個執行緒時才有效。 -
個別資料表的資料表對應設定:使用
table-settings
規則,從來源中識別您想要平行載入的個別資料表。亦可使用這些規則,指定如何將每個資料表的資料列分段,以進行多執行緒載入。如需詳細資訊,請參閱資料表和集合設定規則與操作。
注意
當 AWS DMS 設定遷移任務的 DynamoDB 參數值時,預設讀取容量單位 (RCU) 參數值會設為 200。
也會設定寫入容量單位 (WCU) 參數值,但其值取決於多項其他設定:
-
WCU 參數的預設值為 200。
-
如果
ParallelLoadThreads
任務設定的值大於 1 (預設為 0),則 WCU 參數會設定為ParallelLoadThreads
值的 200 倍。 標準 AWS DMS 用量費用適用於您使用的資源。
從關聯式資料庫遷移到 DynamoDB 資料表
AWS DMS 支援將資料遷移至 DynamoDB 純量資料類型。從 Oracle 或 MySQL 等關聯式資料庫遷移到 DynamoDB 時,您可能想要重組資料的儲存方式。
目前 AWS DMS 支援單一資料表對單一資料表重組為 DynamoDB 純量類型屬性。如果要將資料從關聯式資料庫資料表遷移到 DynamoDB,您需要取出資料表的資料,將它重新格式化為 DynamoDB 純量資料類型屬性。這些屬性可以接受多資料行資料,而且您可以直接將資料行映射到屬性。
AWS DMS 支援下列 DynamoDB 純量資料類型:
-
字串
-
Number
-
Boolean
注意
忽略目標中來自來源的 NULL 資料。
使用 DynamoDB 做為 目標的先決條件 AWS Database Migration Service
在您開始使用 DynamoDB 資料庫做為 的目標之前 AWS DMS,請務必建立 IAM 角色。此 IAM 角色應允許 AWS DMS 擔任並授予要遷移至其中的 DynamoDB 資料表的存取權。以下 IAM 政策顯示最低的存取許可集。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "dms.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
遷移到 DynamoDB 所用的角色必須擁有下列許可。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",
"dynamodb:CreateTable",
"dynamodb:DescribeTable",
"dynamodb:DeleteTable",
"dynamodb:DeleteItem",
"dynamodb:UpdateItem"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:account-id:table/name1",
"arn:aws:dynamodb:us-west-2:account-id:table/OtherName*",
"arn:aws:dynamodb:us-west-2:account-id:table/awsdms_apply_exceptions",
"arn:aws:dynamodb:us-west-2:account-id:table/awsdms_full_load_exceptions"
]
},
{
"Effect": "Allow",
"Action": [
"dynamodb:ListTables"
],
"Resource": "*"
}
]
}
使用 DynamoDB 做為 目標時的限制 AWS Database Migration Service
使用 DynamoDB 作為目標時,有下列限制:
-
DynamoDB 將 Number 資料類型的精確度限制到 38 位。將精確度更高的所有資料類型儲存為字串。您需要使用物件映射功能來明確指定此設定。
-
因為 DynamoDB 沒有 Date 資料類型,所以使用 Date 資料類型的資料會轉換為字串。
-
DynamoDB 不允許更新主索引鍵屬性。此限制在使用變更資料擷取 (CDC) 進行中複寫時十分重要,因為它會導致目標出現不需要的資料。根據您如何映射物件,用於更新主索引鍵的 CDC 操作有兩種用途。它可以使新項目失敗,或隨著更新的主索引鍵和不完整的資料來插入新項目。
-
AWS DMS 僅支援使用非複合主索引鍵複寫資料表。如果您搭配分區索引鍵、排序索引鍵或兩者來指定目標資料表的物件映射,則為例外。
-
AWS DMS 除非是 CLOB,否則 不支援 LOB 資料。在遷移資料時, 會將 CLOB 資料 AWS DMS 轉換為 DynamoDB 字串。
-
使用 DynamoDB 做為目標時,僅支援套用異常控制資料表 (
dmslogs.awsdms_apply_exceptions
)。如需控制資料表的詳細資訊,請參閱控制資料表任務設定。 AWS DMS 不支援 DynamoDB
TargetTablePrepMode=TRUNCATE_BEFORE_LOAD
的任務設定做為目標。AWS DMS 不支援 DynamoDB
TaskRecoveryTableEnabled
的任務設定做為目標。BatchApply
DynamoDB 端點不支援 。
使用物件映射將資料遷移到 DynamoDB
AWS DMS 使用資料表映射規則,將資料從來源映射到目標 DynamoDB 資料表。若要將資料映射到 DynamoDB 目標,您要使用一種稱為 object-mapping 的資料表映射規則。物件映射可讓您定義屬性名稱和遷移到屬性的資料。當您使用物件映射時,您必須有選擇規則。
除了擁有分割區索引鍵和選擇性排序索引鍵外,DynamoDB 沒有預設結構。如果您有非複合主索引鍵, AWS DMS 會使用它。如果您有複合主索引鍵或想要使用排序索引鍵,請在您的目標 DynamoDB 資料表中定義這些索引鍵和其他屬性。
若要建立物件映射規則,請將 rule-type
指定為 object-mapping。此規則指定您想要使用的物件映射類型。
規則的結構如下:
{ "rules": [
{
"rule-type": "object-mapping",
"rule-id": "<id>",
"rule-name": "<name>",
"rule-action": "<valid object-mapping rule action>",
"object-locator": {
"schema-name": "<case-sensitive schema name>",
"table-name": ""
},
"target-table-name": "<table_name>"
}
]
}
AWS DMS 目前支援 map-record-to-record
和 map-record-to-document
做為 rule-action
參數的唯一有效值。這些值會指定預設 AWS DMS 如何處理屬性exclude-columns
清單中未排除的記錄。這些值反正不會影響屬性映射。
-
從關聯式資料庫遷移到 DynamoDB 時,您可以使用
map-record-to-record
。其使用關聯式資料庫的主索引鍵作為 DynamoDB 的分割區索引鍵,並為來源資料庫中的每個資料欄建立一個屬性。使用 時map-record-to-record
,對於來源資料表中未列於exclude-columns
屬性清單中的任何資料欄, 會在目標 DynamoDB 執行個體上 AWS DMS 建立對應的屬性。無論屬性映射中是否使用該來源欄,它都會這樣做。 -
請使用
map-record-to-document
並利用屬性名稱 "_doc",將來源資料欄放到目標上的單一、普通 DynamoDB 對應中。使用 時map-record-to-document
, 會將資料 AWS DMS 放入來源上的單一、平面、DynamoDB 映射屬性。此屬性稱為 "_doc"。此放置適用於來源資料表中未列在exclude-columns
屬性清單的任何欄。
若要了解 rule-action
參數 map-record-to-record
和 map-record-to-document
之間的差異,方法之一就是實際查看這兩個參數。在本範例中,假設您開始使用之關聯式資料庫資料表資料列的結構和資料如下:

若要將此資訊遷移到 DynamoDB,您要建立規則,將資料映射到 DynamoDB 資料表項目。記下針對 exclude-columns
參數列出的資料行。這些資料行不會直接映射至目標。而是改用屬性映射將資料組合為新項目,例如 FirstName 和 LastName 組成 DynamoDB 目標的 CustomerName。不排除 NickName 和 income。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "object-mapping",
"rule-id": "2",
"rule-name": "TransformToDDB",
"rule-action": "map-record-to-record",
"object-locator": {
"schema-name": "test",
"table-name": "customer"
},
"target-table-name": "customer_t",
"mapping-parameters": {
"partition-key-name": "CustomerName",
"exclude-columns": [
"FirstName",
"LastName",
"HomeAddress",
"HomePhone",
"WorkAddress",
"WorkPhone"
],
"attribute-mappings": [
{
"target-attribute-name": "CustomerName",
"attribute-type": "scalar",
"attribute-sub-type": "string",
"value": "${FirstName},${LastName}"
},
{
"target-attribute-name": "ContactDetails",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-map",
"value": {
"M": {
"Home": {
"M": {
"Address": {
"S": "${HomeAddress}"
},
"Phone": {
"S": "${HomePhone}"
}
}
},
"Work": {
"M": {
"Address": {
"S": "${WorkAddress}"
},
"Phone": {
"S": "${WorkPhone}"
}
}
}
}
}
}
]
}
}
]
}
透過使用 rule-action
參數 map-record-to-record、NickName 和 income 的資料映射到 DynamoDB 目標的同名項目。

不過,假設您使用相同的規則,但將 rule-action
參數變更為 map-record-to-document。在本例中,未列在 exclude-columns
參數 NickName 和 income 中的資料行會映射到 _doc 項目。

使用自訂條件表達式與物件映射
您可以使用稱為條件表達式的 DynamoDB 功能,操作要寫入 DynamoDB 資料表的資料。如需 DynamoDB 中條件表達式的詳細資訊,請參閱條件表達式。
條件表達式成員包含:
-
表達式 (必要)
-
表達式屬性值 (選用)。指定屬性值的 DynamoDB json 結構
-
表達式屬性名稱 (選用)
-
何時使用條件表達式的選項 (選用)。預設值是 apply-during-cdc = false 和 apply-during-full-load = true
規則的結構如下:
"target-table-name": "customer_t",
"mapping-parameters": {
"partition-key-name": "CustomerName",
"condition-expression": {
"expression":"<conditional expression>",
"expression-attribute-values": [
{
"name":"<attribute name>",
"value":<attribute value>
}
],
"apply-during-cdc":<optional Boolean value>,
"apply-during-full-load": <optional Boolean value>
}
以下範例會重點介紹用於條件表達式的區段。

使用屬性映射與物件映射
屬性映射讓您使用來源資料行名稱指定範本字串,在目標中重組資料。除使用者在範本中指定的以外,沒有任何格式化。
以下範例顯示來源資料庫的結構以及 DynamoDB 目標所需的架構。首先顯示來源的結構 (本例中為 Oracle 資料庫),然後顯示 DynamoDB 資料所需的架構。此範例以建立所需目標結構所使用的 JSON 作結。
Oracle 資料的結構如下:
FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateOfBirth |
---|---|---|---|---|---|---|---|
主索引鍵 | N/A | ||||||
Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog | 9876543210 | 1988/02/29 |
DynamoDB 資料的結構如下:
CustomerName | StoreId | ContactDetails | DateOfBirth |
---|---|---|---|
分割區索引鍵 | 排序索引鍵 (Sort Key) | N/A | |
|
|
|
|
下列 JSON 顯示完成 DynamoDB 結構所使用的物件映射和資料行映射:
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "object-mapping",
"rule-id": "2",
"rule-name": "TransformToDDB",
"rule-action": "map-record-to-record",
"object-locator": {
"schema-name": "test",
"table-name": "customer"
},
"target-table-name": "customer_t",
"mapping-parameters": {
"partition-key-name": "CustomerName",
"sort-key-name": "StoreId",
"exclude-columns": [
"FirstName",
"LastName",
"HomeAddress",
"HomePhone",
"WorkAddress",
"WorkPhone"
],
"attribute-mappings": [
{
"target-attribute-name": "CustomerName",
"attribute-type": "scalar",
"attribute-sub-type": "string",
"value": "${FirstName},${LastName}"
},
{
"target-attribute-name": "StoreId",
"attribute-type": "scalar",
"attribute-sub-type": "string",
"value": "${StoreId}"
},
{
"target-attribute-name": "ContactDetails",
"attribute-type": "scalar",
"attribute-sub-type": "string",
"value": "{\"Name\":\"${FirstName}\",\"Home\":{\"Address\":\"${HomeAddress}\",\"Phone\":\"${HomePhone}\"}, \"Work\":{\"Address\":\"${WorkAddress}\",\"Phone\":\"${WorkPhone}\"}}"
}
]
}
}
]
}
資料行映射的另一個使用方法是使用 DynamoDB 格式做為您的文件類型。以下程式碼範例使用 dynamodb-map 做為屬性映射的 attribute-sub-type
。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "object-mapping",
"rule-id": "2",
"rule-name": "TransformToDDB",
"rule-action": "map-record-to-record",
"object-locator": {
"schema-name": "test",
"table-name": "customer"
},
"target-table-name": "customer_t",
"mapping-parameters": {
"partition-key-name": "CustomerName",
"sort-key-name": "StoreId",
"exclude-columns": [
"FirstName",
"LastName",
"HomeAddress",
"HomePhone",
"WorkAddress",
"WorkPhone"
],
"attribute-mappings": [
{
"target-attribute-name": "CustomerName",
"attribute-type": "scalar",
"attribute-sub-type": "string",
"value": "${FirstName},${LastName}"
},
{
"target-attribute-name": "StoreId",
"attribute-type": "scalar",
"attribute-sub-type": "string",
"value": "${StoreId}"
},
{
"target-attribute-name": "ContactDetails",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-map",
"value": {
"M": {
"Name": {
"S": "${FirstName}"
},
"Home": {
"M": {
"Address": {
"S": "${HomeAddress}"
},
"Phone": {
"S": "${HomePhone}"
}
}
},
"Work": {
"M": {
"Address": {
"S": "${WorkAddress}"
},
"Phone": {
"S": "${WorkPhone}"
}
}
}
}
}
}
]
}
}
]
}
作為 dynamodb-map
的替代方案,您可以如下列範例所示,使用 dynamodb-list
作為屬性映射的 attribute-sub-type。
{
"target-attribute-name": "ContactDetailsList",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-list",
"value": {
"L": [
{
"N": "${FirstName}"
},
{
"N": "${HomeAddress}"
},
{
"N": "${HomePhone}"
},
{
"N": "${WorkAddress}"
},
{
"N": "${WorkPhone}"
}
]
}
}
範例 1:使用屬性映射與物件映射
以下範例會將資料從兩個 MySQL 資料庫資料表 nfl_data 和 sport_team 遷移到兩個 DynamoDB 資料表 NFLTeams 和 SportTeams。將資料從 MySQL 資料庫資料表映射到 DynamoDB 資料表所使用的資料表結構和 JSON,如下所示。
MySQL 資料庫資料表 nfl_data 的結構如下所示:
mysql> desc nfl_data;
+---------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| Position | varchar(5) | YES | | NULL | |
| player_number | smallint(6) | YES | | NULL | |
| Name | varchar(40) | YES | | NULL | |
| status | varchar(10) | YES | | NULL | |
| stat1 | varchar(10) | YES | | NULL | |
| stat1_val | varchar(10) | YES | | NULL | |
| stat2 | varchar(10) | YES | | NULL | |
| stat2_val | varchar(10) | YES | | NULL | |
| stat3 | varchar(10) | YES | | NULL | |
| stat3_val | varchar(10) | YES | | NULL | |
| stat4 | varchar(10) | YES | | NULL | |
| stat4_val | varchar(10) | YES | | NULL | |
| team | varchar(10) | YES | | NULL | |
+---------------+-------------+------+-----+---------+-------+
MySQL 資料庫資料表 sport_team 的結構如下所示:
mysql> desc sport_team;
+---------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+--------------+------+-----+---------+----------------+
| id | mediumint(9) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | | NULL | |
| abbreviated_name | varchar(10) | YES | | NULL | |
| home_field_id | smallint(6) | YES | MUL | NULL | |
| sport_type_name | varchar(15) | NO | MUL | NULL | |
| sport_league_short_name | varchar(10) | NO | | NULL | |
| sport_division_short_name | varchar(10) | YES | | NULL | |
將兩份資料表映射到兩份 DynamoDB 資料表所用的資料表映射規則,如下所示:
{
"rules":[
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "dms_sample",
"table-name": "nfl_data"
},
"rule-action": "include"
},
{
"rule-type": "selection",
"rule-id": "2",
"rule-name": "2",
"object-locator": {
"schema-name": "dms_sample",
"table-name": "sport_team"
},
"rule-action": "include"
},
{
"rule-type":"object-mapping",
"rule-id":"3",
"rule-name":"MapNFLData",
"rule-action":"map-record-to-record",
"object-locator":{
"schema-name":"dms_sample",
"table-name":"nfl_data"
},
"target-table-name":"NFLTeams",
"mapping-parameters":{
"partition-key-name":"Team",
"sort-key-name":"PlayerName",
"exclude-columns": [
"player_number", "team", "name"
],
"attribute-mappings":[
{
"target-attribute-name":"Team",
"attribute-type":"scalar",
"attribute-sub-type":"string",
"value":"${team}"
},
{
"target-attribute-name":"PlayerName",
"attribute-type":"scalar",
"attribute-sub-type":"string",
"value":"${name}"
},
{
"target-attribute-name":"PlayerInfo",
"attribute-type":"scalar",
"attribute-sub-type":"string",
"value":"{\"Number\": \"${player_number}\",\"Position\": \"${Position}\",\"Status\": \"${status}\",\"Stats\": {\"Stat1\": \"${stat1}:${stat1_val}\",\"Stat2\": \"${stat2}:${stat2_val}\",\"Stat3\": \"${stat3}:${
stat3_val}\",\"Stat4\": \"${stat4}:${stat4_val}\"}"
}
]
}
},
{
"rule-type":"object-mapping",
"rule-id":"4",
"rule-name":"MapSportTeam",
"rule-action":"map-record-to-record",
"object-locator":{
"schema-name":"dms_sample",
"table-name":"sport_team"
},
"target-table-name":"SportTeams",
"mapping-parameters":{
"partition-key-name":"TeamName",
"exclude-columns": [
"name", "id"
],
"attribute-mappings":[
{
"target-attribute-name":"TeamName",
"attribute-type":"scalar",
"attribute-sub-type":"string",
"value":"${name}"
},
{
"target-attribute-name":"TeamInfo",
"attribute-type":"scalar",
"attribute-sub-type":"string",
"value":"{\"League\": \"${sport_league_short_name}\",\"Division\": \"${sport_division_short_name}\"}"
}
]
}
}
]
}
NFLTeams DynamoDB 資料表的輸出範例如下所示:
"PlayerInfo": "{\"Number\": \"6\",\"Position\": \"P\",\"Status\": \"ACT\",\"Stats\": {\"Stat1\": \"PUNTS:73\",\"Stat2\": \"AVG:46\",\"Stat3\": \"LNG:67\",\"Stat4\": \"IN 20:31\"}",
"PlayerName": "Allen, Ryan",
"Position": "P",
"stat1": "PUNTS",
"stat1_val": "73",
"stat2": "AVG",
"stat2_val": "46",
"stat3": "LNG",
"stat3_val": "67",
"stat4": "IN 20",
"stat4_val": "31",
"status": "ACT",
"Team": "NE"
}
SportsTeams DynamoDB 資料表的輸出範例如下所示:
{
"abbreviated_name": "IND",
"home_field_id": 53,
"sport_division_short_name": "AFC South",
"sport_league_short_name": "NFL",
"sport_type_name": "football",
"TeamInfo": "{\"League\": \"NFL\",\"Division\": \"AFC South\"}",
"TeamName": "Indianapolis Colts"
}
DynamoDB 的目標資料類型
的 DynamoDB 端點 AWS DMS 支援大多數 DynamoDB 資料類型。下表顯示使用 時支援的 Amazon AWS DMS 目標資料類型, AWS DMS 以及來自 AWS DMS 資料類型的預設映射。
如需 AWS DMS 資料類型的詳細資訊,請參閱 AWS Database Migration Service 的資料類型。
當 從異質資料庫 AWS DMS 遷移資料時,我們會將資料類型從來源資料庫映射到稱為 AWS DMS 資料類型的中繼資料類型。然後,我們會將中繼資料類型映射到目標資料類型。下表顯示每個 AWS DMS 資料類型及其在 DynamoDB 中映射到的資料類型:
AWS DMS 資料類型 | DynamoDB 資料類型 |
---|---|
字串 |
字串 |
WString |
字串 |
Boolean |
Boolean |
日期 |
字串 |
DateTime |
字串 |
INT1 |
Number |
INT2 |
Number |
INT4 |
Number |
INT8 |
Number |
數值 |
Number |
Real4 |
Number |
Real8 |
Number |
UINT1 |
Number |
UINT2 |
Number |
UINT4 |
Number |
UINT8 | Number |
CLOB | 字串 |