问题描述
我正在尝试从 Trino 读取 S3 中的数据分区。 我到底做了什么:
我将所有分区的数据上传到 S3。我有一个指定的 avro 模式,我把它放在文件本地系统中。
然后我创建了一个外部 hive 表来指向 S3 中的数据位置和文件本地系统中的 avro 模式。 表已创建。
然后,通常我可以从 Trino 查询我在 S3 中的数据和分区。
Trino>select * from hive.default.my_table;
它只返回列名。
trino>select * from hive.default."my_table$partitions";
它只返回分区名称。
能否请您给我建议一个解决方案,如何从 Trino 读取 S3 中的数据分区?
知道我正在使用 Apache Hive 2
,即使我在 hive 中查询表以返回表分区,它也会返回 Ok,并显示任何内容。我认为因为 Hive 2
我们应该使用 MSCK command
解决方法
在 Hive 中将分区文件夹和文件上传到 S3 并创建表是不够的,应该创建分区元数据。通常,您可以将文件夹安装为分区。要将表位置中的所有现有子文件夹安装为分区:
使用msck修复表命令:
MSCK [REPAIR] TABLE tablename;
或亚马逊 EMR 版本:
ALTER TABLE tablename RECOVER PARTITIONS;
它将在 Hive Metastore 中创建分区元数据,并且分区将变得可用。
在此处阅读有关这两个命令的更多详细信息:RECOVER PARTITIONS