【问题标题】:How read data partitons in S3 from Trino如何从 Trino 读取 S3 中的数据分区
【发布时间】:2021-05-02 18:17:15
【问题描述】:

我正在尝试从 Trino 读取 S3 中的数据分区。 我到底做了什么:

我将所有分区的数据上传到 S3。我有一个指定的 avro 架构,我把它放在文件本地系统中。

然后我创建了一个外部配置单元表来指向 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

【问题讨论】:

标签: amazon-s3 hive hive-metastore trino hive-partitions


【解决方案1】:

在 Hive 中将分区文件夹和文件上传到 S3 并创建表是不够的,应该创建分区元数据。通常,您可以将文件夹不作为分区挂载。将表位置中的所有现有子文件夹挂载为分区:

使用msck修复表命令:

MSCK [REPAIR] TABLE tablename;

或 Amazon EMR 版本:

ALTER TABLE tablename RECOVER PARTITIONS;

它将在 Hive 元存储中创建分区元数据,并且分区将变得可用。

在此处阅读有关这两个命令的更多详细信息:RECOVER PARTITIONS

【讨论】:

    【解决方案2】:

    面临同样的问题。创建表后,我们需要使用 trino 的以下命令手动将 schema 同步到 Metastore。

    CALL system.sync_partition_metadata('<schema>', '<table>', 'ADD');
    

    参考:https://trino.io/episodes/5.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2022-10-30
      • 2017-04-01
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多