我正在尝试使用更改跟踪将数据从 SQL Server 增量复制到 Azure SQL 数据库。我遵循了Microsoft Azure 文档上的教程,但是在为大量表实施此教程时遇到了一些问题。
在复制活动的源部分,我可以使用一个查询,该查询为我提供自上次更改跟踪版本以来更新、插入或删除的所有记录的更改表。这张桌子看起来像
PersonID Age Name SYS_CHANGE_OPERATION
---------------------------------------------
1 12 John U
2 15 James U
3 NULL NULL D
4 25 Jane I
Run Code Online (Sandbox Code Playgroud)
PersonID 是该表的主键。
问题是复制活动只能将数据附加到 Azure SQL 数据库,因此当记录更新时,由于主键重复,它会给出错误。我可以通过让复制活动使用将数据合并到 Azure SQL 数据库上的表的存储过程来处理这个问题,但问题是我有大量的表。
我希望预复制脚本删除 Azure SQL 数据库上已删除和更新的记录,但我不知道如何执行此操作。我是否需要为要复制的每个表创建单独的存储过程和相应的表类型,或者有没有办法让预复制脚本根据更改跟踪表删除记录?
sql-server azure-data-factory azure-sql-database azure-data-factory-2
我正在使用复制数据工具使用 Azure 数据工厂将 CSV 文件从 Azure blob 处理到 Azure Data Lake。我正在关注此链接:https : //docs.microsoft.com/en-us/azure/data-factory/quickstart-create-data-factory-copy-data-tool
Fron Copy 数据工具我的源配置和测试连接成功。但是,目标连接(即数据湖)正在产生问题。
我收到错误消息:确保在 Azure Data Lake Store 帐户中正确配置了 ACL 和防火墙规则。
我按照此链接进行 Fairwall 设置:https ://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-secure-data (设置数据访问的 IP 地址范围)
启用公平墙并允许访问 Azure 服务“ON”
尽管如此,我还是遇到了同样的错误。任何人都可以请建议。如何解决这个问题?
对于上下文,我目前有一个 Data Factory v2 管道,其中有一个ForEach Activity调用Copy Activity。该复制活动只是从FTP服务器到Blob存储容器复制数据。
这是管道 json 文件:
{
"name": "pipeline1",
"properties": {
"activities": [
{
"name": "ForEach1",
"type": "ForEach",
"typeProperties": {
"items": {
"value": "@pipeline().parameters.InputParams",
"type": "Expression"
},
"isSequential": true,
"activities": [
{
"name": "Copy1",
"type": "Copy",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false
},
"typeProperties": {
"source": {
"type": "FileSystemSource",
"recursive": true
},
"sink": {
"type": "BlobSink"
},
"enableStaging": false,
"cloudDataMovementUnits": 0
},
"inputs": [
{
"referenceName": …Run Code Online (Sandbox Code Playgroud) 每当我在 ADFv2 中执行存储过程时,它都会给我一个输出
{
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (Australia Southeast)",
"executionDuration": 34
}
Run Code Online (Sandbox Code Playgroud)
即使我在程序中设置了 2 个变量作为输出。有没有办法在ADFv2中映射存储过程的输出?到目前为止,我可以映射所有其他活动的输出,但不能映射存储过程的输出。
我正在设计一个 ADF 管道,它将行从 SQL 表复制到 Azure Data Lake 中的文件夹。之后应该删除 SQL 中的行。但是对于此删除操作,我想知道复制的行数是否与我在管道开头选择的行数相同。有没有办法获取复制操作的行数并在另一个操作中使用它(如查找)
编辑后续问题:小波的回答是可以的。但是我有一个后续问题。在复制活动之后,我使用以下表达式放置了一个 If 条件:
@activity('LookUpActivity').output.firstRow.RecordsRead == @{activity('copyActivity').output.rowsCopied
Run Code Online (Sandbox Code Playgroud)
但后来我得到了错误:@activity('LookUpActivity').output.firstRow.RecordsRead == @{activity('copyActivity').output.rowsCopied
是否可以比较两个活动的输出参数以查看是否为 True?
额外编辑:我刚刚在这段代码中发现了一个错误。我忘记了代码开头的“{”。但是代码还是错误的。要比较早期活动的两个输出,代码必须是:
@equals(activity('LookUpActivity').output.firstRow.RecordsRead,activity('copyActivity').output.rowsCopied)
Run Code Online (Sandbox Code Playgroud) 我有一个 azure blob 容器,其中每 6 小时放置一些带有数据的 json 文件,我想使用 Azure 数据工厂将其复制到 Azure SQL DB。文件的文件模式是这样的:“customer_year_month_day_hour_min_sec.json.data.json”
blob 容器也有其他 json 数据文件,因此我对数据集中的文件进行了过滤。
第一个问题是如何在 blob 数据集上设置文件路径以仅查找我想要的 json 文件?我尝试使用通配符 *.data.json 但这不起作用。我开始工作的唯一文件名通配符是 *.json
第二个问题是如何仅将数据从位于 blob 存储中的新文件(具有特定文件模式)复制到 Azure SQL?我无法控制将数据放入 blob 容器的过程,也无法将文件移动到另一个位置,这使得操作变得更加困难。
请帮忙。
我有一个PowerShell脚本,它为每 1000 条记录将一个复杂的 CSV 文件拆分为一个较小的 CSV 文件。这是代码:
$i=0;Get-Content C:\Users\dell\Desktop\Powershell\Input\bigsizeFile.csv -ReadCount 1000 | %{$i++; $_ | Out-File C:\Users\dell\Desktop\Powershell\Output\file$i.csv
}
Run Code Online (Sandbox Code Playgroud)
现在我想在 Azure PowerShell 中使用这个脚本,我想从 Azure 数据工厂运行它。有人可以帮忙解决这个问题。
powershell azure-powershell azure-data-factory azure-data-lake
我想创建一个 ADF v2 管道来调用 Azure SQL 数据库中的存储过程。该存储过程具有输入参数,并将返回多个结果集(大约 3 个)。我们需要将其提取出来。我们正在尝试加载到 4 个不同文件的 Blob 存储或加载到表。
有没有办法在管道中执行?
在 SSIS 中,可以选择使用脚本组件和提取。https://www.timmitchell.net/post/2015/04/27/the-ssis-object-variable-and-multiple-result-sets/
在数据工厂中寻找建议。
我正在尝试使用 Azure 数据工厂从 API 读取数据。首先,我需要调用一个登录方法,该方法提供 XML 响应。我需要从该 XML 中获取一个元素并将其放入下一个 API 调用中以获取我需要的数据。
目前,我正在使用复制数据工具调用登录方法并将 XML 保存到 blob 存储。现在如何将该 XML 的元素读取到变量中?
如果有更好的方法,请告知,但我仍然想知道如何将 XML 元素读入变量。
编辑:这是返回的 XML。我需要捕获 SessionID。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<DoLoginResponse xmlns="http://foo.bar">
<DoLoginResult>
<OperationStatus>true</OperationStatus>
<StatusMessage />
<SecurityProfile>
<User></User>
<Session>
<SessionId>d2cf6ea6-120f-4bff-a5d1-adad9063d9d2</SessionId>
</Session>
<IsFirstLogon>true</IsFirstLogon>
<IsSystemOwner>false</IsSystemOwner>
</SecurityProfile>
</DoLoginResult>
</DoLoginResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud) 有人可以详细说明何时在 azure datafactory 中使用 Polybase 与批量插入吗?这两种复制方法有什么区别?