範例 HTTP 連接器

範例 HTTP 連接器有一個簡單的目標:透過 HTTP 讀取逗號分隔的資料。例如,如果您的資料量很大,且為 CSV 格式,您可以將範例 HTTP 連接器指向這些資料,並撰寫 SQL 查詢來處理它。

程式碼

範例 HTTP 連接器位於 Presto 原始碼樹狀結構根目錄的 presto-example-http 目錄中。

外掛程式實作

範例 HTTP 連接器中的外掛程式實作與其他外掛程式實作非常相似。大部分的實作都專注於處理選用組態,而唯一值得關注的函式如下:

@Override
public Iterable<ConnectorFactory> getConnectorFactories()
{
    return ImmutableList.of(new ExampleConnectorFactory());
}

請注意,ImmutableList 類別是 Guava 中的公用程式類別。

與所有連接器一樣,此外掛程式會覆寫 getConnectorFactories() 方法,並傳回 ExampleConnectorFactory

ConnectorFactory 實作

在 Presto 中,處理 Presto 與特定資料來源類型之間連線的主要物件是 Connector 物件,這些物件是使用 ConnectorFactory 建立的。

此實作可在 ExampleConnectorFactory 類別中使用。連接器工廠實作做的第一件事是指定此連接器的名稱。這是在 Presto 組態中用來參考此連接器的相同字串。

@Override
public String getName()
{
    return "example-http";
}

連接器工廠中的實際工作發生在 create() 方法中。在 ExampleConnectorFactory 類別中,create() 方法會設定連接器,然後要求 Guice 建立物件。這是 create() 方法的核心,不含參數驗證和例外處理:

// A plugin is not required to use Guice; it is just very convenient
Bootstrap app = new Bootstrap(
        new JsonModule(),
        new ExampleModule(catalogName));

Injector injector = app
        .doNotInitializeLogging()
        .setRequiredConfigurationProperties(requiredConfig)
        .initialize();

return injector.getInstance(ExampleConnector.class);

連接器:ExampleConnector

這個類別允許 Presto 取得連接器提供的各種服務的參考。

中繼資料:ExampleMetadata

這個類別負責報告此連接器提供的表格名稱、表格中繼資料、欄名稱、欄中繼資料以及其他關於結構描述的資訊。ConnectorMetadata 也會被 Presto 呼叫,以確保特定連接器可以理解並處理指定的表格名稱。

ExampleMetadata 實作會將許多這些呼叫委派給 ExampleClient,這個類別實作連接器的許多核心功能。

分割管理員:ExampleSplitManager

分割管理員會將表格的資料分割成個別區塊,Presto 會將這些區塊分發給工作節點進行處理。以範例 HTTP 連接器為例,每個表格都包含一個或多個指向實際資料的 URI。每個 URI 會建立一個分割。

記錄集提供者:ExampleRecordSetProvider

記錄集提供者會建立一個記錄集,而記錄集又會建立一個記錄游標,將實際資料傳回 Presto。ExampleRecordCursor 會透過 HTTP 從 URI 讀取資料。每一行都對應到單一列。行會以逗號分隔成個別的欄位值,然後傳回 Presto。