使用 Azure Data Factory 或 Synapse Analytics 將資料複製到 Azure 資料表儲存體或從該處複製資料
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用!
本文概述如何使用 Azure Data Factory 和 Synapse Analytics 管線中的複製活動將資料複製到 Azure 資料表儲存體,或從該處複製資料。 本文是根據複製活動概觀一文,該文提供複製活動的一般概觀。
注意
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱安裝 Azure PowerShell (部分機器翻譯)。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az。
支援的功能
下列功能支援此 Azure 資料表儲存體連接器:
支援的功能 | IR | 受控私人端點 |
---|---|---|
複製活動 (來源/接收) | ① ② | ✓ 排除儲存體帳戶 V1 |
查閱活動 | ① ② | ✓ 排除儲存體帳戶 V1 |
① Azure 整合執行階段 ② 自我裝載整合執行階段
您可以將資料從支援的來源資料存放區複製到資料表儲存體。 您也可以將資料從資料表儲存體複製到任何支援的接收資料存放區。 如需複製活動所支援作為來源或接收器的資料存放區清單,請參閱支援的資料存放區表格。
具體而言,這個「Azure 資料表」連接器支援使用帳戶金鑰和服務共用存取簽章驗證來複製資料。
開始使用
若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:
使用 UI 建立 Azure 資料表儲存體連結服務
使用下列步驟,在 Azure 入口網站 UI 中建立 Azure 資料表儲存體連結服務。
前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:
搜尋 Azure 資料表,然後選取 Azure 資料表儲存體連接器。
設定服務詳細資料,測試連線,然後建立新的連結服務。
連接器設定詳細資料
下列各節提供屬性的相關詳細資料,這些屬性用來定義資料表儲存體專屬的實體。
連結服務屬性
此 Azure 表格儲存體連接器支援下列驗證類型。 如需詳細資料,請參閱對應章節。
帳戶金鑰驗證
您可以使用帳戶金鑰來建立 Azure 儲存體連結服務。 其可將儲存體的全域存取權提供給服務。 以下是支援的屬性。
屬性 | 描述 | 必要 |
---|---|---|
type | 類型屬性必須設為 AzureTableStorage。 | Yes |
connectionString | 針對 connectionString 屬性指定連線到儲存體所需的資訊。 您也可以將帳戶金鑰放在 Azure Key Vault 並從連接字串中提取 accountKey 組態。 請參閱下列範例和在 Azure Key Vault 中儲存認證一文中的更多詳細資料。 |
Yes |
connectVia | 用來連線到資料存放區的整合執行階段。 您可以使用 Azure Integration Runtime 或自我裝載整合執行階段 (如果您的資料存放區位於私人網路中)。 如果未指定,就會使用預設的 Azure Integration Runtime。 | No |
注意
如果您使用 "AzureStorage" 類型連結服務,它仍會如現狀般受到支援,但建議您從現在開始使用這個新的 "AzureTableStorage" 連結服務類型。
範例:
{
"name": "AzureTableStorageLinkedService",
"properties": {
"type": "AzureTableStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
範例:在 Azure Key Vault 中儲存帳戶金鑰
{
"name": "AzureTableStorageLinkedService",
"properties": {
"type": "AzureTableStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;",
"accountKey": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
共用存取簽章驗證
您也可以使用共用存取簽章來建立儲存體連結服務。 其提供受限制/時間界限存取權,讓服務存取儲存體中的所有/特定資源。
共用存取簽章可提供您儲存體帳戶中資源的委派存取。 您可以使用它來將儲存體帳戶中物件的有限權限授與用戶端,讓該用戶端可以在一段指定時間內使用一組指定的權限進行存取。 您不需要共用您的帳戶存取金鑰。 共用存取簽章是一種 URI,此 URI 會在其查詢參數中包含對儲存體資源進行驗證式存取所需的一切資訊。 若要使用共用存取簽章存取儲存體資源,用戶端只需在適當的建構函式或方法中傳入共用存取簽章即可。 如需共用存取簽章的詳細資訊,請參閱共用存取簽章:了解共用存取簽章模型。
注意
服務共用存取簽章和帳戶共用存取簽章目前均受支援。 如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS) 授與 Azure 儲存體資源的有限存取權。
提示
若要為儲存體帳戶產生服務共用存取簽章,您可以執行下列 PowerShell 命令。 取代預留位置,並授與所需的權限。
$context = New-AzStorageContext -StorageAccountName <accountName> -StorageAccountKey <accountKey>
New-AzStorageContainerSASToken -Name <containerName> -Context $context -Permission rwdl -StartTime <startTime> -ExpiryTime <endTime> -FullUri
若要使用共用存取簽章驗證,以下是支援的屬性。
屬性 | 描述 | 必要 |
---|---|---|
type | 類型屬性必須設為 AzureTableStorage。 | Yes |
sasUri | 將共用存取簽章 URI 的 SAS URI 指定至資料表。 將此欄位標記為 SecureString 以將其安全地儲存。 您也可以將 SAS 權杖放入 Azure Key Vault 中,以運用自動輪替和移除權杖部分。 請參閱下列範例和在 Azure Key Vault 中儲存認證一文中的更多詳細資料。 |
Yes |
connectVia | 用來連線到資料存放區的整合執行階段。 您可以使用 Azure Integration Runtime 或自我裝載 Integration Runtime (如果您的資料存放區位於私人網路中)。 如果未指定,就會使用預設的 Azure Integration Runtime。 | No |
注意
如果您使用 "AzureStorage" 類型連結服務,它仍會如現狀般受到支援,但建議您從現在開始使用這個新的 "AzureTableStorage" 連結服務類型。
範例:
{
"name": "AzureTableStorageLinkedService",
"properties": {
"type": "AzureTableStorage",
"typeProperties": {
"sasUri": {
"type": "SecureString",
"value": "<SAS URI of the Azure Storage resource e.g. https://<account>.table.core.windows.net/<table>?sv=<storage version>&st=<start time>&se=<expire time>&sr=<resource>&sp=<permissions>&sip=<ip range>&spr=<protocol>&sig=<signature>>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
範例:在 Azure Key Vault 中儲存帳戶金鑰
{
"name": "AzureTableStorageLinkedService",
"properties": {
"type": "AzureTableStorage",
"typeProperties": {
"sasUri": {
"type": "SecureString",
"value": "<SAS URI of the Azure Storage resource without token e.g. https://<account>.table.core.windows.net/<table>>"
},
"sasToken": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
當您建立共用存取簽章 URI 時,請考慮下列各點:
- 根據連結服務 (讀取、寫入、讀取/寫入) 的使用方式,在物件上設定適當的讀取/寫入權限。
- 設定適當的 [過期時間]。 請確定儲存體物件的存取權不會在管線的作用中期間內過期。
- 應視需要在正確的資料表層級建立 URI。
系統指派的受控身分識別驗證
資料處理站或 Synapse 管線可與 Azure 資源的系統指派受控識別相關聯,這代表該資源用於驗證其他 Azure 服務。 您可以使用此系統指派的受控識別進行 Azure 表格儲存體驗證。 若要深入了解 Azure 資源受控識別,請參閱 Azure 資源受控識別
若要使用系統指派的受控身分識別驗證,請依照下列步驟操作:
複製與處理站或 Synapse 工作區一併產生的系統指派受控識別物件識別碼,以便擷取系統指派的受控識別資訊。
將 Azure 表格儲存體中的權限授與受控識別。 如需角色詳細資訊,請參閱這篇文章 (部分機器翻譯)。
- 針對 [作為來源],至少在 [存取控制 (IAM)] 中授與 [儲存體表格資料讀者] 角色。
- 針對 [作為接收],至少在 [存取控制 (IAM)] 中授與 [儲存體表格資料參與者] 角色。
以下是支援 Azure 表格儲存體連結服務的屬性:
屬性 | 描述 | 必要 |
---|---|---|
type | 類型屬性必須設為 AzureTableStorage。 | Yes |
serviceEndpoint | 指定模式為 https://<accountName>.table.core.windows.net/ 的 Azure 表格儲存體服務端點。 |
Yes |
connectVia | 用來連線到資料存放區的整合執行階段。 您可以使用 Azure Integration Runtime。 如果未指定,就會使用預設的 Azure Integration Runtime。 | No |
注意
系統指派的受控識別驗證僅受 Azure Integration Runtime 支援。
範例:
{
"name": "AzureTableStorageLinkedService",
"properties": {
"type": "AzureTableStorage",
"typeProperties": {
"serviceEndpoint": "https://<accountName>.table.core.windows.net/"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
使用者指派的受控身分識別驗證
資料處理站可以使用一或多個使用者指派的受控識別來指派。 您可以使用此使用者指派的受控識別進行 Azure 表格儲存體驗證,以允許在 Data Lake Storage Gen2 中來回存取和複製資料。 若要深入了解 Azure 資源受控識別,請參閱 Azure 資源受控識別
若要使用使用者指派的受控識別驗證,請依照下列步驟操作:
在 Azure 表格儲存體中建立一或多個使用者指派的受控識別 (部分機器翻譯),並授與權限。 如需角色詳細資訊,請參閱這篇文章 (部分機器翻譯)。
- 針對 [作為來源],至少在 [存取控制 (IAM)] 中授與 [儲存體表格資料讀者] 角色。
- 針對 [作為接收],至少在 [存取控制 (IAM)] 中授與 [儲存體表格資料參與者] 角色。
將一或多個使用者指派的受控身分識別指派給資料處理站,並為每個使用者指派的受控身分識別建立認證。
以下是支援 Azure 表格儲存體連結服務的屬性:
屬性 | 描述 | 必要 |
---|---|---|
type | 類型屬性必須設為 AzureTableStorage。 | Yes |
serviceEndpoint | 指定模式為 https://<accountName>.table.core.windows.net/ 的 Azure 表格儲存體服務端點。 |
Yes |
credentials | 將使用者指派的受控身分識別指定為認證物件。 | Yes |
connectVia | 用來連線到資料存放區的整合執行階段。 您可以使用 Azure Integration Runtime 或自我裝載 Integration Runtime (如果您的資料存放區位於私人網路中)。 如果未指定,就會使用預設的 Azure Integration Runtime。 | No |
範例:
{
"name": "AzureTableStorageLinkedService",
"properties": {
"type": "AzureTableStorage",
"typeProperties": {
"serviceEndpoint": "https://<accountName>.table.core.windows.net/",
"credential": {
"referenceName": "credential1",
"type": "CredentialReference"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
資料集屬性
如需可用來定義資料集的區段和屬性完整清單,請參閱資料集一文。 本節提供「Azure 資料表」資料集所支援的屬性清單。
若要將資料複製到「Azure 資料表」以及從該處複製資料,請將資料集的類型屬性設定為 AzureTable。 以下是支援的屬性。
屬性 | 描述 | 必要 |
---|---|---|
type | 資料集的 type 屬性必須設定為 AzureTable。 | Yes |
tableName | 資料表儲存體資料庫執行個體中連結服務所參照的資料表名稱。 | Yes |
範例:
{
"name": "AzureTableDataset",
"properties":
{
"type": "AzureTable",
"typeProperties": {
"tableName": "MyTable"
},
"schema": [],
"linkedServiceName": {
"referenceName": "<Azure Table storage linked service name>",
"type": "LinkedServiceReference"
}
}
}
服務的結構描述推斷
針對無結構描述的資料存放區 (如 Azure 資料表),服務會以下列一種方式推斷結構描述:
- 如果在複製活動中指定資料行對應,則服務會使用來源端資料行清單來擷取資料。 在此情況下,如果資料列的資料行沒有值,系統就會為它提供 null 值。
- 如果未在複製活動中指定資料行對應,則服務會使用資料中的第一個資料列來推斷結構描述。 在此情況下,如果第一個資料列未包含完整的結構描述 (例如某些資料行有 Null 值),則 複製作業的結果中就會遺失一些資料行。
複製活動屬性
如需可用來定義活動的區段和屬性完整清單,請參閱管線一文。 本節提供「Azure 資料表」來源和接收所支援的屬性清單。
Azure 資料表作為來源類型
若要從「Azure 資料表」複製資料,請將複製活動中的來源類型設定為 AzureTableSource。 複製活動的 [來源] 區段支援下列屬性。
屬性 | 描述 | 必要 |
---|---|---|
type | 複製活動來源的 type 屬性必須設定為 AzureTableSource。 | Yes |
AzureTableSourceQuery | 使用自訂的資料表儲存體查詢來讀取資料。 來源查詢是 Azure 資料表儲存體所支援之 $filter 查詢選項的直接對應,請深入了解此文件中的語法,並參閱下列 azureTableSourceQuery 範例小節中的範例。 |
No |
azureTableSourceIgnoreTableNotFound | 指出是否讓資料表例外狀況不存在。 允許的值為 True 和 False (預設值)。 |
No |
azureTableSourceQuery 範例
注意
Azure 資料表查詢作業會在 30 秒後依 Azure 資料表服務強制 (機器翻譯) 逾時。 若要了解如何將查詢最佳化,請參閱設計查詢一文。
如果想要對日期時間類型資料行篩選資料,請參閱此範例:
"azureTableSourceQuery": "LastModifiedTime gt datetime'2017-10-01T00:00:00' and LastModifiedTime le datetime'2017-10-02T00:00:00'"
如果想要對字串類型資料行篩選資料,請參閱本範例:
"azureTableSourceQuery": "LastModifiedTime ge '201710010000_0000' and LastModifiedTime le '201710010000_9999'"
如果您使用管線參數,請根據上述範例將日期時間值轉換成適當的格式。
Azure 資料表作為接收類型
若要將資料複製到 Azure 資料表,將複製活動中的接收類型設定為 AzureTableSink。 複製活動的 [接收] 區段支援下列屬性。
屬性 | 描述 | 必要 |
---|---|---|
type | 複製活動接收的 type 屬性必須設定為 AzureTableSink。 | Yes |
azureTableDefaultPartitionKeyValue | 可供接收使用的預設資料分割索引鍵值。 | No |
azureTablePartitionKeyName | 指定其值用來作為分割區索引鍵的資料行名稱。 如果未指定,則會使用 "AzureTableDefaultPartitionKeyValue" 作為分割區索引鍵。 | No |
azureTableRowKeyName | 指定其值用來作為資料列索引鍵的資料行名稱。 如果未指定,則會針對每個資料列使用 GUID。 | No |
azureTableInsertType | 將資料插入 Azure 資料表的模式。 此屬性可控制針對輸出資料表中具有相符分割區和資料列索引鍵的現有資料列,是要取代還是合併其值。 允許的值為 merge (預設值) 和 replace。 這個設定會在資料列層級套用,而不是在資料表層級套用。 這兩個選項都不會刪除輸出資料表中不存在於輸入的資料列。 若要了解合併和取代設定的運作方式,請參閱插入或合併實體和插入或取代實體。 |
No |
writeBatchSize | 在達到 WriteBatchSize 或 writeBatchTimeout 時將資料插入 Azure 資料表中。 允許的值為整數 (資料列數目)。 |
否 (預設值為 10000) |
writeBatchTimeout | 在達到 WriteBatchSize 或 writeBatchTimeout 時將資料插入 Azure 資料表中。 允許的值為時間範圍。 範例是 "00:20:00" (20 分鐘)。 |
否 (預設值為 90 秒,儲存體用戶端的預設逾時) |
maxConcurrentConnections | 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。 | 否 |
範例:
"activities":[
{
"name": "CopyToAzureTable",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Azure Table output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "AzureTableSink",
"azureTablePartitionKeyName": "<column name>",
"azureTableRowKeyName": "<column name>"
}
}
}
]
azureTablePartitionKeyName
您必須先使用 "translator" 屬性將來源資料行對應至目的地資料行,才能使用目的地資料行作為 azureTablePartitionKeyName。
在下列範例中,來源資料行 DivisionID 會對應至目的地資料行 DivisionID:
"translator": {
"type": "TabularTranslator",
"columnMappings": "DivisionID: DivisionID, FirstName: FirstName, LastName: LastName"
}
"DivisionID" 會指定為分割區索引鍵。
"sink": {
"type": "AzureTableSink",
"azureTablePartitionKeyName": "DivisionID"
}
Azure 資料表的資料類型對應
從「Azure 資料表」複製資料或將資料複製到該處時,可使用下列對應,從「Azure 資料表」資料類型對應至服務內部使用的過渡期資料類型。 若要了解複製活動如何將來源結構描述和資料類型對應至接收,請參閱結構描述和資料類型對應。
將資料移入及移出 Azure 資料表時,從 Azure 資料表 OData 類型到 .NET 類型的對應會使用下列 Azure 資料表定義的對應,反向對應亦適用。
Azure 資料表資料類型 | 過渡期服務資料類型 | 詳細資料 |
---|---|---|
Edm.Binary | byte[] | 上限為 64 KB 的位元組陣列。 |
Edm.Boolean | bool | 布林值。 |
Edm.DateTime | Datetime | 以國際標準時間 (UTC) 表示的 64 位元值。 支援的 DateTime 範圍從西元 1601 年 1 月 1 日午夜開始。(C.E.), UTC. 此範圍結束於 9999 年 12 月 31 日。 |
Edm.Double | double | 64 位元的浮點值。 |
Edm.Guid | GUID | 128 位元的全域唯一識別碼。 |
Edm.Int32 | Int32 | 32 位元整數。 |
Edm.Int64 | Int64 | 64 位元的整數。 |
Edm.String | String | UTF 16 編碼值。 字串值最大可達 64 KB。 |
查閱活動屬性
若要了解屬性的詳細資料,請參閱查閱活動。
相關內容
如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區。