Spark结构化流:queryName()设置的可能用法是什么?

时间:2019-08-21 02:27:40

标签: apache-spark spark-structured-streaming

按照Structured Streaming Programming Guide

queryName("myTableName")用于在输出接收器为format("memory")时定义内存中的表名

aggDF
  .writeStream
  .queryName("aggregates") // this query name will be the table name
  .outputMode("complete")
  .format("memory")
  .start()

spark.sql("select * from aggregates").show() // interactively query in-memory table

DataStreamWriterscala文档queryName()的火花源代码为:

  

指定可以用start()开头的[[StreamingQuery]]的名称。   在关联的SQLContext中,该名称在所有当前活动的查询中必须是唯一的。

问题queryName()设置还有其他可能的用法吗? Spark作业日志?查询progress monitoring中的详细信息?

3 个答案:

答案 0 :(得分:2)

添加到@mike 的回答中,我想提一下,在 Databricks(其核心使用 Spark)中,您可以将定义的查询名称与函数 untilStreamIsReady() 结合使用。

例如,如果您定义了流式查询 StackoverflowTest,那么您可以执行函数 untilStreamIsReady('StackoverflowTest') 以等待查询准备就绪并开始(抱歉我是 Obvious 的上尉)。

我必须说我在官方文档中找不到这个函数的直接参考,但在以下链接中找到了:

答案 1 :(得分:1)

我遇到了 queryName 的以下三种用法:

  1. 正如 OP 所提到的并记录在结构化流指南中,当输出接收器的格式为“内存”时,它用于定义内存中的表名称。

  2. queryName 定义了 event.progress.name 的值,其中事件是 QueryProgressEvent 中的 StreamingQueryListener

  3. 它也用在 Spark Web UI 的描述列中(参见我设置 queryName("StackoverflowTest") 的屏幕截图:

enter image description here

答案 2 :(得分:0)

不,它只是用于使用内存outputMode进行调试。