Pular para o conteúdo principal

Usar os valores da tarefa para passar informações entre a tarefa

Os valores de tarefa referem-se à subutilidade Databricks utilidades taskValues, que permite que o senhor passe valores arbitrários entre tarefas em um trabalho Databricks. Consulte o subutilitário taskValues (dbutils.Job.taskValues).

O senhor especifica um par key-valor usando dbutils.jobs.taskValues.set() em uma tarefa e, em seguida, pode usar o nome da tarefa e key para fazer referência ao valor nas tarefas subsequentes.

nota

Como dbutils.jobs.taskValues.set() e dbutils.jobs.taskValues.get() na subutilidade dbutils.jobs.taskValues são funções Python, elas só podem ser usadas no Notebook com Python selecionado como idioma. No entanto, o senhor pode fazer referência a valores de tarefa usando referências de valores dinâmicos para todas as tarefas que suportam parâmetros. Consulte Valores de tarefa de referência.

Definir valores de tarefa​

Defina os valores da tarefa no Notebook Python usando dbutils.jobs.taskValues.set().

A chave de valor da tarefa deve ser strings. Cada key deve ser exclusivo se o senhor tiver vários valores de tarefa definidos em um Notebook.

O senhor pode atribuir manual ou programaticamente valores de tarefa à chave. Somente os valores que podem ser expressos como JSON válido são permitidos. O tamanho da representação JSON do valor não pode exceder 48 KiB.

Por exemplo, o exemplo a seguir define uma cadeia de caracteres estática para key fave_food:

Python
dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")

O exemplo a seguir utiliza um parâmetro de tarefa de notebook para query todos os registros de atualização de uma reserva específica e retornar o status atual da reserva e a contagem total de registros:

Python
from pyspark.sql.functions import col

dbutils.widgets.text("booking_id", "51567", "Booking ID")
booking_id = dbutils.widgets.get("booking_id")

query = (spark.read.table("samples.wanderbricks.booking_updates")
.orderBy(col("updated_at"), ascending=False)
.where(col("booking_id") == booking_id)
.select(col("status"))
)

dbutils.jobs.taskValues.set(key = "record_count", value = query.count())
dbutils.jobs.taskValues.set(key = "booking_status", value = query.take(1)[0][0])

Você pode passar listas de valores usando esse padrão e usá-las para coordenar a lógica downstream, como tarefas For each. Consulte Usar uma tarefa For each para executar outra tarefa em um loop.

O exemplo a seguir extrai os valores distintos para o ID de destino para uma lista Python e define isso como um valor de tarefa:

Python
dest_list = list(spark.read.table("samples.wanderbricks.properties").select("destination_id").distinct().toPandas()["destination_id"])

dbutils.jobs.taskValues.set(key = "dest_list", value = dest_list)

Valores de referência da tarefa​

A Databricks recomenda fazer referência aos valores da tarefa como parâmetros da tarefa configurados usando o padrão de referência de valor dinâmico {{tasks.<task_name>.values.<value_name>}}.

Por exemplo, para fazer referência ao valor da tarefa com o key dest_list de uma tarefa chamada destination_lookup, use a sintaxe {{tasks.destination_lookup.values.dest_list}}.

Consulte Configurar parâmetros de tarefa e Referências de valor dinâmico.

Uso dbutils.jobs.taskValues.get​

A sintaxe dbutils.jobs.taskValues.get() requer a especificação do nome da tarefa upstream. Essa sintaxe não é recomendada, pois o senhor pode usar os valores da tarefa em várias tarefas downstream, o que significa que são necessárias várias atualizações se o nome da tarefa for alterado.

Usando essa sintaxe, você pode especificar opcionalmente um valor default e debugValue. O valor default é usado se o key não puder ser encontrado. O site debugValue permite que o senhor defina um valor estático a ser usado durante o desenvolvimento manual do código e os testes no Notebook antes de programar o Notebook como uma tarefa.

O exemplo a seguir obtém o valor para key booking_status definido em um nome de tarefa booking_lookup. O valor confirmed é retornado somente quando o Notebook é executado de forma interativa.

Python
booking_status = dbutils.jobs.taskValues.get(taskKey = "booking_lookup", key = "booking_status", debugValue = "confirmed")
nota

Databricks não recomenda a configuração de valores em default, pois eles podem ser difíceis de solucionar e evitar mensagens de erro esperadas devido à falta de uma chave ou ao nome incorreto da tarefa.

Ler valores de iterações de uma tarefa For each​

Uma tarefa executada dentro de um For each task é executada uma vez por iteração, e cada iteração pode definir um valor de tarefa com dbutils.jobs.taskValues.set() como em qualquer tarefa. Uma tarefa downstream pode ler o valor de cada iteração de uma única lista retornado, ordenada pelo índice de iteração.

info

Beta

A leitura das saídas de iteração agregadas de uma tarefa de For each está em Beta. Ele é habilitado por default e requer o Databricks Runtime 15.4 LTS ou acima.

Em qualquer superfície de leitura, use a key da tarefa aninhada que é executada dentro da tarefa For each, e não da própria tarefa For each. A sua key retorna os valores de cada iteração como uma única lista ordenada pelo índice de iteração. Por exemplo, se três iterações de uma tarefa aninhada chamada process definirem cada uma result:

Python
results = dbutils.jobs.taskValues.get(taskKey = "process", key = "result")
# results == [1, 2, 3]

A referência de valor dinâmico {{tasks.process.values.result}} é resolvida para a mesma matriz.

Uma iteração que não definiu a key mantém sua posição no resultado: ela aparece como None (JSON null) de dbutils.jobs.taskValues.get, e como null em uma referência de valor dinâmico. Por exemplo, se a segunda de três iterações não definiu result, results será [1, None, 3].

As referências agregadas têm dois limites: uma matriz montada não pode exceder aproximadamente 48 KB (49.344 caracteres) para um único valor de parâmetro, e um único valor de parâmetro pode conter no máximo três referências agregadas a valores de tarefa.

visualizar valores de tarefa​

O valor retornado de um valor de tarefa para cada execução é exibido no painel **Saída** dos **Detalhes da execução da tarefa**. Veja view o histórico de execução da tarefa.