如何让dataset在sparksql中创建或重新放置视图时添加我自己的自定义信息

zsbz8rwp  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(419)

我使用createorreplaceview在sparksql目录中注册一个temp视图,这个方法只需要一个参数(stringviewname),但是我需要添加我自己的自定义信息,比如一个hashmap存储一些我需要的信息,有没有好的方法?
我知道我可以在自己的项目中使用hashmap
您可以在spark源代码中看到一种方法:

CreateViewCommand(
  name = tableIdentifier,
  userSpecifiedColumns = Nil,
  comment = None,
  properties = Map.empty,
  originalText = None,
  child = logicalPlan,
  allowExisting = false,
  replace = replace,
  viewType = viewType)

但是我们不能传递属性,甚至不能传递表描述信息

klr1opcd

klr1opcd1#

我不确定这个用例,但是可以使用sparksql(没有直接的api来添加表属性,所以可以将其视为间接的方式)-

/**
   * Create or replace a view. This creates a [[CreateViewStatement]]
   *
   * For example:
   * {{{
   *   CREATE [OR REPLACE] [[GLOBAL] TEMPORARY] VIEW [IF NOT EXISTS] multi_part_name
   *   [(column_name [COMMENT column_comment], ...) ]
   *   create_view_clauses
   *
   *   AS SELECT ...;
   *
   *   create_view_clauses (order insensitive):
   *     [COMMENT view_comment]
   *     [TBLPROPERTIES (property_name = property_value, ...)]
   * }}}
   */

访问此处了解更多信息-https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/astbuilder.scala#l3493
示例查询-

val viewQuery =
      s"""
        | CREATE OR REPLACE TEMPORARY VIEW new_test
        | COMMENT 'this is view comment'
        | TBLPROPERTIES ('creator'='som', 'createdTime'=${System.currentTimeMillis()})
        | AS select * from test
      """.stripMargin

    sqlContext.sql(viewQuery)

相关问题