日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Iceberg連接器

Iceberg是一種開放的數據湖表格式,使用Iceberg連接器可以查詢Iceberg格式的數據文件。

背景信息

Iceberg的詳細信息,請參見Iceberg概述。

前提條件

已創建DataLake集群或Hadoop集群,并選擇了Presto服務,詳情請參見創建集群。

使用限制

DataLake集群和EMR-3.38.0及后續版本的Hadoop集群,支持配置Iceberg連接器。

配置Iceberg連接器

修改Iceberg連接器配置,詳情請參見配置連接器。

連接器默認配置

您可以進入EMR控制臺的Trino服務的配置頁面,在服務配置區域,單擊iceberg.properties頁簽。您可以看到參數hive.metastore.uri,該參數表示Hive Metastore使用Thrift協議連接的URI。參數值請根據您實際情況修改。

Iceberg配置列表

您可以進入EMR控制臺的Trino服務的配置頁面,在服務配置區域,單擊iceberg.properties頁簽,然后單擊新增配置項,新增以下配置項。

參數

描述

iceberg.file-format

Iceberg表的數據存儲文件格式。支持以下格式:

  • ORC(默認值)

  • PARQUET

iceberg.compression-codec

寫入文件時使用的壓縮格式。支持以下格式:

  • GZIP(默認值)

  • ZSTD

  • LZ4

  • SNAPPY

  • NONE

iceberg.max-partitions-per-writer

每個writer最多可處理的分區數。默認值為100。

示例:查詢Iceberg表數據

使用Trino的基本語法即可查詢Iceberg表。

  1. 通過SSH方式連接集群,詳情請參見登錄集群。

  2. 連接Trino客戶端,詳情請參見通過命令行方式連接Trino。

  3. 執行以下命令,創建Schema。

    create schema iceberg.testdb;
  4. 執行以下命令,創建表iceberg_test。

    create table iceberg.testdb.iceberg_test(id int);
  5. 執行以下命令,向表iceberg_test中插入數據。

    insert into iceberg.testdb.iceberg_test values(1),(2);
    說明

    當集群配置為使用DLF作為統一元數據管理服務時,不支持向Iceberg表執行寫操作。

  6. 執行以下命令,查詢表數據。

    select * from iceberg.testdb.iceberg_test;

    返回如下信息。

     id
    ----
     1
     2

SQL語法

Iceberg連接器支持讀寫Iceberg表數據和元信息,除了支持基礎的SQL語法,還支持下表語法。

SQL語法

描述

INSERT

詳細內容請參見INSERT

DELETE

可以參見本文的按分區刪除。更多詳情請參見DELETE。

Schema and table management

可以參見本文的分區表。更多詳情請參見Schema and table management。

Materialized view management

可以參見本文的物化視圖。更多詳情請參見Materialized view management。

View management

詳細內容請參見View management。

分區表

Iceberg可以基于如下函數對表進行分區。

函數

描述

year(ts)

按年創建分區,分區值是從ts到1970年1月1日之間的年份差。

month(ts)

按月創建分區,分區值是從ts到1970年1月1日之間的月份差。

day(ts)

按天創建分區,分區值是從ts到1970年1月1日之間的天數差。

hour(ts)

按小時創建分區,分區值是ts忽略分鐘和秒的時間戳值。

bucket(x, nbuckets)

數據被Hash到指定數量的桶,分區值是x的整數Hash值,范圍是[0, nbuckets - 1)。

truncate(s, nchars)

分區值是s的前nchars個字符。

例如,customer_orders表按order_date的月份值、account_number的哈希值 (桶數量為10)和country進行分區。

CREATE TABLE iceberg.testdb.customer_orders (
    order_id BIGINT,
    order_date DATE,
    account_number BIGINT,
    customer VARCHAR,
    country VARCHAR)
WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country'])

按分區刪除

對于分區表,如果WHERE子句對整個分區進行過濾,則Iceberg連接器支持刪除整個分區。例如,下面代碼將刪除country=US的所有分區。

DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US'

目前,Iceberg連接器僅支持按分區刪除。例如,下面代碼選擇分區中的一些行進行刪除,運行則會報錯。

DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US' AND customer = 'Freds Foods'

回滾

Iceberg支持數據的Snapshot模型,其中表快照由Snapshot ID標識。

Iceberg連接器為每個Iceberg表提供了一個系統快照表,快照由BIGINT類型的Snapshot ID標識,您可以通過運行以下命令查看customer_orders表的最新Snapshot ID。

SELECT snapshot_id FROM iceberg.testdb."customer_orders$snapshots" ORDER BY committed_at DESC LIMIT 1

使用system.rollback_to_snapshot可以將表的狀態回滾到之前的快照ID。

CALL iceberg.system.rollback_to_snapshot('testdb', 'customer_orders', 895459706749342****)

系統表和列

Iceberg連接器支持查詢系統表分區。例如,Iceberg表customer_orders,執行以下語句可以顯示表分區,包括每個分區列的最大值和最小值。

SELECT * FROM iceberg.testdb."customer_orders$partitions"

Iceberg表屬性

下表列出了Iceberg表的屬性。

屬性名

描述

format

指定表的數據文件存儲格式。支持以下格式:

  • ORC(默認值)

  • PARQUET

partitioning

指定表的分區。

例如,表的分區列有c1和c2,該屬性便為partitioning = ARRAY['c1', 'c2']。

location

指定表所在的文件系統地址URI。

例如,下表定義了PARQUET格式的文件,由c1和c2列分區,文件系統地址為/var/my_tables/test_table。

CREATE TABLE test_table (
    c1 integer,
    c2 date,
    c3 double)
WITH (
    format = 'PARQUET',
    partitioning = ARRAY['c1', 'c2'],
    location = '/var/my_tables/test_table')

物化視圖

Iceberg連接器支持物化視圖,每個物化視圖包含一個視圖定義和Iceberg表,表名稱存儲在物化視圖屬性,數據存儲在Iceberg表里。

物化視圖支持操作如下表。

操作語句

描述

CREATE MATERIALIZED VIEW

創建并查詢物化視圖的數據。

您可以使用Iceberg表屬性控制表存儲格式。例如,使用ORC存儲數據文件,使用_date列按天進行分區。

WITH ( format = 'ORC', partitioning = ARRAY['event_date'] )

REFRESH MATERIALIZED VIEW

更新物化視圖的數據。

該操作會先刪除Iceberg表數據,再插入物化視圖Query定義的執行結果。

重要

刪除和插入之間有一個小的時間窗口,當物化視圖數據為空時,如果插入操作失敗了,物化視圖會保持空數據。

您也可以使用該語句,刪除物化視圖的定義和Iceberg表。