DuckDB 作為高效能的嵌入式分析型資料函式庫,結合 Hugging Face 平臺豐富的資料集資源,能顯著提升資料分析效率。本文將解析 DuckDB 連線 Hugging Face 私有資料集的兩種驗證方法,並提供實戰經驗與程式碼範例。同時,也將介紹 MotherDuck 雲端資料倉儲的應用,涵蓋資料上傳、Schema 管理、資料函式庫分享等導向,讓讀者能快速上手並應用於實際專案。文章將著重於技術細節和實務操作,並分享一些使用技巧和注意事項,幫助讀者更有效地運用 DuckDB 和 MotherDuck 進行資料分析和管理。

DuckDB 高效連線 Hugging Face 私有資料集實戰

DuckDB 作為一款高效能的嵌入式分析型資料函式庫,在資料科學領域的應用日益廣泛。搭配 Hugging Face 平臺豐富的資料集資源,更能提升資料分析的效率。然而,在實際應用中,我們常常需要存取私有的 Hugging Face 資料集,這就需要安全的驗證機制。本文將深入解析 DuckDB 連線 Hugging Face 私有資料集的兩種驗證方法:CONFIG 和 CREDENTIAL_CHAIN,並分享玄貓在實戰中的一些心得體會。

產生並儲存 Hugging Face 存取權杖

首先,你需要在 Hugging Face 網站上產生一個存取權杖(Access Token)。請務必將此權杖儲存在安全的地方,因為它只會顯示一次。如果遺失,你必須使其失效並重新產生一個新的。

  flowchart TD
    A[前往 Hugging Face 網站] --> B[產生存取權杖]
    B --> C[儲存存取權杖]
    C --> D[確認權杖安全性]

圖表翻譯:

此流程圖展示了產生並儲存 Hugging Face 存取權杖的步驟:

  1. 前往 Hugging Face 網站
  2. 產生存取權杖
  3. 安全儲存產生的權杖
  4. 確認權杖的安全性

DuckDB 支援的驗證方法

DuckDB 主要支援兩種方法來存取 Hugging Face 的私有資料集:

  • CONFIG 提供者方法:你需要使用 CREATE SECRET 語法來指定你的存取權杖。
  • CREDENTIAL_CHAIN 提供者方法:DuckDB 會自動嘗試從你本機電腦的目錄中取得存取權杖。

CONFIG 提供者方法:直接提供存取權杖

CONFIG 方法需要你手動提供驗證憑證,特別是存取權杖。當你需要使用特定的權杖進行驗證時,這種方法非常有用。例如,在需要頻繁輪換權杖的環境中,或者你需要為每個服務設定明確的憑證時。

以下是如何使用 CREATE SECRET 語法來建立 hf_token 變數,並將其值設定為存取權杖:

import duckdb
conn = duckdb.connect()
conn.execute("""
CREATE SECRET hf_token (
    TYPE HUGGINGFACE,
    TOKEN '你的實際HuggingFace存取權杖'
);
""")

內容解密:

  • CREATE SECRET hf_token (...):這段程式碼定義了一個名為 hf_token 的 DuckDB 秘密物件,用於儲存 Hugging Face 的存取權杖。
  • TYPE HUGGINGFACE:指定秘密的型別為 Hugging Face,讓 DuckDB 知道如何使用這個秘密進行驗證。
  • TOKEN '你的實際HuggingFace存取權杖':設定存取權杖的值。請務必替換為你實際的權杖。

現在,你可以像存取公共資料集中的檔案一樣存取私有資料集:

result = conn.execute("""
SELECT *
FROM 'hf://datasets/Wei-Meng/StockPrices/AMZN.csv';
""").df()
print(result)

內容解密:

  • 這段程式碼會將 Amazon 的股票價格資料從指定的 Hugging Face 資料集中讀取並顯示為 pandas DataFrame。
  • hf://datasets/Wei-Meng/StockPrices/AMZN.csv 指定了要存取的私有資料集路徑。

CREDENTIAL_CHAIN 提供者方法:更安全的權杖管理

CONFIG 方法將存取權杖暴露在程式碼中,而 CREDENTIAL_CHAIN 方法則更安全,它將你的存取權杖儲存在一個檔案中。DuckDB 會自動從預設位置(例如你的本機電腦、環境變數或憑證檔案)取得憑證。

以下是如何使用 CREDENTIAL_CHAIN 方法:

首先,使用 pip 命令安裝 Hugging Face Hub Python 套件:

$ pip install huggingface_hub

安裝完成後,使用 login 選項執行 huggingface_cli 工具:

$ huggingface-cli login

系統會提示你輸入存取權杖。貼上你的存取權杖(螢幕上不會有任何回饋)然後按下 Enter。接下來,系統會詢問你是否要將存取權杖新增為 git 憑證。輸入 n 然後按下 Enter:

Add token as git credential? (Y/n) n

存取權杖現在會被儲存在 ~/.cache/huggingface/ 目錄下一個名為 token 的檔案中。

圖表說明:

  sequenceDiagram
    participant User as 使用者
    participant HFCLI as huggingface-cli
    participant Cache as ~/.cache/huggingface/token
    User->>HFCLI: 執行 huggingface-cli login
    HFCLI->>User: 提示輸入存取權杖
    User->>HFCLI: 輸入存取權杖
    HFCLI->>Cache: 儲存權杖到 token 檔案

圖表翻譯:

此時序圖展示了使用 huggingface-cli login 登入的流程:

  1. 使用者執行 huggingface-cli login
  2. 系統提示輸入存取權杖
  3. 使用者輸入存取權杖
  4. 權杖被儲存在 ~/.cache/huggingface/token 檔案中

現在,你可以使用 CREATE SECRET 語法來建立 hf_token 變數,並使用 CREDENTIAL_CHAIN 提供者方法將其值設定為存取權杖:

import duckdb
conn = duckdb.connect()
conn.execute("""
CREATE SECRET hf_token (
    TYPE HUGGINGFACE,
    PROVIDER CREDENTIAL_CHAIN
);
""")
result = conn.execute("""
SELECT *
FROM 'hf://datasets/Wei-Meng/StockPrices/AMZN.csv';
""").df()
print(result)

內容解密:

  • PROVIDER CREDENTIAL_CHAIN:指定使用憑證鏈提供者,讓 DuckDB 自動從預設位置尋找存取權杖。
  • 這段程式碼同樣會讀取並顯示 Amazon 的股票價格資料,但使用的是 CREDENTIAL_CHAIN 方法進行驗證。

權杖失效與更新

如果權杖失效(例如,如果你在 Hugging Face 上刪除了它),你可以簡單地刪除 ~/.cache/huggingface/ 目錄中的 token 檔案。如果權杖變更,你可以更新 token 檔案中的內容。

MotherDuck 雲端資料倉初體驗

對於許多資料分析使用者來說,複雜的資料基礎架構並非總是必需品。他們真正需要的,往往是一個能夠輕鬆託管和分享資料的無伺服器資料倉儲。這正是 MotherDuck 的用武之地。

MotherDuck:簡化雲端資料分析的起點

透過 MotherDuck,你可以毫不費力地將資料上傳到雲端,並立即開始查詢。MotherDuck 支援多種資料格式,如 Parquet、CSV、JSON、Iceberg 和 Delta Lake。更棒的是,透過名為「雙重執行」(Dual Execution)的功能,你可以選擇在本機執行部分查詢,同時在雲端執行其他部分。

快速上手:MotherDuck 註冊流程

要開始使用 MotherDuck,可以先從30 天的免費試用開始。試用期結束後,你可以選擇繼續使用免費帳戶,或升級到付費方案。以下是開始使用的步驟:

  1. 前往 MotherDuck 官網。
  2. 點選「30-DAY TRIAL」按鈕。
  flowchart LR
    A[前往 MotherDuck 官網] --> B[點選 30-DAY TRIAL]
    B --> C[選擇登入方式]
    C --> D[進入 MotherDuck Web UI]

圖表翻譯:

此流程圖展示了註冊 MotherDuck 的步驟:

  1. 前往 MotherDuck 官網
  2. 點選「30-DAY TRIAL」按鈕
  3. 選擇登入方式
  4. 進入 MotherDuck 的 Web UI

資料上傳與管理

在 MotherDuck 的 Web UI 中,你可以輕鬆地上傳和管理資料。以下是一些基本操作:

上傳資料

  1. 點選「Add Data」按鈕。
  2. 選擇要上傳的檔案(如 CSV 檔案)。
  3. 使用 SQL 陳述式將資料匯入到指定的資料函式庫和結構描述中。
CREATE OR REPLACE TABLE my_db.main.airlines AS 
SELECT * FROM read_csv_auto(['airlines.csv']);

內容解密:

  • 這段 SQL 陳述式將 airlines.csv 檔案的內容匯入到 my_db 資料函式庫的 main 結構描述中的 airlines 表格。

刪除資料

如果你不再需要某個表格,可以使用 DROP TABLE 陳述式將其刪除:

DROP TABLE my_db.main.airlines;

內容解密:

  • 這段 SQL 陳述式會刪除 my_db 資料函式庫中 main 結構描述下的 airlines 表格。

MotherDuck 資料倉管理:玄貓的雲端實戰經驗分享

身為一個在資料函式庫領域打滾多年的老手,玄貓對於新技術總是抱持著高度的好奇心。最近接觸了 MotherDuck,一個根據 DuckDB 的雲端資料函式庫服務,讓我眼睛一亮。它不僅具備 DuckDB 的高效能,更提供了雲端的便利性,讓資料分析師和開發者能更輕鬆地協作。

Schema 的妙用:資料組織的藝術

在 MotherDuck 中,Schema 就像資料的容器,可以將相關的 Table 組織在一起。雖然預設的 main Schema 已經很方便,但當資料量越來越大,或是需要區分不同專案的資料時,建立自己的 Schema 就變得非常重要。

建立 Schema

建立 Schema 的語法非常簡單:

CREATE SCHEMA my_db.Titanic;

內容解密:

  • 這行程式碼會在 my_db 資料函式庫下建立一個名為 Titanic 的 Schema。

在 Schema 中新增 Table

建立好 Schema 後,就可以把資料匯入到這個 Schema 中。以下是一個範例:

CREATE OR REPLACE TABLE my_db.Titanic.Titanic_train AS
SELECT * FROM read_csv_auto(['Titanic_train.csv']);

內容解密:

  • 這段程式碼會將 Titanic_train.csv 檔案匯入到 Titanic Schema 中,並建立一個名為 Titanic_train 的 Table。

資料函式庫分享:協作的根本

MotherDuck 最吸引玄貓的功能之一,就是它的資料函式庫分享功能。在過去,團隊成員之間分享大型資料集往往需要耗費大量的時間和資源。有了 MotherDuck,只需要上傳一次資料,就可以輕鬆地與團隊成員分享,大幅提升協作效率。

分享資料函式庫

要分享資料函式庫,只需要點選資料函式庫名稱旁邊的三個點,然後選擇 “Share”。

連線分享資料函式庫

分享建立完成後,MotherDuck 會提供一段 SQL 指令,讓使用者連線到分享資料函式庫:

ATTACH 'md://資料函式庫名稱' AS shared_db;

內容解密:

  • 這段 SQL 陳述式會將分享的資料函式庫附加到目前的連線中,命名為 shared_db

透過上述的實戰經驗分享,玄貓希望能夠幫助讀者更好地理解如何使用 DuckDB 連線 Hugging Face 私有資料集,以及如何利用 MotherDuck 進行雲端資料分析和管理。無論是資料的存取、分享還是協作,DuckDB 和 MotherDuck 都提供了強大而便捷的解決方案。

MotherDuck:雲端資料倉儲的革新實踐

隨著資料分析需求的日益增長,企業對於高效、靈活的資料處理方案的需求也與日俱增。MotherDuck 作為 DuckDB 的雲端延伸,憑藉其獨特的設計理念和技術優勢,為資料分析師和開發者提供了強大的資料倉儲能力。本文將深入探討 MotherDuck 的核心功能、技術特點及其在實際應用中的最佳實踐。

MotherDuck 的技術架構解析

MotherDuck 的技術架構建立在 DuckDB 的基礎之上,充分利用了 DuckDB 的高效能和靈活性。為了更好地理解 MotherDuck 的運作機制,我們首先需要了解其核心元件之間的互動關係。

  flowchart TD
    A[MotherDuck 使用者端] -->|SQL 查詢| B[MotherDuck 雲端服務]
    B -->|查詢最佳化| C[DuckDB 執行引擎]
    C -->|資料存取| D[雲端儲存服務]
    D -->|資料傳回| C
    C -->|結果傳回| B
    B -->|結果呈現| A

圖表解析:

此流程圖清晰地展示了 MotherDuck 的運作流程:

  1. 使用者端發起 SQL 查詢請求
  2. 雲端服務接收請求並進行查詢最佳化
  3. 最佳化後的查詢交由 DuckDB 執行引擎處理
  4. 執行引擎與雲端儲存服務互動,進行資料存取
  5. 查詢結果逐層傳回至使用者端

資料函式倉管理:Schema 的建立與應用

在 MotherDuck 中,Schema 是組織資料的重要工具。合理的 Schema 設計可以顯著提升查詢效率和資料管理的便捷性。

建立 Schema 的最佳實踐

-- 建立新的 Schema
CREATE SCHEMA IF NOT EXISTS flight_info;

-- 設定目前使用的 Schema
SET schema = 'flight_info';

-- 在新的 Schema 下建立資料表
CREATE TABLE airlines (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    country VARCHAR(50) NOT NULL
);

程式碼解析:

  1. 使用 CREATE SCHEMA 指令建立新的 Schema,若 Schema 已存在則忽略建立操作
  2. 透過 SET schema 指令切換至指定的 Schema
  3. 在設定的 Schema 下建立資料表,定義相關欄位及其屬性

資料函式庫分享機制:協作與資料共用

MotherDuck 提供了強大的資料函式庫分享功能,支援安全高效的資料協作。

資料函式庫分享的實作步驟

-- 建立範例資料表
CREATE TABLE flight_data (
    flight_id INT PRIMARY KEY,
    departure VARCHAR(50),
    destination VARCHAR(50),
    flight_date DATE
);

-- 插入範例資料
INSERT INTO flight_data VALUES
(1, '臺北', '東京', '2024-03-01'),
(2, '東京', '臺北', '2024-03-02');

-- 分享資料函式庫
SHARE my_db_WeiMengLee;

程式碼解析:

  1. 建立包含飛行資料的資料表
  2. 插入初始資料到資料表中
  3. 使用 SHARE 指令分享資料函式庫,讓其他使用者可以存取

資料函式庫連線與管理

在實際應用中,經常需要連線到已分享的資料函式庫。MotherDuck 提供了靈活的連線管理機制。

連線到分享資料函式庫

-- 連線到分享的資料函式庫
ATTACH 'md:_share/my_db_WeiMengLee/79ec5e33-a605-4ee2-a350-78b0378976c7';

-- 為分享的資料函式庫重新命名
ATTACH 'md:_share/my_db_WML/79ec5e33-a605-4ee2-a350-78b0378976c7' AS my_db_WML;

程式碼解析:

  1. 使用 ATTACH 指令連線到分享的資料函式庫
  2. 可以為連線的資料函式庫指定別名,方便管理和使用

資料函式庫維護與管理

除了基本的資料函式庫操作,MotherDuck 還提供了資料函式庫的維護功能。

資料函式庫更新與狀態檢視

-- 更新分享的資料函式庫
UPDATE SHARE my_db_WeiMengLee;

-- 檢視目前分享的資料函式庫清單
LIST SHARES;

程式碼解析:

  1. 使用 UPDATE SHARE 指令同步分享資料函式庫的更新
  2. 透過 LIST SHARES 指令檢視目前分享的資料函式庫狀態

資料倉儲管理:建立與維護

在 MotherDuck 中,除了預設的資料函式庫外,使用者可以根據需求建立自己的資料函式庫。

建立與管理資料函式庫

-- 建立新的資料函式庫
CREATE DATABASE flights_db;

-- 切換到指定的資料函式庫
USE flights_db;

-- 移除不再使用的資料函式庫連線
DETACH DATABASE old_db;

程式碼解析:

  1. 使用 CREATE DATABASE 指令建立新的資料函式庫
  2. 透過 USE 指令切換到指定的資料函式庫進行操作
  3. 使用 DETACH 指令移除不再使用的資料函式庫連線

最佳實踐與效能最佳化建議

  1. 合理設計 Schema 結構,根據資料特性進行適當的分割
  2. 使用索引提升查詢效能,特別是在大資料量的資料表上
  3. 定期進行資料函式庫維護,清理無用的資料和物件
  4. 利用 MotherDuck 的分享功能,實作團隊間的資料協作
  5. 根據實際需求選擇適當的資料儲存方案

DuckDB 與 MotherDuck:現代資料分析的利器

從資料存取到雲端管理,本文深入探討了 DuckDB 連線 Hugging Face 私有資料集的技巧,以及 MotherDuck 雲端資料倉儲的應用實踐。藉由 CONFIG 和 CREDENTIAL_CHAIN 兩種驗證方法,DuckDB 讓存取私有資料集變得安全且便捷。同時,MotherDuck 提供了無伺服器資料倉儲的優勢,簡化資料上傳、查詢、分享和協作流程。Schema 的靈活運用、資料函式庫分享機制,以及便捷的資料函式倉管理功能,更提升了資料處理的效率。放眼未來,DuckDB 與 MotherDuck 的結合,將持續推動資料分析領域的創新,為資料驅動的決策提供更強大的支援。更值得一提的是,MotherDuck 的雙重執行模式,允許部分查詢在本機執行,部分在雲端執行,兼顧效率與成本,展現了其在雲端資料分析領域的巨大潛力。對於追求高效、便捷、協作的資料分析解決方案的團隊和個人,DuckDB 與 MotherDuck 無疑是值得深入研究和應用的現代化工具。