【问题标题】:How to get partition path from hive-metastore given a Timestamp object as the partition key给定 Timestamp 对象作为分区键的情况下,如何从 hive-metastore 获取分区路径
【发布时间】:2019-12-14 13:33:57
【问题描述】:

在spark中,有没有办法通过提供一个Timstamp对象来获取分区路径,而不是提供一个字符串形式的分区键?

我知道我们可以通过运行以下查询来获取分区路径:

val x = "date='2019-08-06 23:48:32.113'"
spark.sql(s"describe extended hospitaltest partition (${x})")

但上述查询需要将分区键作为字符串。

【问题讨论】:

  • 您能举例说明您计划如何创建时间戳对象吗?据我所知,它必须传递一个字符串。
  • @Goldie 我正在使用 java date 的 getTime 方法从 java date 对象创建时间戳对象。那么如果另一个应用想知道 Timestamp 对象和实际分区路径之间的映射关系,它如何在不知道使用什么日期格式的情况下得到答案呢?或者反过来说,如果给定一个分区路径为字符串,在不知道格式的情况下怎么知道这个字符串代表的是哪个日期呢?

标签: sql scala apache-spark hive hive-metastore


【解决方案1】:

我不知道它是否为 spark 正确编写了查询,但作为您问题的一部分,下一个查询从 hive 元存储(存储在 mysql 中)返回分区的位置:

SELECT 
      location 
    FROM 
      hive.DBS 
    LEFT JOIN hive.TBLS 
    ON 
      ( 
        DBS.DB_ID       = TBLS.DB_ID 
      AND upper(TBLS.tbl_name) = 'CG_CRDSTDLVRS_RAW' 
      ) 
    LEFT JOIN hive.PARTITIONS 
    ON 
      ( 
        TBLS.TBL_ID = PARTITIONS.TBL_ID 
      AND PARTITIONS.PART_NAME LIKE '%2018-09-15%' 
      ) 
    LEFT JOIN hive.SDS 
    ON 
      ( 
        PARTITIONS.SD_ID = SDS.SD_ID 
      ) 
    WHERE 
      upper(DBS.name)='RAW_FAT01'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 2014-11-26
    • 2017-12-09
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2017-06-23
    • 2018-03-30
    相关资源
    最近更新 更多