尝试从数据Lake gen1复制到Blob存储时,数据工厂给我这个错误:
"message": "Failure happened on 'Sink' side. ErrorCode=UserErrorFailedFileOperation,
'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Upload file failed at
path myblobcontainer\\file_that_im_tryin_to_copy.xml.,Source=Microsoft.DataTransfer.Common,''Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Failed to read a 'AzureDataLakeStore' file. File path: 'SourceFolderInDataLake/2019/09/26/SomeOtherFile.usql'.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Net.WebException,Message=The remote server returned an error: (403) Forbidden.
我有一个U-SQL Script
活动将执行1-Patient.usql
:
下一个活动是copy data
步骤:
来源
下沉
我已经使用this tutorial配置了角色/权限。
我可以通过转到Data Explorer --> Access
来解决此问题:
然后我点击Advanced
:
点击Apply to all children
之后,复制就可以了!
请注意,在Copy Data
活动的之前,数据工厂正在usql
内执行gen1
脚本。该脚本存储在gen1中,并在数据湖内部以及文件夹中生成文件。 运行此脚本绝不会出现任何权限问题。
我在做什么错了?
答案 0 :(得分:1)
我可以重现您的问题。实际上,Apply folder permissions to sub-folders
不是必需的。该问题可能是由数据湖gen1的访问控制引起的,该问题的关键是文件的上传顺序和设置的权限。
您可以先检查Access control in Azure Data Lake Storage Gen1,然后参考下面基于我的测试的信息。
我想您将如下所示的权限添加到根/
中。
如果在设置权限之前文件已经存在,则该文件将受操作影响,即将设置对文件的访问权限,您可以访问文件。
但是,如果您在设置权限后上传文件或创建新文件夹,则该文件夹和文件将无权访问,您将无法访问它们。您可以选择文件,单击Access
直接检查。
在设置了上面的权限之后,如果您设置A default permission entry
,它将不会影响现有的文件夹和文件,但是如果您创建新的文件夹和文件,则将获得所有这些文件的访问权限。即旧文件夹和文件仍然无法访问,新文件夹和文件将具有访问权限。如果要访问旧的访问权限,只需再次添加如屏幕快照之类的权限,Apply folder permissions to sub-folders
就是相同的逻辑。
因此,总而言之,如果您想让服务主体/ MSI访问数据湖中的所有文件,则可以添加第三个选项An access permission entry and a default permission entry
,那么您将能够访问现有和新文件夹/文件。