我们在 Azure Cosmos DB 中有一个 NoSQL 数据库。我们还有一个 Synapse 连接器来将此数据库与 PowerBi 一起使用。
这允许我们使用简单的 SQL 脚本来获取 PowerBi 中的数据。比如:
SELECT logs.Field1, logs.Field2 from logs
数据大多是结构化的,但我们最近向 cosmos 中的新文档添加了一个新字段(例如 Field3)。
但是现在,如果我们运行这个:
SELECT logs.Field1, logs.Field2, logs.Field3 from logs
我们收到一条错误,指出列名称无效。
我们应该如何使用Power Bi中的SQL脚本来获取这个字段?当文档不包含这个新字段时,我们需要一个 NULL 值。
在cosmos中,我们有SQL语言内置的IS_DEFINED函数,我们可以通过它来使用SQL查询非结构化数据。但这在 PowerBi 查询编辑器中不起作用(我相信这是 Synapse 问题)。错误显示:IS_DEFINED 不是内置函数。
Azure synapse 分析连接器仅支持 t-sql。
isdefined()
不是有效的 t-sql 函数。它是 azure cosmos dB NoSQL 函数。这就是错误的原因,IS_DEFINED is not a built in function.
第一个文档定义基本架构,并且属性在所有其他剩余文档中必须始终具有相同的类型和相同的列。当任何字段的数据类型与所有其他文档不同时,这些列的值将为空。同样,当其他文档的列数多于第一个文档时,这些附加列将被截断。当其他文档(第一个文档除外)中的列较少时,这些文档中缺少的列将显示为空。
查看此Microsoft 文档了解更多详细信息。