我有类似的查询
SELECT
*
INTO [documentdb]
FROM
[iothub]
TIMESTAMP BY eventenqueuedutctime
我需要使用*,因为数据是动态的并且没有特定的架构。问题是在此查询中,Iothub系统信息数据已写入documentdb。有什么办法可以排除Iothub系统信息数据?
谢谢。
答案 0 :(得分:1)
当前无法实现,但不久以后在Job Compatibility Level 1.2中将可以实现。目前,一种解决方法是您可以在Cosmos DB中创建创建后触发器,以从文档中删除此属性。
答案 1 :(得分:1)
正如@chetangm在回答中所说,到目前为止,ASA中尚不支持这种过滤机制。是的,您可以在cosmos db中使用npm start
,但是需要在sdk代码或rest api中触发它。它不会自动触发。
我为您提供了另一种使用Azure Function Cosmos DB Triggered的变通方法。在Azure Cosmos DB中添加或更改数据时可以执行该变通方法。您只需要删除功能代码中不需要的字段即可。
希望它对您有帮助。
答案 2 :(得分:0)
为回答您的问题,Azure流分析服务没有内置支持,无法从动态数据(iothub信息)中排除列。但是,我们可以通过使用UDF来实现。这是more info on UDF。
UDF可以帮助我们从输入数据中删除该列,并向我们返回更新后的json。
基本上可以通过两个步骤来实现:
创建JavaScript UDF。
将以下代码复制粘贴到函数定义中。
function main(input) {
delete input['IoTHub'];
return input;
}
点击保存
更新查询
进入查询模式并复制并粘贴以下查询:
WITH NewInput AS
(
SELECT
udf.removeiothubinfo(iothub) AS UpdatedJson
FROM
[iothub]
)
SELECT
UpdatedJson.*
INTO
[documentdb]
FROM
NewInput
点击保存
我建议您在运行作业之前通过上载包含json相似结构的示例文件来测试查询。
此外,即使在作业兼容性级别1.2中,也没有其他功能可以实现此目的。签出for more info。