code: public SnowflakeStorageClient createClient(StageInfo stage,
                                               int parallel,
                                               RemoteStoreFileEncryptionMaterial encMat)
    throws SnowflakeSQLException
    {
      logger.debug("createClient client type={}", stage.getStageType().name());
  
      switch (stage.getStageType())
      {
        case S3:
          return createS3Client(stage.getCredentials(), parallel, encMat, stage.getRegion());
  
        case AZURE:
          return createAzureClient(stage, encMat);
  
        default:
          // We don't create a storage client for FS_LOCAL,
          // so we should only find ourselves here if an unsupported
          // remote storage client type is specified
          throw new IllegalArgumentException("Unsupported storage client specified: "
                                             + stage.getStageType().name());
      }
    }
docs: Creates a storage client based on the value of stageLocationType
  
  @param stage    the stage properties
  @param parallel the degree of parallelism to be used by the client
  @param encMat   encryption material for the client
  @return a SnowflakeStorageClient interface to the instance created
  @throws SnowflakeSQLException if any error occurs