本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
查詢 Iceberg 資料表資料並執行時間歷程
若要查詢 Iceberg 資料集,請使用標準 SELECT
陳述式,如下所示。查詢遵循 Apache 冰山格式 v2 規範
SELECT * FROM [
db_name
.]table_name
[WHEREpredicate
]
為了盡量縮短查詢時間,所有述詞都會被推送到資料所在的位置。
時間歷程和版本歷程查詢
每個 Apache Iceberg 資料表都會有一份其所含 Amazon S3 物件的版本資訊清單。使用過往的版本資訊清單可查詢時間歷程和版本歷程。
Athena 中的時間歷程查詢可在 Simple Storage Service (Amazon S3) 中查詢截至某個指定日期和時間的資料,歷程資料會統一顯示成一個快照。Athena 中的版本歷程查詢可在 Simple Storage Service (Amazon S3) 中查詢截至某個指定快照 ID 的歷程資料。
時間歷程查詢
若要執行時間歷程查詢,請在 SELECT
陳述式的資料表名稱後加上 FOR TIMESTAMP AS OF
,如下列範例所示。timestamp
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF
timestamp
進行歷程查詢時所要指定的系統時間是時間戳記或含時區的時間戳記。如果沒有指定時間,則 Athena 會假設該值為世界協調時間 (UTC) 的時間戳記。
以下示例時間旅行查詢選擇指定日期和時間的 CloudTrail 數據。
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF TIMESTAMP '2020-01-01 10:00:00 UTC'
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF (current_timestamp - interval '1' day)
版本歷程查詢
若要執行版本歷程查詢 (即查看指定版本統一顯示的快照),請在 SELECT
陳述式中的資料表名稱後加上 FOR VERSION AS OF
,如下列範例所示。version
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
版本
參數是與 Iceberg 資料表版本相關的 bigint
快照 ID。
下列範例的版本歷程查詢會選擇指定版本的資料。
SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
注意
Athena 引擎版本 2 版中的 FOR SYSTEM_TIME AS OF
和 FOR SYSTEM_VERSION AS
OF
子句已由 Athena 引擎版本 3 中的 FOR
TIMESTAMP AS OF
and FOR VERSION AS OF
子句取代。
擷取快照 ID
您可以使用冰山提供的 Java SnapshotUtil
import org.apache.iceberg.Table; import org.apache.iceberg.aws.glue.GlueCatalog; import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.util.SnapshotUtil; import java.text.SimpleDateFormat; import java.util.Date; Catalog catalog = new GlueCatalog(); Map<String, String> properties = new HashMap<String, String>(); properties.put("warehouse", "s3://DOC-EXAMPLE-BUCKET/
my-folder
"); catalog.initialize("my_catalog", properties); Date date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse("2022/01/01 00:00:00"); long millis = date.getTime(); TableIdentifier name = TableIdentifier.of("db", "table"); Table table = catalog.loadTable(name); long oldestSnapshotIdAfter2022 = SnapshotUtil.oldestAncestorAfter(table, millis);
結合時間和版本的歷程
您可在同一查詢中使用時間歷程查詢和版本歷程查詢語法來指定不同的時間和版本控制條件,如下列範例所示。
SELECT table1.*, table2.* FROM [
db_name
.]table_name
FOR TIMESTAMP AS OF (current_timestamp - interval '1' day) AS table1 FULL JOIN [db_name
.]table_name
FOR VERSION AS OF 5487432386996890161 AS table2 ON table1.ts = table2.ts WHERE (table1.id IS NULL OR table2.id IS NULL)
使用 Iceberg 資料表建立和查詢檢視
若要在 Iceberg 資料表上建立和查詢 Athena 檢視,請遵循 使用檢視 中所述使用 CREATE VIEW
檢視。
範例:
CREATE VIEW view1 AS SELECT * FROM
iceberg_table
SELECT * FROM view1
如果您有興趣使用 Iceberg 檢視規格
使用 Lake Formation 精細存取控制
Athena 引擎版本 3 支援 Lake Formation 與 Iceberg 資料表的精細存取控制,包括資料欄層級和資料列層級的安全存取控制。此存取控制適用於時間歷程查詢及已執行結構描述演變的資料表。如需詳細資訊,請參閱 Lake Formation 精細存取控制和 Athena 工作群組。
如果您在 Athena 外部建立了 Iceberg 資料表,則請使用 Apache Iceberg SDK