微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ATHENA 中创建带有分区的外部表会导致空表

如何解决在 ATHENA 中创建带有分区的外部表会导致空表

我有一个带有按日期列分区的镶木地板的 s3 位置。

parquet_data ---
               --  dt=2021-07-27
                   files
               --  dt=2021-07-26
                   files

现在我想创建一个外部表(CETAS)

使用由 dt 列分区的表。

CREATE EXTERNAL TABLE IF NOT EXISTS database.tbl_name (
  ACCOUNT_NUM                             bigint,ID                                      bigint,NAME                                    string
)

PARTITIONED BY (
  dt date)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetoutputFormat'
LOCATION
  's3://location/of/data/'
TBLPROPERTIES (
  'classification'='parquet','typeOfData'='file'
);

当我从这个新表中选择时,里面根本没有数据,只有标题

有什么我错过的地方吗?

我尝试过的东西。

  • 重新创建镶木地板
  • 创建没有分区的表 - 可以工作,但看不到分区并且无法在表 def 中添加 dt,它显示为空白。

解决方法

使用现有分区数据创建新表时,运行以下命令:

MSCK REPAIR TABLE database.tbl_name

来自MSCK REPAIR TABLE - Amazon Athena

MSCK REPAIR TABLE 命令扫描文件系统(例如 Amazon S3)以查找在创建表后添加到文件系统的 Hive 兼容分区。 MSCK REPAIR TABLE 比较表元数据中的分区和 S3 中的分区。如果您在创建表时指定的 S3 位置中存在新分区,则会将这些分区添加到元数据和 Athena 表中。

这是必需的,因为分区不是由 Amazon Athena 或 AWS Glue 创建的,因此它还不知道它们存在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。