在sparksql中创建或替换视图时如何让数据集添加我自己的自定义信息

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

我使用createOrReplaceView在sparksql目录中注册一个临时视图,此方法只需要一个参数(字符串viewname),但是我需要添加自己的自定义信息,例如hashMap存储了我需要的一些信息,有没有一种好的方法这个?

  1. 我知道我可以在自己的项目中使用哈希表

您可以在spark源代码中看到一种方法:

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

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

apache-spark apache-spark-sql catalog
1个回答
0
投票

我不确定用例,但是您可以使用spark sql来做到这一点(无直接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)
© www.soinside.com 2019 - 2024. All rights reserved.