问题描述
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'
);
当我从这个新表中选择时,里面根本没有数据,只有标题。
有什么我错过的地方吗?
我尝试过的东西。
解决方法
使用现有分区数据创建新表时,运行以下命令:
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 创建的,因此它还不知道它们存在。