我正在尝试通过 python 访问 Azure 表存储。
按照这里的旧演练:https : //docs.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-python#install-the-azure-storage-sdk-for- Python
但是它专门为Azure 表引用的 Python SDK ( https://github.com/Azure/azure-storage-python ) 已被移动/弃用,以支持 Azure Cosmos DB SDK。
在弃用说明中,他们说要使用这个 SDK:https : //github.com/Azure/azure-cosmosdb-python
在该 SDK 的文档中,他们将您推荐给https://azure.microsoft.com/en-us/develop/python/
在该页面上的表存储和链接中,它会将您引回到第一个链接 (!!)
============
1) 我想要做的就是使用 Python SDK查询传统的Azure 表存储(不是 CosmosDB)
2) 理想情况下,Python SDK 还包括 Azure 表的加密/解密功能。
我错过了什么/那个python SDK是否仍然存在于任何地方?
注意: 我看到https://github.com/Azure/azure-cosmosdb-python/tree/master/azure-cosmosdb-table 但这个 SDK 似乎需要 CosmosDB 部署——它无法连接到传统的 AzureTables。我的理解不正确吗?
谢谢你的尽心帮助。
我正在进行一些研发以将产品目录移至 CosmosDB。
用最简单的术语来说,产品文档将具有:
制造商将登录该系统,并且只能查询他们自己的数据,因此ManufacturerId = SINGLE_VALUE每次查询都会有一个过滤器。
在查看 cosmos 文档时,re:选择正确的分区策略,似乎有 2 个要点。- 选择具有高基数的分区键 - 选择可以均匀分布数据的分区键。
在我上面的场景中,选择产品 ID 作为 PartitionKey 会非常极端……每个逻辑分区 1 个文档。另一方面,选择 Manufactuer 也不会很好,因为这不会导致均匀分布(有些制造商有 10 个产品,其他制造商有 100,000 个)
确保均匀分布的一种方法是采用 GUID 的前 4 个字符并将其用作 PartitionKey。(所以最多 4096 个分区)。根据我现有的数据集,这确实会导致数据的均匀分布。但我想知道这样做有什么缺点。
仅使用整个 productId 作为 PartitionKey(每个分区 1 个文档)是否有任何缺点,因为它们似乎表明对于存储用户配置文件的系统来说这是一种有效的方法。这种方法是否对在同一搜索中搜索多个产品有影响。
我正在寻找 MySQL now() 的等效项。任何格式都可以。
我正在 .Net 中为 Cosmos DB 创建一个存储库,为了保持 DRY 并避免用 装饰每个类属性[JsonProperty(PropertyName = "thePropertyName")],我用 .Net 装饰了我的类 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]。
CreateDocumentAsync(例如)使用属性的驼峰式大小写名称正确序列化 JSON 格式的 Cosmos DB 文档。到目前为止,一切都很好。
然而,我的问题是,当我通过 LINQ 查询 Cosmos DB 时,它生成的用于查询 COSMOS DB 的 SQL 不尊重[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]装饰类的属性,因此不会返回任何文档。这是因为 Cosmos DB 查询对于字段/属性名称区分大小写。例如,以下命令会产生不同的结果(请注意名称的大小写差异):
SELECT * FROM c WHERE c.name = "Health"
Run Code Online (Sandbox Code Playgroud)
与
SELECT * FROM c WHERE c.Name = "Health"
Run Code Online (Sandbox Code Playgroud)
我通过检查 生成的查询 SQL 确认了这一点CreateDocumentQuery,并寻找了可以允许我指示属性名称大小写的选项,但SqlQuerySpec没有成功。
所以,我的问题是:有谁知道如何在 Cosmos Db 中使用类定义的驼峰式大小写策略进行 LINQ 查询,而不必通过[JsonProperty(PropertyName = "thePropertyName")].
预先感谢大家的帮助。
有谁知道如何在名称中带有连字符的 CosmosDB 集合上使用 SQL 查询?例如
SELECT * FROM product-group where product-group.id = "3829503"
Run Code Online (Sandbox Code Playgroud)
我发现可以使用 [""] 语法访问属性,但还没有看到实际集合名称的任何解决方案。
当使用 API 创建集合时,我一直在尝试将文档插入到 Mongo API CosmosDB 中的分区集合中,我终于能够使用以下链接得到答案:
但这个解决方案却给我带来了更多问题。我的问题是,如果我尝试在 /genericKey 上创建分区键,则集合的创建工作正常,但是当我尝试插入时,出现错误“不包含分片键”
当我从 mongo 客户端或门户中创建它时,它工作得很好。我最终通过对我的集合运行“az cosmosdb collection show”意识到,在使用门户和 mongo 客户端创建的集合上,分区键路径实际上是“/'$v'genericKey/'$v'”,而在那些集合上我使用 CLI 创建的它只是“/genericKey”
所以我的解决方法是将完整的字符串“/'$v'genericKey/'$v'”放入我的CLI命令中,我的问题是开头和结尾的/'$v'的意义是什么?为什么我必须添加它?
我开发了简单的 Web 应用程序,因为我使用 cosmos 数据库将一些数据保存到其中。到目前为止一切正常。但是每当我尝试从 cosmos 数据库中按时间获取最新值时,\xe2\x80\x99s 需要一分钟多才能给出最新记录。
\n\n这是我为从 cosmos 数据库获取最新记录而编写的代码。
\n\n public static async Task<IEnumerable<IoTHubDataPoint>> GetItemsAsync()\n {\n IDocumentQuery<IoTHubDataPoint> query = client.CreateDocumentQuery<IoTHubDataPoint>(\n UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId), \n new FeedOptions { MaxItemCount = 1, EnableCrossPartitionQuery = true}).OrderByDescending(x=>x.Time).Take(1)\n .AsDocumentQuery();\n\n List<IoTHubDataPoint> results = new List<ServiceMaxIoTHubDataPoint>();\n while (query.HasMoreResults)\n {\n results.AddRange(await Task.Run(async () => await query.ExecuteNextAsync<IoTHubDataPoint>()) );\n }\n //return results.OrderByDescending(x => x.Time).Take(1).ToArray();\n return results;\n\n }\nRun Code Online (Sandbox Code Playgroud)\n\n这是 azure cosmos 数据库中可用的示例数据。
\n\n{\n"DeviceID": "IoT-1",\n"Time": "2017-11-02T14:46:06.7846161",\n"Temperature": 28.63403,\n"Pressure": "95089.47",\n"Altitude": "532.5873",\n"LightStatus": "Too Bright",\n"LightCDSValue": "193",\n"LightCDSVoltageValue": "0.943304",\n"EventProcessedUtcTime": "2017-11-02T14:46:40.3930989Z",\n"PartitionId": 0,\n"EventEnqueuedUtcTime": "2017-11-02T14:46:07.6Z",\n"IoTHub": {\n "MessageId": …Run Code Online (Sandbox Code Playgroud) 我在 Azure 中有一个 CosmosDB,我想授予用户访问权限来读取各种集合内的数据。
我尝试给他们“读者”角色,这让他们知道存在 CosmosDB,并且他们可以看到一些元数据。但他们无法访问其中的数据
我为他们分配了“Cosmos DB 帐户阅读器”,这取得了更好的结果。
但在我看来,“读者”角色应该取代“Cosmos DB 帐户读者”角色。或者我在这里走错了路?我相信“读者”角色授予*所有读取权限。
编辑:使用Portal.azure.com
上内置的“数据资源管理器”似乎没有问题。
真正的问题是使用cosmos.azure.com和使用 ActiveDirectory 登录,没有让用户看到任何具有“Cosmos DB 帐户读取者”角色的内容。可能需要用户具有写入权限。
如果我的请求超过 RUS 的最大数量,要使用 Azure Cosmos API 客户端进行重试,我需要自己实施重试策略(例如使用 Polly)。
如果我将 EF Core 提供程序与 Cosmos DB 一起使用,EF 提供程序实现中是否会包含一些重试?如何配置呢?
我正在尝试使用部分文档更新(补丁 API)来更新文档中的子对象,但遇到了麻烦。我发现这个堆栈溢出问题与我的问题相同。但是,接受的答案通过按索引引用数组中的对象来解决问题。我不相信我有能力做到这一点。因此,要使用与其他问题相同的示例文档......
{
"id": "SalesOrder2",
"ponumber": "PO15428132599",
"OrderDate": "2005-07-01T00:00:00",
"DueDate": "2005-07-13T00:00:00",
"ShippedDate": "2005-07-08T00:00:00",
"AccountNumber": "Account2",
"SubTotal": 6107.082,
"TaxAmt": 586.1203,
"Freight": 183.1626,
"TotalDue": 4893.3929,
"DiscountAmt": 1982.872,
"Items": [
{
"Id": 1,
"OrderQty": 3,
"ProductCode": "A-123",
"ProductName": "Product 1",
"CurrencySymbol": "$",
"CurrencyCode": "USD",
"UnitPrice": 17.1,
"LineTotal": 5.7
},
{
"Id": 2,
"OrderQty": 2,
"ProductCode": "A-456",
"ProductName": "Product 2",
"CurrencySymbol": "$",
"CurrencyCode": "USD",
"UnitPrice": 10,
"LineTotal": 20
}
],
"_rid": "BsMkAMc43s4CAAAAAAAAAA==",
"_self": "dbs/BsMkAA==/colls/BsMkAMc43s4=/docs/BsMkAMc43s4CAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-e136-0dbec04601d7\"",
"_attachments": "attachments/",
"_ts": 1637760030
}
Run Code Online (Sandbox Code Playgroud)
我无法保证 …