Amazon AWS Athena HIVE_CANNOT_OPEN_SPLIT:打开 Hive 拆分时出错/无效的 Parquet 文件,Parquet 文件使用 Athena 压缩为 gzip

Amazon AWS Athena HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split / Not valid Parquet file, parquet files compress to gzip with Athena

我正在尝试在 Amazon Athena 上培养技能。 我已经成功地使用 Athena 查询 JSON 和 Apache Parquet 格式的数据。 我现在要做的是对其添加压缩 (gzip)。

我的 JSON 数据:

{
    "id": 1,
    "prenom": "Firstname",
    "nom": "Lastname",
    "age": 23
}

然后,我使用 npm 模块将 JSON 转换为 Apache Parquet 格式:https://www.npmjs.com/package/parquetjs

最后,我将获得的 parquet 文件压缩为 GZIP 格式并将其放入我的 s3 存储桶中:test-athena-personnes。

我的雅典娜 Table :

CREATE EXTERNAL TABLE IF NOT EXISTS personnes (
    id INT,
    nom STRING,
    prenom STRING,
    age INT
) 
STORED AS PARQUET
LOCATION 's3://test-athena-personnes/'
tblproperties ("parquet.compress"="GZIP");

然后,为了测试它,我发起了一个非常简单的请求:Select * from personnes;

我收到错误消息:

HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://test-athena-personnes/personne1.parquet.gz (offset=0, length=257): Not valid Parquet file: s3://test-athena-personnes/personne1.parquet.gz expected magic number: [80, 65, 82, 49] got: [-75, 1, 0, 0]

有什么我没听懂或者做的不好的地方吗?我可以在不使用 gzip 压缩的情况下请求 apache parquet 文件,但不能使用它。

提前致谢

Parquet文件由两部分组成[1]:

  1. 数据
  2. 元数据

当您尝试通过 Athena 读取此文件时,它会先尝试读取元数据,然后再读取实际数据。在您的情况下,您正在使用 Gzip 压缩 parquet 文件,当 Athena 尝试读取此文件时,它无法理解,因为元数据被压缩抽象化了。

所以压缩 parquet 文件的理想方式是 "while writing/creating the parquet file" 本身。所以你需要在使用 parquetjs

生成文件时提到压缩代码