如何限制 AzCopy 从 azure table 存储复制的实体数量?

How to limit number of entities copied from azure table storage by AzCopy?

我正在尝试将 azure table 存储实体示例复制到我的本地文件。源非常大,有数百万条记录。我如何限制数据传输并只获取前 1K 个实体?

直接的命令将复制所有这些 (AzCopy 7.3.1):

AzCopy.exe /Source: ...table.core.windows.net/profile /SourceKey:..somekey /Dest:C:\Temp /Manifest:qa-profile /SplitSize:128

根据我的经验,我认为您无法仅通过 AzCopy 从 Azure Table 存储中复制限制数量的实体。

不过,您可以尝试使用 PowerShell 和 Azure 模块来完成。这是我的步骤和示例代码,您可以参考。

  1. 以管理员身份运行 PowerShell通过命令Install-Module -Name Az -AllowClobber -Scope CurrentUser安装Azure Module,具体可参考官方文档Install the Azure PowerShell module

  2. 按照官方教程 Perform Azure Table storage operations with Azure PowerShellSign in to Azure 部分,使用您在 PowerShell 上的帐户登录 Azure。

  3. 这是我的示例代码,您可以在完成第 2 步后尝试 运行 在您的本地计算机上。

    $storageAccountName = "<your storage account name>"
    $resourceGroup = "<the resource group name of your storage>"
    $location = "<the location of your storage>"
    $storageAccount = Get-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroup
    $ctx = $storageAccount.Context
    
    $tableName = "<your table name>"
    $cloudTable = (Get-AzStorageTable –Name $tableName –Context $ctx).CloudTable
    $i = 0 ; $n = 1000 ; Get-AzTableRow -table $cloudTable | ForEach-Object {ConvertTo-Json $_; $i++; If($i -eq $n) {break}} > results-1000.json
    

结果内容如下

{
    "ProductName":  "AAAAAAA",
    "PartitionKey":  "A",
    "RowKey":  "1",
    "TableTimestamp":  "\/Date(1542619135228)\/"
}
{
    "ProductName":  "BBBBBBB",
    "PartitionKey":  "B",
    "RowKey":  "2",
    "TableTimestamp":  "\/Date(1542619145997)\/"
}

希望对您有所帮助。