如何从 Trino 读取 S3 中的数据分区

问题描述

我正在尝试从 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...