2017-08-25 59 views
0

我使用Azure工具AzCopy從表存儲導出數據,修改導出的數據,然後將數據導入到另一個表存儲表中。我使用下面的命令導出:AzCopy忽略或重新創建校驗和

AzCopy /Source:https://MYSERVER/MYTABLE/ /SourceKey:SOURCEKEY /Dest:C:\migration /Manifest:MYTABLE 

由於無法爲出口增加一個過濾器,我過濾後數據導出,刪除JSON數據是必要的。然後我用下面的命令將這些數據導入到另一臺服務器:

AzCopy/Source:C:\export /Dest:https://MYOTHERSERVER/MYTABLE /DestType:Table /DestKey:DESTKEY /Manifest:MYTABLE EntityOperation:InsertOrReplace 

這些操作正常工作時我不操縱JSON文件。但是,當我這樣做時,文件的內容當然會發生更改,並且清單文件中的校驗和不再匹配。當我去做導入時,我收到一個「文件已損壞」的消息。

這裏是清單文件看起來像:

"Version":2,"PayloadFormat":"Json","Checksum":5500917691400439101,"AccountName":"SERVER","TableName":"MYTABLE","Timestamp":"2017-08-25T14:10:53.7489755Z","SplitSize":0,"TotalDataFiles":1} 

我怎樣才能得到AzCopy要麼無法驗證校驗或更換校驗?

我試過下面的代碼重新校驗,但是當我在原來的JSON做的,它不匹配:

var md5Hash = getFileHash(file); 
var checksum = convertHash(md5Hash); 

private byte[] getFileHash(string filePath) 
{ 
    using (var md5 = MD5.Create()) 
    { 
     using (var stream = File.OpenRead(filePath)) 
     { 
      return md5.ComputeHash(stream); 
     } 
    } 
} 

private string convertHash(byte[] data) 
{ 
    var algorithm = MD5.Create(); 
    var result = BitConverter.ToUInt64(data,0); 
    return result.ToString(); 
} 

這將返回4500814390503865422

回答

1

AzCopy目前不支持在表導入期間跳過校驗和驗證。順便說一句,清單文件中記錄的校驗和實際上是CRC而不是MD5,它是通過彙總所有導出文件的CRC而不是單個清單文件來計算的。

+0

鑑於這是如何創建校驗和,是否可以重新創建? – im1dermike

+0

我很抱歉地說現在還沒有一種簡單的方法可以這麼做。 –

+0

但是,如果你只有一個導出的數據文件(這正是你的情況,每個清單文件內容由你共享),新的Crc64校驗和可以很容易地通過一些散列工具來計算(例如DP Hash https://www.portablefreeware.com /?ID = 1757)。之後,您可以用新的Crc64校驗和替換數據文件名稱和清單文件內容。 –