Databend 近期釋出 Apache Iceberg 和 Delta Table 兩類表引擎,以提供對兩種目前最受歡迎的開放表格式的支援,滿足基於不同技術棧的現代資料湖方案面臨的高階分析需求。
採用基於 Databend / Databend Cloud 的一站式解決方案,可以在不啟用額外的 Spark / Databricks 服務的前提下,完成對開放表格式資料的洞見,簡化部署架構與分析流程。此外,利用 Databend / Databend Cloud 在 Apache OpenDAL™ 之上構建的資料訪問方案,可以便捷訪問數十種儲存服務,包括物件儲存、HDFS 甚至 IPFS ,可以與現有技術棧輕鬆整合。
優勢
在使用開放表格式引擎時,只需要指定表引擎的型別(Delta 或 Iceberg)和資料檔案儲存的位置,即可直接訪問對應的表並利用 Databend 進行查詢。
利用 Databend 的開放表格式引擎,可以輕鬆應對混合不同資料來源、不同表格式資料的場景:
在同一個資料庫物件下,查詢和分析以不同格式彙總的資料表。
憑藉 Databend 的豐富儲存後端整合,應對不同儲存後端中的資料訪問需求。
不足
目前 Apache Iceberg 和 Delta Lake 引擎僅支援只讀操作,也就是隻能查詢資料,無法向表中寫入資料。
表的 Schema 是在表建立時確定的,如果對原始表的 Schema 進行了修改,為了保證資料的一致與同步,需要在 Databend 中重新建立表。
使用方法
-- Set up connection
CREATE [ OR REPLACE ] CONNECTION [ IF NOT EXISTS ] <connection_name>
STORAGE_TYPE = '
[ <storage_params> ]
-- Create table with Open Table Format engine
CREATE TABLE <table_name>
ENGINE = [Delta | Iceberg]
LOCATION = '<location_to_table>'
CONNECTION_NAME = '<connection_name>'
小貼士: Databend 中使用 CONNECTION 管理與外部儲存服務進行互動所需的詳細資訊,比如訪問憑證、端點 URL 和儲存型別。透過指定 CONNECTION_NAME ,可以在建立資源時複用 CONNECTION,簡化儲存配置的管理和使用。
與 Catalog 方案的對比
此前 Databend 已經透過 Catalog 提供 Iceberg 和 Hive 的支援,相比表引擎,Catalog 更加適合完整對接相關生態,一次性掛載多個資料庫和表的情況。
而新增的開放表格式引擎在體驗上更加靈活,支援在同一個資料庫下彙總並混合來自不同資料來源、不同表格式的資料,並進行有效地分析與洞見。
Workshop:使用 Databend Cloud 分析 Delta Table 中的資料
在這個示例將會展示如何利用 Databend Cloud 載入並分析位於物件儲存中的 Delta Table 。
我們將會使用經典的企鵝體態特徵資料集(penguins),將其轉化為 Delta Table 並放置在 S3 相容的物件儲存中。該資料集一共包含 8 個變數,其中 7 個特徵變數,1 個分類變數,共計 344 個樣本。
分類變數為企鵝類別(species),屬於硬尾企鵝屬的三個亞屬,分別是 Adélie ,Chinstrap 和 Gentoo 。
包含的三種企鵝的六個特徵,分別是所在島嶼(island),嘴巴長度(bill_length_mm),嘴巴深度(bill_depth_mm),腳蹼長度(flipper_length_mm),身體體重(body_mass_g),性別(sex)。
如果你還沒有 Databend Cloud 帳號,歡迎訪問 https://app.databend.cn/register 註冊並獲取免費額度。或者也可以參考 https://docs.databend.com/guides/deploy/ 在本地部署 Databend 。
本文中還涉及物件儲存的使用,也可以嘗試使用具有免費額度的 Cloudflare R2 建立 Bucket 。
向物件儲存中寫入資料
我們需要安裝對應的 Python 包,seaborn 負責提供原始資料,deltalake 負責將資料轉換為 Delta Table 並寫入 S3 :
pip install deltalake seaborn
然後,編輯下面的程式碼,配置對應的訪問憑據,並另存為 writedata.py :
import seaborn as sns
from deltalake.writer import write_deltalake
ACCESS_KEY_ID = '
SECRET_ACCESS_KEY = '
ENDPOINT_URL = '
storage_options = {
"AWS_ACCESS_KEY_ID": ACCESS_KEY_ID,
"AWS_SECRET_ACCESS_KEY": SECRET_ACCESS_KEY,
"AWS_ENDPOINT_URL": ENDPOINT_URL,
"AWS_S3_ALLOW_UNSAFE_RENAME": 'true',
}
penguins = sns.load_dataset('penguins')
write_deltalake("s3://penguins/", penguins, storage_options=storage_options)
執行上面的 Python 指令碼,以向物件儲存中寫入資料:
python writedata.py
使用 Delta 表引擎訪問資料
在 Databend 中建立對應的訪問憑據:
--Set up connection
CREATE CONNECTION my_r2_conn
STORAGE_TYPE = 's3'
SECRET_ACCESS_KEY = '
ACCESS_KEY_ID = '
ENDPOINT_URL = '
建立由 Delta 表引擎支援的資料表:
-- Create table with Open Table Format engine
CREATE TABLE penguins
ENGINE = Delta
LOCATION = 's3://penguins/'
CONNECTION_NAME = 'my_r2_conn';
利用 SQL 查詢和分析表中的資料
驗證資料的可訪問性
首先,讓我們輸出 5 個企鵝的種類和所在的島嶼,以檢查是否能夠正確訪問到 Delta Table 中的資料。
SELECT species, island FROM penguins LIMIT 5;
資料過濾
接下來,可以進行一些基本的資料過濾操作,比如找出腳蹼長度超過 210mm 的雄性企鵝可能屬於哪一個亞屬。
SELECT DISTINCT species
FROM penguins
WHERE sex = 'Male'
AND flipper_length_mm > 210;
資料分析
類似地,我們可以嘗試計算每隻企鵝嘴巴長度和深度的比例,並輸出最大的五個資料。
SELECT bill_length_mm / bill_depth_mm AS length_to_depth
FROM penguins
ORDER BY length_to_depth DESC
LIMIT 5;
混合資料來源案例:企鵝觀察日誌
現在將會進入一個有趣的部分:假設我們發現了科考站的一份觀察記錄,讓我們嘗試在同一個資料庫下錄入這份資料,並且嘗試進行一項簡單的資料分析:某隻特定性別的企鵝被某位科學家標記的機率是多少。
建立觀察日誌表
使用預設的 FUSE 引擎建立 penguin_observations 表,包含 ID、日期、姓名、企鵝種類與性別、備註等幾類資訊。
CREATE TABLE penguin_observations (
observation_id INT,
observation_date DATE,
observer_name VARCHAR,
penguin_species VARCHAR,
penguin_sex VARCHAR,
notes TEXT,
);
錄入觀察日誌
讓我們嘗試手工錄入全部 10 條日誌。已知日誌記錄中出現的企鵝互不相同。
INSERT INTO penguin_observations (observation_id, observation_date, observer_name, penguin_species, penguin_sex, notes)
VALUES
(1, '2023-01-01', 'Dr. Kowalski', 'Adelie', 'Male', 'Noticed aggressive behavior towards peers.'),
(2, '2023-01-02', 'Dr. Smith', 'Chinstrap', 'Female', 'Sighted building a nest.'),
(3, '2023-01-03', 'Dr. Kowalski', 'Gentoo', 'Female', 'Observed feeding offspring.'),
(4, '2023-01-04', 'Dr. Smith', 'Adelie', 'Male', 'Found resting by the shoreline.'),
(5, '2023-01-05', 'Dr. Kowalski', 'Adelie', 'Female', 'Engaged in mating rituals.'),
(6, '2023-01-06', 'Dr. Kowalski', 'Gentoo', 'Male', 'Spotted swimming in the open water.'),
(7, '2023-01-07', 'Dr. Smith', 'Chinstrap', 'Male', 'Appeared to be molting.'),
(8, '2023-01-08', 'Dr. Smith', 'Gentoo', 'Female', 'Seen with a potential mate.'),
(9, '2023-01-09', 'Dr. Kowalski', 'Adelie', 'Female', 'Observed preening feathers.'),
(10, '2023-01-10', 'Dr. Kowalski', 'Adelie', 'Male', 'Identified with a tagged flipper.');
計算標記機率
現在讓我們計算在所有企鵝中,某隻雄性 Adelie 企鵝被 Dr. Kowalski 觀察的機率。首先我們需要統計 Dr. Kowalski 觀察到的雄性 Adelie 企鵝的個數,然後統計所有記錄在案的雄性 Adelie 企鵝個數,最後相除得到結果。
SELECT
(SELECT COUNT()
FROM penguin_observations
WHERE observer_name = 'Dr. Kowalski'
AND species = 'Adelie'
AND sex = 'Male')::FLOAT /
(SELECT COUNT()
FROM penguins
WHERE species = 'Adelie'
AND sex = 'Male')::FLOAT AS observation_probability;
總結
憑藉組合不同表引擎進行查詢,Databend / Databend Cloud 可以支撐在同一個資料庫下混合不同格式的表,並進行分析與查詢。本文只是提供一個基本的 Workshop 供大家體驗功能和使用,歡迎大家基於這個案例進行擴充,探索更多組合 Iceberg 和 Delta Table 進行資料分析的場景,以及更多潛在的真實世界應用。
一文讀懂Databend的開放表格式引擎
相關文章
- 一文讀懂 Web 開發中常見的圖片格式Web
- 一文讀懂mavenMaven
- 一文讀懂微核心
- 一文讀懂特徵工程特徵工程
- 一文讀懂教育直播系統開發模式模式
- 一文讀懂支付系統
- 一文讀懂前端快取前端快取
- 一文讀懂野指標指標
- 一文讀懂“負載均衡”負載
- 一文讀懂web組態Web
- 一文讀懂機器學習中的模型偏差機器學習模型
- 一文讀懂元宇宙的特徵元宇宙特徵
- 一文讀懂HyperWorks的耦合求解功能
- 一文讀懂Java中的動態代理Java
- 一文讀懂Python中的對映Python
- 一文讀懂比特幣的軟分叉比特幣
- 一文讀懂DHCP的工作原理和作用
- 一文讀懂 JavaScript 和 ECMAScript 的區別JavaScript
- 一文讀懂git核心工作原理Git
- 一文讀懂:GBDT梯度提升梯度
- 一文讀懂Kafka副本機制Kafka
- JVM(2)--一文讀懂垃圾回收JVM
- 一文讀懂Spring整合RedisSpringRedis
- 【Flutter】一文讀懂混入類MixinFlutter
- 一文讀懂Go Http Server原理GoHTTPServer
- 一文讓你迅速讀懂ServerlessServer
- 一文讀懂系列-JVM垃圾收集JVM
- 一文讀懂Smartbi的自然語言分析(NLA)
- 一文讀懂STM32的基本系統
- 一文讀懂 TDengine 的三種查詢功能
- 一文讀懂TDengine的視窗查詢功能
- 【晶片】一文讀懂:真實的中國晶片產業晶片產業
- 一文讀懂BeanFactory和FactoryBean區別Bean
- 一文讀懂 Redis 分散式部署方案Redis分散式
- 一文讀懂JAVA多執行緒Java執行緒
- 一文讀懂MySQL複製機制MySql
- 一文讀懂容器儲存介面 CSI
- 告別DNS劫持,一文讀懂DoHDNS