docstr: Return an AzureDatastore, rooted at the container level, no prefix.
  Key MUST be a fully qualified path. e.g. <container_name>/b/l/o/b/n/a/m/e
docstr_tok: ["Return","an","AzureDatastore",",","rooted","at","the","container","level",",","no","prefix",".","Key","MUST","be","a","fully","qualified","path",".","e.g",".","<","container_name",">","\/b\/l\/o\/b\/n\/a\/m\/e"]
code: def _get_storage_backend(self, key):
      """
      Return an AzureDatastore, rooted at the container level, no prefix.
      Key MUST be a fully qualified path. e.g. <container_name>/b/l/o/b/n/a/m/e
      """
      from metaflow.plugins.azure.azure_utils import (
          parse_azure_full_path,
      )
  
      # we parse out the container name only, and use that to root our storage implementation
      container_name, _ = parse_azure_full_path(key)
      # Import DATASTORES dynamically... otherwise, circular import
      from metaflow.plugins import DATASTORES
  
      storage_impl = [d for d in DATASTORES if d.TYPE == "azure"][0]
      return storage_impl(container_name)
  
imports: import io
  import os
  import shutil
  import uuid
  from tempfile import mkdtemp
  from metaflow.exception import MetaflowException, MetaflowInternalError
label_desc: Use image node_id 3 for calling the Azure obj's underlying member method code with example usage: obj._get_storage_backend(key) and returns: storage_impl