在 Databricks 中重试从 Snowflake 读取流的安全方法

问题描述 投票:0回答:1

我们正在探索从 Azure Databricks 中读取雪花流数据的场景。

详情:

  • 我们有一个大的雪花桌子,上面已经设置了流。
  • 我们还有其他来源,可从 Azure Databricks 访问。
  • 目前我们正在将整个表读入数据框,在数据块中进行处理,然后根据需求加载到文件或表中。
  • 设计时错误地假设 Streams 数据一旦被读取就会消失。
  • 从另一个问题中,我了解到流数据可以在重试中安全地读取。

问题:

  • 我们如何通过重试安全地从 Databricks 读取 Streams 数据?
    • 假设以下 pyspark 流程
         df = # sf_conn_boilerplate.("SELECT * FROM STREAM") 
         df.withColumn('age2', df.age + 2)
         # finally load to file
      
    • 如果流加载到数据帧并在后续步骤中失败,在后续重试中是否仍可读取?
  • 在这种情况下,从外部系统访问时,Snowflake 中的事务构成为 databricks

感谢您的回复。 干杯...

pyspark snowflake-cloud-data-platform databricks azure-databricks
1个回答
0
投票

仅当流中的数据用于更新目标时,流上的“窗口”才会前进。因此,您可以根据需要多次从流中进行 SELECT,并且您将获得相同的数据。仅当您(或其他任何人)执行更改数据的语句(INSERT、UPDATE、DELETE、MERGE 等)并使用流数据时,流中的数据才会更改。文档中对此进行了广泛的介绍,并附有示例,here

如果更改数据的语句仅在 Databricks 中运行(而不是针对 Snowflake),那么您运行的内容不会对流产生影响,并且无论 Databricks 中运行或失败,数据都将可用。但是,即使它在 Databricks 中成功运行,如果您没有在 Snowflake 中运行更改 DML 语句,流也永远不会前进,并且在查询流时您永远不会获得更新的数据集。因此,在某些时候,您需要在 Snowflake 中运行虚拟更改 DML 语句来推进 Stream

© www.soinside.com 2019 - 2024. All rights reserved.