class_docstr: Integration with Azure Data Lake.
  
  AzureDataLakeHook communicates via a REST API compatible with WebHDFS. Make
  sure that a Airflow connection of type ``azure_data_lake`` exists.
  Authorization can be done by supplying a *login* (=Client ID), *password*
  (=Client Secret), and extra fields *tenant* (Tenant) and *account_name*
  (Account Name). See connection ``azure_data_lake_default`` for an example.
  
  Client ID and secret should be in user and password parameters.
  Tenant and account name should be extra field as
  ``{"tenant": "<TENANT>", "account_name": "ACCOUNT_NAME"}``.
  
  :param azure_data_lake_conn_id: Reference to
      :ref:`Azure Data Lake connection<howto/connection:adl>`.
docstr: Download a file from Azure Blob Storage.
  
  :param local_path: local path. If downloading a single file, will write to this
      specific file, unless it is an existing directory, in which case a file is
      created within it. If downloading multiple files, this is the root
      directory to write within. Will create directories as required.
  :param remote_path: remote path/globstring to use to find remote files.
      Recursive glob patterns using `**` are not supported.
  :param nthreads: Number of threads to use. If None, uses the number of cores.
  :param overwrite: Whether to forcibly overwrite existing files/directories.
      If False and remote path is a directory, will quit regardless if any files
      would be overwritten or not. If True, only matching filenames are actually
      overwritten.
  :param buffersize: int [2**22]
      Number of bytes for internal buffer. This block cannot be bigger than
      a chunk and cannot be smaller than a block.
  :param blocksize: int [2**22]
      Number of bytes for a block. Within each chunk, we write a smaller
      block for each API call. This block cannot be bigger than a chunk.
docstr_tok: ["Download","a","file","from","Azure","Blob","Storage",".",":","param","local_path",":","local","path",".","If","downloading","a","single","file",",","will","write","to","this","specific","file",",","unless","it","is","an","existing","directory",",","in","which","case","a","file","is","created","within","it",".","If","downloading","multiple","files",",","this","is","the","root","directory","to","write","within",".","Will","create","directories","as","required",".",":","param","remote_path",":","remote","path\/globstring","to","use","to","find","remote","files",".","Recursive","glob","patterns","using","`","*","*","`","are","not","supported",".",":","param","nthreads",":","Number","of","threads","to","use",".","If","None",",","uses","the","number","of","cores",".",":","param","overwrite",":","Whether","to","forcibly","overwrite","existing","files\/directories",".","If","False","and","remote","path","is","a","directory",",","will","quit","regardless","if","any","files","would","be","overwritten","or","not",".","If","True",",","only","matching","filenames","are","actually","overwritten",".",":","param","buffersize",":","int","[","2","*","*","22","]","Number","of","bytes","for","internal","buffer",".","This","block","can","not","be","bigger","than","a","chunk","and","can","not","be","smaller","than","a","block",".",":","param","blocksize",":","int","[","2","*","*","22","]","Number","of","bytes","for","a","block",".","Within","each","chunk",",","we","write","a","smaller","block","for","each","API","call",".","This","block","can","not","be","bigger","than","a","chunk","."]
code: def download_file(
      self,
      local_path: str,
      remote_path: str,
      nthreads: int = 64,
      overwrite: bool = True,
      buffersize: int = 4194304,
      blocksize: int = 4194304,
      **kwargs,
  ) -> None:
      """Download a file from Azure Blob Storage.
  
      :param local_path: local path. If downloading a single file, will write to this
          specific file, unless it is an existing directory, in which case a file is
          created within it. If downloading multiple files, this is the root
          directory to write within. Will create directories as required.
      :param remote_path: remote path/globstring to use to find remote files.
          Recursive glob patterns using `**` are not supported.
      :param nthreads: Number of threads to use. If None, uses the number of cores.
      :param overwrite: Whether to forcibly overwrite existing files/directories.
          If False and remote path is a directory, will quit regardless if any files
          would be overwritten or not. If True, only matching filenames are actually
          overwritten.
      :param buffersize: int [2**22]
          Number of bytes for internal buffer. This block cannot be bigger than
          a chunk and cannot be smaller than a block.
      :param blocksize: int [2**22]
          Number of bytes for a block. Within each chunk, we write a smaller
          block for each API call. This block cannot be bigger than a chunk.
      """
      multithread.ADLDownloader(
          self.get_conn(),
          lpath=local_path,
          rpath=remote_path,
          nthreads=nthreads,
          overwrite=overwrite,
          buffersize=buffersize,
          blocksize=blocksize,
          **kwargs,
      )
  
imports: from __future__ import annotations
  from functools import cached_property
  from typing import Any, Union
  from azure.core.exceptions import ResourceExistsError, ResourceNotFoundError
  from azure.datalake.store import core, lib, multithread
  from azure.identity import ClientSecretCredential
  from azure.storage.filedatalake import DataLakeDirectoryClient, DataLakeFileClient, DataLakeServiceClient, DirectoryProperties, FileSystemClient, FileSystemProperties
  from airflow.exceptions import AirflowException
  from airflow.hooks.base import BaseHook
  from airflow.providers.microsoft.azure.utils import AzureIdentityCredentialAdapter, add_managed_identity_connection_widgets, get_field
label_desc: Use image node_id 8 for calling the AzureDataLakeHook obj's underlying member method code with example usage: obj.download_file(local_path, remote_path, nthreads, overwrite, buffersize, blocksize) without return types