如何创建从OData到Azure DocumentDB的定期数据拷贝

如何创建从OData到Azure DocumentDB的定期数据拷贝,azure,azure-cosmosdb,azure-data-factory,Azure,Azure Cosmosdb,Azure Data Factory,我试图每天将OData查询返回的所有数据定期复制到documentDB集合中 使用复制向导可以很好地进行复制,这对于简单任务来说是一个非常好的选择。谢谢 但对我不起作用的是:副本每次只添加数据,我无法通过documentDB接收器“预删除”集合中的数据(与SQL接收器相比,SQL接收器具有sqlWriterCleanupScript,我可以将其设置为类似于“表”中的delete*) 我知道我可以创建Azure批处理并执行我需要的操作,但在这一点上,我不确定是否最好执行一个函数并放弃Azure数据

我试图每天将OData查询返回的所有数据定期复制到documentDB集合中

使用复制向导可以很好地进行复制,这对于简单任务来说是一个非常好的选择。谢谢

但对我不起作用的是:副本每次只添加数据,我无法通过documentDB接收器“预删除”集合中的数据(与SQL接收器相比,SQL接收器具有sqlWriterCleanupScript,我可以将其设置为类似于“表”中的delete*)

我知道我可以创建Azure批处理并执行我需要的操作,但在这一点上,我不确定是否最好执行一个函数并放弃Azure数据工厂(ADF)来执行此移动。我使用ADF在prem SQL上进行复制,因为它有编写器清理脚本

在这一点上,我只想使用DocumentDB,但鉴于我的数据工作方式,我看不到一种方法可以做到这一点

以下是我的管道:

{
    "name": "R-------ProjectToDocDB",
    "properties": {
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "RelationalSource",
                        "query": " "
                    },
                    "sink": {
                        "type": "DocumentDbCollectionSink",
                        "nestingSeparator": ".",
                        "writeBatchSize": 0,
                        "writeBatchTimeout": "00:00:00"
/// this is where a cleanup script would be great.
                    },
                    "translator": {
                        "type": "TabularTranslator",
                        "columnMappings": "ProjectId:ProjectId,.....:CostClassification"
                    }
                },
                "inputs": [
                    {
                        "name": "InputDataset-shc"
                    }
                ],
                "outputs": [
                    {
                        "name": "OutputDataset-shc"
                    }
                ],
                "policy": {
                    "timeout": "1.00:00:00",
                    "concurrency": 1,
                    "executionPriorityOrder": "NewestFirst",
                    "style": "StartOfInterval",
                    "retry": 3,
                    "longRetry": 0,
                    "longRetryInterval": "00:00:00"
                },
                "scheduler": {
                    "frequency": "Day",
                    "interval": 1
                },
                "name": "Activity-0-_Custom query_->---Project"
            }
        ],
        "start": "2017-04-26T20:13:27.683Z",
        "end": "2099-12-31T05:00:00Z",
        "isPaused": false,
        "hubName": "r-----datafactory01_hub",
        "pipelineMode": "Scheduled"
    }
}

也许管道中有一个更新在SQL输出和DocumentDB之间创建奇偶校验。您可以使用一个运行在计时器触发器上的逻辑应用程序

Azure Data Factory今天不支持DocDB的清理脚本。这是我们积压的东西。如果您能为E2E场景多描述一点,可以帮助我们确定优先级。例如,为什么附加到同一集合不起作用?这是因为无法在每次运行后识别增量记录吗?对于清理要求,将始终是删除*或它可能是基于时间戳等。谢谢。在支持清理脚本之前,自定义活动是现在解决问题的唯一方法,对不起

在我的数据管道中已经有几个“希望”调度的实例。我知道我可以在计时器上使用逻辑应用程序或函数,但我们在这里寻找的是一个可预测的管道,它不会要求多件事情“碰巧工作”。谢谢。要回答有关该场景的问题,请考虑与复制到SQL DB的场景相同的场景,并尝试与之相关。SQL db output允许一个清理脚本,它标识一些宏,如时间窗口。JSON有SQL清理脚本,我的具体要求是今天从“表”中删除*,但正如您所提到的,它可能在将来基于windows的时间。我的输入数据没有时间戳,所以我只能做有限的事情。我希望这有帮助