Utilitários Microsoft Spark (MSSparkUtils) para malha
Microsoft Spark Utilities (MSSparkUtils) é um pacote interno para ajudá-lo a executar facilmente tarefas comuns. Você pode usar o MSSparkUtils para trabalhar com sistemas de arquivos, obter variáveis de ambiente, encadear blocos de anotações e trabalhar com segredos. O pacote MSSparkUtils está disponível em PySpark (Python) Scala, notebooks SparkR e pipelines Fabric.
Nota
- MsSparkUtils foi oficialmente renomeado para NotebookUtils. O código existente permanecerá compatível com versões anteriores e não causará nenhuma alteração de quebra. É altamente recomendável atualizar para notebookutils para garantir suporte contínuo e acesso a novos recursos. O namespace mssparkutils será desativado no futuro.
- NotebookUtils foi projetado para funcionar com o Spark 3.4 (Runtime v1.2) e superior. Todos os novos recursos e atualizações serão suportados exclusivamente com o namespace notebookutils no futuro.
Utilitários do sistema de arquivos
mssparkutils.fs fornece utilitários para trabalhar com vários sistemas de arquivos, incluindo o Azure Data Lake Storage (ADLS) Gen2 e o Azure Blob Storage. Certifique-se de configurar o acesso ao Azure Data Lake Storage Gen2 e ao Armazenamento de Blobs do Azure adequadamente.
Execute os seguintes comandos para obter uma visão geral dos métodos disponíveis:
from notebookutils import mssparkutils
mssparkutils.fs.help()
Saída
mssparkutils.fs provides utilities for working with various FileSystems.
Below is overview about the available methods:
cp(from: String, to: String, recurse: Boolean = false): Boolean -> Copies a file or directory, possibly across FileSystems
mv(from: String, to: String, recurse: Boolean = false): Boolean -> Moves a file or directory, possibly across FileSystems
ls(dir: String): Array -> Lists the contents of a directory
mkdirs(dir: String): Boolean -> Creates the given directory if it does not exist, also creating any necessary parent directories
put(file: String, contents: String, overwrite: Boolean = false): Boolean -> Writes the given String out to a file, encoded in UTF-8
head(file: String, maxBytes: int = 1024 * 100): String -> Returns up to the first 'maxBytes' bytes of the given file as a String encoded in UTF-8
append(file: String, content: String, createFileIfNotExists: Boolean): Boolean -> Append the content to a file
rm(dir: String, recurse: Boolean = false): Boolean -> Removes a file or directory
exists(file: String): Boolean -> Check if a file or directory exists
mount(source: String, mountPoint: String, extraConfigs: Map[String, Any]): Boolean -> Mounts the given remote storage directory at the given mount point
unmount(mountPoint: String): Boolean -> Deletes a mount point
mounts(): Array[MountPointInfo] -> Show information about what is mounted
getMountPath(mountPoint: String, scope: String = ""): String -> Gets the local path of the mount point
Use mssparkutils.fs.help("methodName") for more info about a method.
MSSparkUtils funciona com o sistema de arquivos da mesma forma que as APIs do Spark. Tomemos como exemplo mssparkuitls.fs.mkdirs() e o uso do Fabric lakehouse:
Utilização | Caminho relativo da raiz HDFS | Caminho absoluto para o sistema de arquivos ABFS | Caminho absoluto para o sistema de arquivos local no nó do driver |
---|---|---|---|
Casa do lago não padrão | Não suportado | mssparkutils.fs.mkdirs("abfss://< container_name>@<storage_account_name.dfs.core.windows.net/<> new_dir>") | mssparkutils.fs.mkdirs("arquivo:/<new_dir>") |
Casa do lago padrão | Diretório em "Arquivos" ou "Tabelas": mssparkutils.fs.mkdirs("Files/<new_dir>") | mssparkutils.fs.mkdirs("abfss://< container_name>@<storage_account_name.dfs.core.windows.net/<> new_dir>") | mssparkutils.fs.mkdirs("arquivo:/<new_dir>") |
Listar ficheiros
Para listar o conteúdo de um diretório, use mssparkutils.fs.ls('Seu caminho de diretório'). Por exemplo:
mssparkutils.fs.ls("Files/tmp") # works with the default lakehouse files using relative path
mssparkutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>") # based on ABFS file system
mssparkutils.fs.ls("file:/tmp") # based on local file system of driver node
Ver propriedades do ficheiro
Esse método retorna as propriedades do arquivo, incluindo nome do arquivo, caminho do arquivo, tamanho do arquivo e se é um diretório e um arquivo.
files = mssparkutils.fs.ls('Your directory path')
for file in files:
print(file.name, file.isDir, file.isFile, file.path, file.size)
Criar novo diretório
Esse método cria o diretório determinado, se ele não existir, e cria todos os diretórios pai necessários.
mssparkutils.fs.mkdirs('new directory name')
mssparkutils.fs. mkdirs("Files/<new_dir>") # works with the default lakehouse files using relative path
mssparkutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") # based on ABFS file system
mssparkutils.fs.ls("file:/<new_dir>") # based on local file system of driver node
Copiar ficheiro
Esse método copia um arquivo ou diretório e oferece suporte à atividade de cópia entre sistemas de arquivos.
mssparkutils.fs.cp('source file or directory', 'destination file or directory', True)# Set the third parameter as True to copy all files and directories recursively
Arquivo de cópia de desempenho
Esse método fornece uma maneira mais rápida de copiar ou mover arquivos, especialmente grandes volumes de dados.
mssparkutils.fs.fastcp('source file or directory', 'destination file or directory', True)# Set the third parameter as True to copy all files and directories recursively
Visualizar conteúdo do arquivo
Este método retorna até os primeiros bytes 'maxBytes' do arquivo fornecido como uma String codificada em UTF-8.
mssparkutils.fs.head('file path', maxBytes to read)
Mover ficheiro
Esse método move um arquivo ou diretório e oferece suporte a movimentações entre sistemas de arquivos.
mssparkutils.fs.mv('source file or directory', 'destination directory', True) # Set the last parameter as True to firstly create the parent directory if it does not exist
mssparkutils.fs.mv('source file or directory', 'destination directory', True, True) # Set the third parameter to True to firstly create the parent directory if it does not exist. Set the last parameter to True to overwrite the updates.
Gravar arquivo
Este método grava a seqüência dada em um arquivo, codificado em UTF-8.
mssparkutils.fs.put("file path", "content to write", True) # Set the last parameter as True to overwrite the file if it existed already
Acrescentar conteúdo a um ficheiro
Este método acrescenta a cadeia de caracteres dada a um arquivo, codificado em UTF-8.
mssparkutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it does not exist
Excluir arquivo ou diretório
Esse método remove um arquivo ou diretório.
mssparkutils.fs.rm('file path', True) # Set the last parameter as True to remove all files and directories recursively
Diretório de montagem/desmontagem
Encontre mais informações sobre o uso detalhado em Montagem e desmontagem de arquivos.
Utilitários para notebook
Use o MSSparkUtils Notebook Utilities para executar um bloco de anotações ou sair de um bloco de anotações com um valor. Execute o seguinte comando para obter uma visão geral dos métodos disponíveis:
mssparkutils.notebook.help()
Saída:
exit(value: String): void -> This method lets you exit a notebook with a value.
run(path: String, timeoutSeconds: int, arguments: Map): String -> This method runs a notebook and returns its exit value.
Nota
Os utilitários de notebook não são aplicáveis para definições de trabalho do Apache Spark (SJD).
Referenciar um bloco de notas
Esse método faz referência a um bloco de anotações e retorna seu valor de saída. Você pode executar chamadas de função de aninhamento em um bloco de anotações interativamente ou em um pipeline. O bloco de anotações que está sendo referenciado é executado no pool Spark do bloco de anotações que chama essa função.
mssparkutils.notebook.run("notebook name", <timeoutSeconds>, <parameterMap>, <workspaceId>)
Por exemplo:
mssparkutils.notebook.run("Sample1", 90, {"input": 20 })
O bloco de anotações de malha também oferece suporte à referência de blocos de anotações em vários espaços de trabalho, especificando a ID do espaço de trabalho.
mssparkutils.notebook.run("Sample1", 90, {"input": 20 }, "fe0a6e2a-a909-4aa3-a698-0a651de790aa")
Você pode abrir o link de instantâneo da execução de referência na saída da célula. O instantâneo captura os resultados da execução do código e permite depurar facilmente uma execução de referência.
Nota
- O bloco de anotações de referência entre espaços de trabalho é suportado pela versão 1.2 e superior do tempo de execução.
- Se você usar os arquivos em Recurso de Bloco de Anotações, use
mssparkutils.nbResPath
no bloco de anotações referenciado para garantir que ele aponte para a mesma pasta da execução interativa.
Referência: executar vários blocos de anotações em paralelo
Importante
Este recurso está em pré-visualização.
O método mssparkutils.notebook.runMultiple()
permite executar vários blocos de anotações em paralelo ou com uma estrutura topológica predefinida. A API está usando um mecanismo de implementação multithread dentro de uma sessão de faísca, o que significa que os recursos de computação são compartilhados pelas execuções do bloco de anotações de referência.
Com mssparkutils.notebook.runMultiple()
o , você pode:
Execute vários notebooks simultaneamente, sem esperar que cada um termine.
Especifique as dependências e a ordem de execução de seus blocos de anotações, usando um formato JSON simples.
Otimize o uso dos recursos de computação do Spark e reduza o custo de seus projetos do Fabric.
Visualize os instantâneos de cada registro de execução do bloco de anotações na saída e depure/monitore as tarefas do bloco de anotações convenientemente.
Obtenha o valor de saída de cada atividade executiva e use-o em tarefas a jusante.
Você também pode tentar executar o mssparkutils.notebook.help("runMultiple") para encontrar o exemplo e o uso detalhado.
Aqui está um exemplo simples de execução de uma lista de blocos de anotações em paralelo usando esse método:
mssparkutils.notebook.runMultiple(["NotebookSimple", "NotebookSimple2"])
O resultado da execução do bloco de anotações raiz é o seguinte:
Segue-se um exemplo de execução de blocos de notas com estrutura topológica utilizando mssparkutils.notebook.runMultiple()
. Use esse método para orquestrar facilmente blocos de anotações por meio de uma experiência de código.
# run multiple notebooks with parameters
DAG = {
"activities": [
{
"name": "NotebookSimple", # activity name, must be unique
"path": "NotebookSimple", # notebook path
"timeoutPerCellInSeconds": 90, # max timeout for each cell, default to 90 seconds
"args": {"p1": "changed value", "p2": 100}, # notebook parameters
},
{
"name": "NotebookSimple2",
"path": "NotebookSimple2",
"timeoutPerCellInSeconds": 120,
"args": {"p1": "changed value 2", "p2": 200}
},
{
"name": "NotebookSimple2.2",
"path": "NotebookSimple2",
"timeoutPerCellInSeconds": 120,
"args": {"p1": "changed value 3", "p2": 300},
"retry": 1,
"retryIntervalInSeconds": 10,
"dependencies": ["NotebookSimple"] # list of activity names that this activity depends on
}
],
"timeoutInSeconds": 43200, # max timeout for the entire DAG, default to 12 hours
"concurrency": 50 # max number of notebooks to run concurrently, default to 50
}
mssparkutils.notebook.runMultiple(DAG, {"displayDAGViaGraphviz": False})
O resultado da execução do bloco de anotações raiz é o seguinte:
Nota
- O grau de paralelismo da execução de vários blocos de anotações é restrito ao recurso de computação total disponível de uma sessão do Spark.
- O limite superior para atividades de bloco de anotações ou blocos de anotações simultâneos é 50. Exceder esse limite pode levar a problemas de estabilidade e desempenho devido ao alto uso de recursos de computação. Se surgirem problemas, considere separar os blocos de anotações em várias
runMultiple
chamadas ou reduzir a simultaneidade ajustando o campo de simultaneidade no parâmetro DAG. - O tempo limite padrão para todo o DAG é de 12 horas e o tempo limite padrão para cada célula no bloco de anotações filho é de 90 segundos. Você pode alterar o tempo limite definindo os campos timeoutInSeconds e timeoutPerCellInSeconds no parâmetro DAG.
Sair de um bloco de notas
Esse método sai de um bloco de anotações com um valor. Você pode executar chamadas de função de aninhamento em um bloco de anotações interativamente ou em um pipeline.
Quando você chama uma função exit() de um bloco de anotações interativamente, o bloco de anotações de malha lança uma exceção, ignora a execução das células subsequentes e mantém a sessão do Spark ativa.
Quando você orquestra um bloco de anotações em um pipeline que chama uma função exit(), a atividade do bloco de anotações retorna com um valor de saída, conclui a execução do pipeline e interrompe a sessão do Spark.
Quando você chama uma função exit() em um bloco de anotações que está sendo referenciado, o Fabric Spark interrompe a execução adicional do bloco de anotações referenciado e continua a executar as próximas células no bloco de anotações principal que chama a função run( ). Por exemplo: Notebook1 tem três células e chama uma função exit() na segunda célula. O Notebook2 tem cinco células e as chamadas são executadas (notebook1) na terceira célula. Quando você executa o Notebook2, o Notebook1 para na segunda célula ao pressionar a função exit( ). O Notebook2 continua a executar sua quarta célula e quinta célula.
mssparkutils.notebook.exit("value string")
Por exemplo:
Exemplo1 bloco de notas com as seguintes duas células:
A célula 1 define um parâmetro de entrada com o valor padrão definido como 10.
A célula 2 sai do bloco de notas com a entrada como valor de saída.
Você pode executar o Sample1 em outro bloco de anotações com valores padrão:
exitVal = mssparkutils.notebook.run("Sample1")
print (exitVal)
Saída:
Notebook executed successfully with exit value 10
Você pode executar o Sample1 em outro bloco de anotações e definir o valor de entrada como 20:
exitVal = mssparkutils.notebook.run("Sample1", 90, {"input": 20 })
print (exitVal)
Saída:
Notebook executed successfully with exit value 20
Utilitários de credenciais
Você pode usar os Utilitários de Credenciais MSSparkUtils para obter tokens de acesso e gerenciar segredos em um Cofre de Chaves do Azure.
Execute o seguinte comando para obter uma visão geral dos métodos disponíveis:
mssparkutils.credentials.help()
Saída:
getToken(audience, name): returns AAD token for a given audience, name (optional)
getSecret(keyvault_endpoint, secret_name): returns secret for a given Key Vault and secret name
Obter token
getToken retorna um token Microsoft Entra para um determinado público e nome (opcional). A lista a seguir mostra as chaves de audiência atualmente disponíveis:
- Storage Audience Resource: "armazenamento"
- Recurso do Power BI: "pbi"
- Azure Key Vault Resource: "keyvault"
- Synapse RTA KQL DB Recurso: "kusto"
Execute o seguinte comando para obter o token:
mssparkutils.credentials.getToken('audience Key')
Obter segredo usando credenciais de usuário
getSecret retorna um segredo do Cofre da Chave do Azure para um determinado ponto de extremidade do Cofre da Chave do Azure e um nome secreto usando credenciais de usuário.
mssparkutils.credentials.getSecret('https://<name>.vault.azure.net/', 'secret name')
Montagem e desmontagem de ficheiros
O Fabric suporta os seguintes cenários de montagem no pacote Microsoft Spark Utilities. Você pode usar as APIs mount, unmount, getMountPath() e mounts() para anexar armazenamento remoto (ADLS Gen2) a todos os nós de trabalho (nó de driver e nós de trabalho). Depois que o ponto de montagem de armazenamento estiver instalado, use a API de arquivo local para acessar os dados como se estivessem armazenados no sistema de arquivos local.
Como montar uma conta ADLS Gen2
O exemplo a seguir ilustra como montar o Azure Data Lake Storage Gen2. A montagem do armazenamento de Blob funciona de forma semelhante.
Este exemplo pressupõe que você tenha uma conta do Data Lake Storage Gen2 chamada storegen2 e que a conta tenha um contêiner chamado mycontainer que você deseja montar em /test na sessão do Spark do bloco de anotações.
Para montar o contêiner chamado mycontainer, o mssparkutils primeiro precisa verificar se você tem permissão para acessar o contêiner. Atualmente, o Fabric suporta dois métodos de autenticação para a operação de montagem do gatilho: accountKey e sastoken.
Montagem via token de assinatura de acesso compartilhado ou chave de conta
MSSparkUtils suporta a passagem explícita de uma chave de conta ou token de assinatura de acesso compartilhado (SAS) como um parâmetro para montar o destino.
Por motivos de segurança, recomendamos que você armazene chaves de conta ou tokens SAS no Cofre de Chaves do Azure (como mostra a captura de tela a seguir). Em seguida, você pode recuperá-los usando a API mssparkutils.credentials.getSecret . Para obter mais informações sobre o Azure Key Vault, consulte Sobre as chaves de conta de armazenamento gerenciado do Azure Key Vault.
Código de exemplo para o método accountKey :
from notebookutils import mssparkutils
# get access token for keyvault resource
# you can also use full audience here like https://vault.azure.net
accountKey = mssparkutils.credentials.getSecret("<vaultURI>", "<secretName>")
mssparkutils.fs.mount(
"abfss://mycontainer@<accountname>.dfs.core.windows.net",
"/test",
{"accountKey":accountKey}
)
Código de exemplo para sastoken:
from notebookutils import mssparkutils
# get access token for keyvault resource
# you can also use full audience here like https://vault.azure.net
sasToken = mssparkutils.credentials.getSecret("<vaultURI>", "<secretName>")
mssparkutils.fs.mount(
"abfss://mycontainer@<accountname>.dfs.core.windows.net",
"/test",
{"sasToken":sasToken}
)
Nota
Talvez seja necessário importar mssparkutils
se não estiver disponível:
from notebookutils import mssparkutils
Parâmetros de montagem:
- fileCacheTimeout: Os blobs serão armazenados em cache na pasta temporária local por 120 segundos por padrão. Durante esse tempo, o blobfuse não verificará se o arquivo está atualizado ou não. O parâmetro pode ser definido para alterar o tempo limite padrão. Quando vários clientes modificam arquivos ao mesmo tempo, a fim de evitar inconsistências entre arquivos locais e remotos, recomendamos encurtar o tempo de cache, ou até mesmo alterá-lo para 0, e sempre obter os arquivos mais recentes do servidor.
- Tempo limite: O tempo limite da operação de montagem é de 120 segundos por padrão. O parâmetro pode ser definido para alterar o tempo limite padrão. Quando há muitos executores ou quando a montagem expira, recomendamos aumentar o valor.
Você pode usar estes parâmetros assim:
mssparkutils.fs.mount(
"abfss://mycontainer@<accountname>.dfs.core.windows.net",
"/test",
{"fileCacheTimeout": 120, "timeout": 120}
)
Nota
Por motivos de segurança, recomendamos que você não armazene credenciais no código. Para proteger ainda mais suas credenciais, vamos redigir seu segredo na saída do notebook. Para obter mais informações, consulte Redação secreta.
Como montar uma casa no lago
Código de exemplo para montar uma casa de lago para /test:
from notebookutils import mssparkutils
mssparkutils.fs.mount(
"abfss://<workspace_id>@onelake.dfs.fabric.microsoft.com/<lakehouse_id>",
"/test"
)
Nota
Não há suporte para a montagem de um ponto de extremidade regional. A malha suporta apenas a montagem do ponto de extremidade global, onelake.dfs.fabric.microsoft.com
.
Acessar arquivos sob o ponto de montagem usando a API mssparktuils fs
O principal objetivo da operação de montagem é permitir que os clientes acessem os dados armazenados em uma conta de armazenamento remoto com uma API de sistema de arquivos local. Você também pode acessar os dados usando a API mssparkutils fs com um caminho montado como parâmetro. Este formato de caminho é um pouco diferente.
Suponha que você montou o contêiner do Data Lake Storage Gen2 mycontainer em /test usando a API de montagem. Quando você acessa os dados com uma API de sistema de arquivos local, o formato de caminho é assim:
/synfs/notebook/{sessionId}/test/{filename}
Quando você quiser acessar os dados usando a API mssparkutils fs, recomendamos usar getMountPath() para obter o caminho preciso:
path = mssparkutils.fs.getMountPath("/test")
Listar diretórios:
mssparkutils.fs.ls(f"file://{mssparkutils.fs.getMountPath('/test')}")
Leia o conteúdo do arquivo:
mssparkutils.fs.head(f"file://{mssparkutils.fs.getMountPath('/test')}/myFile.txt")
Crie um diretório:
mssparkutils.fs.mkdirs(f"file://{mssparkutils.fs.getMountPath('/test')}/newdir")
Acesse arquivos sob o ponto de montagem via caminho local
Você pode facilmente ler e gravar os arquivos no ponto de montagem usando o sistema de arquivos padrão. Aqui está um exemplo de Python:
#File read
with open(mssparkutils.fs.getMountPath('/test2') + "/myFile.txt", "r") as f:
print(f.read())
#File write
with open(mssparkutils.fs.getMountPath('/test2') + "/myFile.txt", "w") as f:
print(f.write("dummy data"))
Como verificar os pontos de montagem existentes
Você pode usar a API mssparkutils.fs.mounts() para verificar todas as informações de ponto de montagem existentes:
mssparkutils.fs.mounts()
Como desmontar o ponto de montagem
Use o código a seguir para desmontar o ponto de montagem (/test neste exemplo):
mssparkutils.fs.unmount("/test")
Limitações conhecidas
A montagem atual é uma configuração de nível de trabalho; recomendamos que você use a API de montagens para verificar se um ponto de montagem existe ou não está disponível.
O mecanismo de desmontagem não é automático. Quando a execução do aplicativo terminar, para desmontar o ponto de montagem e liberar o espaço em disco, você precisará chamar explicitamente uma API de desmontagem em seu código. Caso contrário, o ponto de montagem ainda existirá no nó após a conclusão da execução do aplicativo.
Não há suporte para a montagem de uma conta de armazenamento ADLS Gen1.
Utilitários Lakehouse
mssparkutils.lakehouse
fornece utilitários especificamente adaptados para gerenciar artefatos Lakehouse. Esses utilitários permitem que os usuários criem, recuperem, atualizem e excluam artefatos do Lakehouse sem esforço.
Nota
As APIs do Lakehouse só são suportadas no Runtime versão 1.2+.
Visão geral dos métodos
Abaixo está uma visão geral dos métodos disponíveis fornecidos por mssparkutils.lakehouse
:
# Create a new Lakehouse artifact
create(name: String, description: String = "", workspaceId: String = ""): Artifact
# Retrieve a Lakehouse artifact
get(name: String, workspaceId: String = ""): Artifact
# Update an existing Lakehouse artifact
update(name: String, newName: String, description: String = "", workspaceId: String = ""): Artifact
# Delete a Lakehouse artifact
delete(name: String, workspaceId: String = ""): Boolean
# List all Lakehouse artifacts
list(workspaceId: String = ""): Array[Artifact]
Exemplos de utilização
Para utilizar esses métodos de forma eficaz, considere os seguintes exemplos de uso:
Criando um artefato Lakehouse
artifact = mssparkutils.lakehouse.create("artifact_name", "Description of the artifact", "optional_workspace_id")
Recuperando um artefato Lakehouse
artifact = mssparkutils.lakehouse.get("artifact_name", "optional_workspace_id")
Atualizando um artefato Lakehouse
updated_artifact = mssparkutils.lakehouse.update("old_name", "new_name", "Updated description", "optional_workspace_id")
Excluindo um artefato Lakehouse
is_deleted = mssparkutils.lakehouse.delete("artifact_name", "optional_workspace_id")
Listando artefatos Lakehouse
artifacts_list = mssparkutils.lakehouse.list("optional_workspace_id")
Informações adicionais
Para obter informações mais detalhadas sobre cada método e seus parâmetros, utilize a mssparkutils.lakehouse.help("methodName")
função.
Com os utilitários Lakehouse do MSSparkUtils, gerenciar seus artefatos Lakehouse torna-se mais eficiente e integrado aos seus pipelines de malha, aprimorando sua experiência geral de gerenciamento de dados.
Sinta-se à vontade para explorar esses utilitários e incorporá-los em seus fluxos de trabalho do Fabric para um gerenciamento perfeito de artefatos do Lakehouse.
Utilitários de tempo de execução
Mostrar as informações de contexto da sessão
Com mssparkutils.runtime.context
você pode obter as informações de contexto da sessão ao vivo atual, incluindo o nome do bloco de anotações, lakehouse padrão, informações do espaço de trabalho, se é uma execução de pipeline, etc.
mssparkutils.runtime.context
Problema conhecido
Ao usar a versão de tempo de execução acima de 1.2 e executar mssparkutils.help()
, as APIs fabricClient, warehouse e workspace listadas não são suportadas por enquanto, estarão disponíveis posteriormente.