

# 查询 Iceberg 表数据


若要查询 Iceberg 数据集，请使用标准 `SELECT` 语句，如下所示。查询遵循 Apache Iceberg [格式 v2 规范](https://iceberg.apache.org/spec/#format-versioning)，并对位置和平等删除执行读取时合并。

```
SELECT * FROM [db_name.]table_name [WHERE predicate]
```

为了优化查询时间，所有谓词都会向下推送到数据所在的位置。

有关时间旅行和版本旅行查询的信息，请参阅[执行时间旅行和版本旅行查询](querying-iceberg-time-travel-and-version-travel-queries.md)。

## 使用 Iceberg 表创建和查询视图


要在 Iceberg 表上创建和查询 Athena 视图，请使用 [使用视图](views.md) 中所述的 `CREATE VIEW` 视图。

示例：

```
CREATE VIEW view1 AS SELECT * FROM iceberg_table
```

```
SELECT * FROM view1 
```

如果您想使用 [Iceberg 视图规范](https://github.com/apache/iceberg/blob/master/format/view-spec.md)创建视图，请联系 [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com)。

## 查询 Iceberg 表元数据


在 `SELECT` 查询中，您可以在 *table\$1name* 之后使用以下属性来查询 Iceberg 表元数据：
+ **\$1files** – 显示表的当前数据文件。
+ **\$1manifests** – 显示表的当前文件清单。
+ **\$1history** – 显示表的历史记录。
+ **\$1partitions** – 显示表的当前分区。
+ **\$1snapshots** – 显示表的快照。
+ **\$1refs** – 显示表的引用。

### 示例


以下语句列出了 Iceberg 表的文件。

```
SELECT * FROM "dbname"."tablename$files"
```

以下语句列出了 Iceberg 表的清单。

```
SELECT * FROM "dbname"."tablename$manifests" 
```

以下语句显示 Iceberg 表的历史记录。

```
SELECT * FROM "dbname"."tablename$history"
```

以下示例显示 Iceberg 表的分区。

```
SELECT * FROM "dbname"."tablename$partitions" 
```

以下示例列出了 Iceberg 表的快照。

```
SELECT * FROM "dbname"."tablename$snapshots" 
```

以下示例显示 Iceberg 表的引用。

```
SELECT * FROM "dbname"."tablename$refs" 
```

## 使用 Lake Formation 精细访问控制


Athena 引擎版本 3 支持使用 Iceberg 表进行 Lake Formation 精细访问控制，包括列级和行级安全访问控制。这种访问控制适用于时间旅行查询和已执行架构发展的表。有关更多信息，请参阅 [Lake Formation 精细访问控制和 Athena 工作组](lf-athena-limitations.md#lf-athena-limitations-fine-grained-access-control)。

如果您在 Athena 外部创建了 Iceberg 表，请使用 [Apache Iceberg SDK](https://iceberg.apache.org/releases/) 版本 0.13.0 或更高版本，以便在 Amazon Glue Data Catalog 中填充 Iceberg 表列信息。如果 Iceberg 表不包含 Amazon Glue 中的列信息，则可以使用 Athena [ALTER TABLE SET TBLPROPERTIES](querying-iceberg-alter-table-set-properties.md) 语句或最新的 Iceberg SDK 修复表并更新 Amazon Glue 中的列信息。