1

首先要将文件上传到 ADL,您需要:

  • 使用参数执行 put 请求?resource=file(这会在 ADL 上创建一个文件)
  • ?action=append&position=<N>使用参数将数据附加到文件中
  • 最后,您需要使用?action=flush&position=<FILE_SIZE>

我的问题是:

如果没有刷新(写入)数据,有没有办法告诉服务器数据应该存在多长时间。

由于您需要先创建一个文件才能将数据写入其中,因此可能存在未发生刷新的情况,并且您在数据湖中遇到了一个空文件。

我在Microsoft 文档中找不到任何关于此的内容。

任何信息,将不胜感激。

4

1 回答 1

0

更新 0219:

如果你只是调用了append api,而不调用了flush api,那么未提交的数据将在7 天内保存在 azure 中。

未提交的数据将在 7 天后自动删除,并且无法从您端删除。


原文:

Azure Datalake Storage Gen2 的 SDK 已准备就绪,您可以使用它来操作 ADLS Gen2 比使用 rest api 更容易。

如果您使用的是 .NET/c#,则有一个适用于 Azure Datalake Storage Gen2 的 SDK:Azure.Storage.Files.DataLake

下面是如何使用该SDK操作ADLS Gen2的官方文档,下面的c#代码用于ADLS Gen2的删除文件/上传文件:

        static void Main(string[] args)
        {
            string accountName = "xxx";
            string accountKey = "xxx";

            StorageSharedKeyCredential sharedKeyCredential =
        new StorageSharedKeyCredential(accountName, accountKey);

            string dfsUri = "https://" + accountName + ".dfs.core.windows.net";

            DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient
                (new Uri(dfsUri), sharedKeyCredential);

            DataLakeFileSystemClient fileSystemClient = dataLakeServiceClient.GetFileSystemClient("w22");
            DataLakeDirectoryClient directoryClient = fileSystemClient.GetDirectoryClient("t2");

            // use this line of code to delete a file
            //directoryClient.DeleteFile("22.txt");


            //use the code below to upload a file
            //DataLakeFileClient fileClient = directoryClient.CreateFile("22.txt");
            //FileStream fileStream = File.OpenRead("d:\\foo2.txt");

            //long fileSize = fileStream.Length;
            //fileClient.Append(fileStream, offset: 0);
            //fileClient.Flush(position: fileSize);

            Console.WriteLine("**completed**");
            Console.ReadLine();
        }

对于 Java,请参阅此文档

对于 Python,请参阅此文档

于 2020-02-14T02:40:11.943 回答