【发布时间】:2018-08-14 15:29:35
【问题描述】:
我不熟悉使用 Azure Data Lake Store 和 Azure Analytics。
问题
有没有办法获取存储在 Azure Datalake 存储中的文件的哈希值?这样我就可以分析数据是否发生了变化
我有一堆以类似结构存储的输入文件
-
/输入/
- Client-01/
- 产品-A/
- Input01.csv
-
/输入/
- Client-02/
- 产品-A/
- Input01.csv
- Input02.csv
我尝试了什么
第 1 部分
我能够在本地获取 Get-FileHash,但找不到任何用于 ADLS 的内容或任何与此类似的远程内容
Get-FileHash
"Input/Client-01/*.csv" -Algorithm MD5 | ConvertTo-Json >> statistics.json
生成类似的哈希
[
{
"Algorithm": "MD5",
"Hash": "BA961B4B72DC602C2D2CA2B13EFC09DB",
"Path": "Input/Client-01/Input01.csv"
},
{
"Algorithm": "MD5",
"Hash": "B0528707D4E689EEEFE1AA1811063014",
"Path": "Input/Client-02/Input01.csv"
},
{
"Algorithm": "MD5",
"Hash": "60D71494355E7EE941782F1BE2969F3C",
"Path": "Input/Client-02/Input02.csv"
}
]
第02部分
我能够使用
获得更多详细信息Get-AzureRmDataLakeStoreChildItem -Account
$datalakeStoreName -Path
$path | ConvertTo-Json
导致
{
"LastWriteTime": "\/Date(1534185132238)\/",
"LastAccessTime": "\/Date(1534185132180)\/",
"Expiration": null,
"Name": "Input01.csv",
"Path": "/Input/Client-01/",
"AccessTime": 1534185132180,
"BlockSize": 268435456,
"ChildrenNum": null,
"ExpirationTime": null,
"Group": "e045d366-777b-4e7a-a01d-79dbf0e28a61",
"Length": 127,
"ModificationTime": 1534185132238,
"Owner": "3bb6c9c4-da61-4cc2-b6ef-f4739adafff5",
"PathSuffix": "Input01.csv",
"Permission": "770",
"Type": 0,
"AclBit": true
}
缺点:
- 没有散列:(
- 按计划运行它会涉及到数据工厂上的批处理服务(从技术上讲,这不是一个缺点,但对我来说,因为我还投资于批处理服务......)
第 3 部分:使用 ADLS nuget
ADLS nuget 支持少数端点。我专门查看了DirectoryEntry,但是该模型没有公开其他端点中可用的BlockSize :(
private static void PrintDirectoryEntry(DirectoryEntry entry)
{
Console.WriteLine($"Name: {entry.Name}");
Console.WriteLine($"FullName: {entry.FullName}");
Console.WriteLine($"Length: {entry.Length}");
Console.WriteLine($"Type: {entry.Type}");
Console.WriteLine($"User: {entry.User}");
Console.WriteLine($"Group: {entry.Group}");
Console.WriteLine($"Permission: {entry.Permission}");
Console.WriteLine($"Modified Time: {entry.LastModifiedTime}");
Console.WriteLine($"Last Accessed Time: {entry.LastAccessTime}");
Console.WriteLine();
}
第 4 部分:使用 webHDFS API(有些工作)
https://docs.microsoft.com/en-us/rest/api/datalakestore/webhdfs-filesystem-apis
我能够使用op=LISTSTATUSdocumentation link 获得FileStatuses,它同时具有blocksize 和length。所以这有点帮助
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 427
{
"FileStatuses":
{
"FileStatus":
[
{
"accessTime" : 1320171722771,
"blockSize" : 33554432,
"group" : "supergroup",
"length" : 24930,
"modificationTime": 1320171722771,
"owner" : "webuser",
"pathSuffix" : "a.patch",
"permission" : "644",
"replication" : 1,
"type" : "FILE"
},
{
"accessTime" : 0,
"blockSize" : 0,
"group" : "supergroup",
"length" : 0,
"modificationTime": 1320895981256,
"owner" : "username",
"pathSuffix" : "bar",
"permission" : "711",
"replication" : 0,
"type" : "DIRECTORY"
},
...
]
}
}
【问题讨论】:
标签: powershell azure-data-lake azure-data-factory-2