【问题标题】:Impala/Hive expose partitioned parquet files as tableImpala/Hive 将分区 parquet 文件公开为表
【发布时间】:2022-01-07 09:43:05
【问题描述】:

我使用df.to_parquet(path="...", partition_cols="period") 将数据帧写入 HDFS (Cloudera CDH) 上的镶木地板文件。这很好用,创建了一个子文件夹结构(period=YYYYMMDD),当我读取单个镶木地板文件时,它们包含预期的数据(正如预期的那样,它们不包含period 列,因为它已被分区)。我现在正在尝试使用 Impala/Hive 创建一个表。

CREATE EXTERNAL TABLE lab.tablename
LIKE PARQUET '/data/.../db/tablename/period=20200101/dhfjksdhdsakjdhjk.parquet'
PARTITIONED BY (period INT)
STORED AS PARQUET
LOCATION '/data/.../db/tablename'

起初,它似乎有效。该表显示在数据库中,列已正确列出, period 键甚至被列为分区键。不过

select * from lab.tablename
>>  Done. 0 results.

不知何故,Impala 似乎没有正确设置引用。我也尝试过:

COMPUTE STATS lab.tablename
>> Updated 0 partition(s) and 2 column(s).

检查时得到0行

SHOW TABLE STATS lab.tablename

如果我以非分区方式写入相同的数据,它工作正常。

【问题讨论】:

    标签: hive impala


    【解决方案1】:

    即使您使用了正确的文件夹,Hive 也不知道 Metastore 中的分区。 使用:

    MSCK REPAIR TABLE lab.tablename
    

    它应该发现丢失的分区并将它们添加到元存储中。

    Impala:运行此命令以获取更改:

    INVALIDATE METADATA lab.tablename
    

    Good Read如果你想要更详细的解释。

    【讨论】:

    • 太棒了!使用 Hive 查询编辑器,我现在可以成功运行我的选择(在运行 msck 修复之后)。但在 Impala 我仍然得到零结果。我清除了缓存等,但可能需要一些时间?
    • 好的,只需要在 Impala 中运行 INVALIDATE METADATA lab.tablename 就可以让它在那里工作。马特,你可以在我可以接受的答案中添加这个吗?
    • 感谢您帮助我们做出更好的回答,非常感谢。
    猜你喜欢
    • 2021-04-19
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多