azure 使用powershell获取Cosmosdb容器集合项目

fcipmucu  于 2023-01-27  发布在  Shell
关注(0)|答案(3)|浏览(140)

团队,我已经创建了新的CosmosDB帐户在Azure门户网站与容器包含收集项目列表。我能够访问容器的详细信息在电源 shell 脚本。

如何使用分区键列出收集项或显示特定收集项(使用Power shell脚本)
Power shell脚本:

Get-AzResource -ResourceType "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers" -ApiVersion "2020-03-01" -ResourceGroupName "testRG" -Name "cosmosaccount1/database1/containercollection1"
bvn4nwqk

bvn4nwqk1#

你需要使用类似第三方模块的东西。Azure资源管理器不支持,因此你需要直接与Cosmos DB对话。
https://github.com/PlagueHO/CosmosDB

2nbm6dog

2nbm6dog2#

Cosmos DB repo有一组使用Powershell的示例:https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage/PowerShellRestApi
特别是阅读项目:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos.Samples/Usage/PowerShellRestApi/PowerShellScripts/ReadItem.ps1
它们都使用REST API来执行REST请求,在本例中,这是一个经过验证的GEThttps://{databaseaccount}.documents.azure.com/dbs/{db-id}/colls/{coll-id}/docs/{id}(其中 databaseaccount 是您的帐户名,db-id 是您的数据库ID,coll-id 是您的集合/容器ID,id 是您的文档ID)。

5hcedyr0

5hcedyr03#

正如@4c74356b41所指出的,您可以使用CosmosDB模块,它现在是official Az module的一部分。

Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force

您可以使用Get-Commands查看可用命令:

Import-Module Az
Import-Module -Name CosmosDB
Get-Command -Module CosmosDB
    • 获取集合中的所有项目**

为了获取容器中的所有条目,我们使用 * Get-CosmosDbDocument * 命令:

$subscription = "SubscriptionName"
$resourceGroupName = "ResourceGroupName"
$accountName = "AzureCosmosDBAccount"
$databaseName = "DatabaseName"
$cosmosContainer = "TargetCosmosDBContainer"

Set-AzContext $subscription
$backOffPolicy = New-CosmosDbBackoffPolicy -MaxRetries 5 -Method Additive -Delay 1000
$cosmosDbContext = New-CosmosDbContext -Account $accountName -Database
$databaseName -ResourceGroup $resourceGroupName -BackoffPolicy $backOffPolicy

$documentsPerRequest = 100
$continuationToken = $null
$documents = $null
do {
    $responseHeader = $null
    $getCosmosDbDocumentParameters = @{
        Context = $cosmosDbContext
        CollectionId = $cosmosContainer
        MaxItemCount = $documentsPerRequest
        ResponseHeader = ([ref] $responseHeader)
    }

    if ($continuationToken) {
        $getCosmosDbDocumentParameters.ContinuationToken = $continuationToken
    }

    $documents += Get-CosmosDbDocument @getCosmosDbDocumentParameters
    $continuationToken = Get-CosmosDbContinuationToken -ResponseHeader $responseHeader
} while (-not [System.String]::IsNullOrEmpty($continuationToken))

注:对于可以使用此命令检索的文档数量没有明显的限制,但显然此命令具有API限制,即4MB(如此处所述)。此处的值($documentsPerRequest = 100)可能太大或太小,这取决于每个文档的大小。但我在这里提了一下以防有人需要。

    • 列出特定收集项**

要从容器中获取特定条目或条目组,我们使用相同的 * Get-CosmosDbDocument * 命令,但方式略有不同:

$query = "SELECT * FROM c WHERE c.property = 'propertyValue'"
$documents = Get-CosmosDbDocument -Context $cosmosDbContext -CollectionId $cosmosContainer -Query $query -QueryEnableCrossPartition $true

注意:为了简单起见,我没有讨论获取延续令牌的过程,但是如果查询返回的结果大于4 MB,那么我们将只接收响应的第一部分。为了确保不会发生这种情况,我们应该在$getCosmosDbDocumentParameters字典中添加"Query"和"QueryEnableCrossPartition"。

相关问题