无法使用 pyiceberg 和 Aws Glue 创建表

问题描述 投票:0回答:1

我正在尝试在 AWS Glue 中创建新的 Iceberg 表:

glue_database_name = "alex_iceberg_test_db"
glue_catalog_uri = "s3://alex-iceberg-test-storage"
my_namespace = 'alex_db'


# Instantiate glue catalog
catalog = load_catalog("glue", **{"type": "glue", 
                                  "s3.region": "region", 
                                  "profile": "ALEX",
                                  "s3.access-key-id": "XXX",
                                  "s3.secret-access-key": "YYY"})


# Define the Iceberg schema
schema = Schema(
    NestedField(field_id=1, name="data", field_type=StringType(), required=False)        
)


## Create the Iceberg table using the Iceberg catalog
table_name = 'test_1'
catalog.create_table(
    identifier=f'{my_namespace}.{table_name}',
    location=glue_catalog_uri,
    schema=schema
)

并出现以下错误

OSError: When getting information for key 'metadata/00000-5df640cc-b47c-4b39-b578-07113565dab5.metadata.json' in bucket 'alex-iceberg-test-storage': AWS Error ACCESS_DENIED during HeadObject operation: No response body.

内部

alex-iceberg-test-storage
我确实有元数据,但
00000-5df640cc-b47c-4b39-b578-07113565dab5.metadata.json
不存在。

为什么要搜索该文件以及谁应该创建它?

aws-glue apache-iceberg
1个回答
0
投票

您看到的错误消息表明 AWS Glue 正在尝试访问存储桶

00000-5df640cc-b47c-4b39-b578-07113565dab5
中名为
alex-iceberg-test-storage
.metadata.json 的文件,但无法找到它。该文件很可能包含 Iceberg 表格式的元数据。

在 Iceberg 中,元数据文件用于包含有关表结构、分区以及表运行所需的其他元数据的信息。 Iceberg 通常创建并管理这些文件。

但是,缺少此特定文件可能表明 Iceberg 表的构建或初始化方式存在问题。您可以检查并尝试以下几件事:

  1. 确保正确的设置: 检查 Iceberg 目录的 Glue 设置是否正确,包括 S3 存储桶的位置以及访问它所需的任何凭据或配置文件。
  2. 初始化Iceberg表:在构建表之前,您可能需要使用Iceberg API对其进行初始化。此步骤通常需要建立基本的元数据文件和目录结构。
  3. 检查权限: 确保 Glue 使用的 AWS 凭证具有读取和写入存储 Iceberg 表的 S3 存储桶所需的权限。
  4. 检查 Iceberg 版本:确保您使用的 Iceberg 库版本与您的 Glue 配置和 AWS 环境兼容。

还值得注意的是,AWS Glue 本身并不支持 Iceberg 格式,因此您可能需要使用自定义解决方案或其他工具来与 AWS 中的 Iceberg 表进行交互。

© www.soinside.com 2019 - 2024. All rights reserved.