Compartilhar via


append_flow

O decorador @dp.append_flow cria fluxos de acréscimo ou de backfill para suas tabelas de pipeline. A função deve retornar um DataFrame de streaming do Apache Spark. Veja Carregue e processe dados incrementalmente com os fluxos de pipelines declarativos do Lakeflow Spark.

Fluxos de acréscimo podem direcionar tabelas de streaming ou coletores.

Sintaxe

from pyspark import pipelines as dp

dp.create_streaming_table("<target-table-name>") # Required only if the target table doesn't exist.

@dp.append_flow(
  target = "<target-table-name>",
  name = "<flow-name>", # optional, defaults to function name
  once = <bool>, # optional, defaults to false
  spark_conf = {"<key>" : "<value", "<key" : "<value>"}, # optional
  comment = "<comment>") # optional
def <function-name>():
  return (<streaming-query>) #

Parâmetros

Parâmetro Tipo Description
função function Obrigatório Uma função que retorna um DataFrame de streaming do Apache Spark de uma consulta definida pelo usuário.
target str Obrigatório O nome da tabela ou coletor que é o destino do fluxo de acréscimo.
name str O nome do fluxo. Se não for fornecido, o padrão será o nome da função.
once bool Opcionalmente, defina o fluxo como um fluxo único, por exemplo, um preenchimento retroativo. Usar once=True altera o fluxo de duas maneiras:
  • O valor retornado. streaming-query. deve ser um DataFrame em lote nesse caso, não um DataFrame de streaming.
  • O fluxo é executado uma vez por padrão. Se a linha de processamento for atualizada com um recarregamento completo, então o fluxo ONCE será executado novamente para recriar os dados.
comment str Uma descrição para o fluxo.
spark_conf dict Uma lista de configurações do Spark para a execução dessa consulta

Exemplos

from pyspark import pipelines as dp

# Create a sink for an external Delta table
dp.create_sink("my_sink", "delta", {"path": "/tmp/delta_sink"})

# Add an append flow to an external Delta table
@dp.append_flow(name = "flow", target = "my_sink")
def flowFunc():
  return <streaming-query>

# Add a backfill
@dp.append_flow(name = "backfill", target = "my_sink", once = True)
def backfillFlowFunc():
    return (
      spark.read
      .format("json")
      .load("/path/to/backfill/")
    )

# Create a Kafka sink
dp.create_sink(
  "my_kafka_sink",
  "kafka",
  {
    "kafka.bootstrap.servers": "host:port",
    "topic": "my_topic"
  }
)

# Add an append flow to a Kafka sink
@dp.append_flow(name = "flow", target = "my_kafka_sink")
def myFlow():
  return read_stream("xxx").select(F.to_json(F.struct("*")).alias("value"))