在 HDInsight HBase 上使用 Apache Phoenix

已完成

HDInsight 上的 HBase 叢集隨附 Apache Phoenix。 Apache Phoenix 是建置在 Apache HBase 上的開放原始碼、大規模平行關聯式資料庫層。 Apache Phoenix 可讓您透過 HBase 使用類似 SQL 的查詢。 它使用基礎 JDBC 驅動程式,讓使用者可建立、刪除及更改 SQL 資料表。 您也可以編製索引、建立檢視和序列,以及個別和大量更新插入資料列。 Phoenix 會使用 noSQL 原生編譯 (而不是使用 MapReduce) 來編譯查詢,以在 HBase 上建立低延遲的應用程式。 Phoenix 新增了副處理器,以支援在伺服器的位址空間中執行用戶端提供的程式碼,並執行與資料共置的程式碼。 這種方法可將用戶端/伺服器資料傳輸降至最低。 如需詳細資訊,請參閱 Apache Phoenix 文件

How Apache Phoenix interfaces with Apache HBase.

HDInsight HBase 上的 Apache Phoenix 通常用來啟用自助式分析和擷取深入解析,說明如下。 Phoenix 可插入任何 ODBC 相容的 BI 工具中,並且可啟用 HBase 上的臨機操作 SQL 分析。

Self service with Apache HBase.

Apache HBase 和 Phoenix 結合後,可作為可變動資料的資料存放區。 HBase 上的 Apache Phoenix 查詢引擎隨附一些重要的功能。

次要索引

HBase 中的記錄可使用主資料列索引鍵,以及在主資料列索引鍵上按字母順序排列的單一索引來存取。 如果嘗試以主資料列以外的任何方式存取記錄,將會導致無法對 HBase 資料表中的所有資料進行有效率的掃描。 Apache Phoenix 可讓您在資料行和運算式上建立次要索引,進而建立替代的資料列索引鍵,允許依循此新索引的點查閱或範圍掃描。 如需詳細資訊,請參閱 Apache Phoenix 次要索引文件

CREATE INDEX 命令可用來在 HBase 中建立次要索引,如下所示。

CREATE INDEX ix_purchasetype on SALTEDWEBLOGS (purchasetype, transactiondate) INCLUDE (bookname, quantity); 

檢視

建議的策略是,限制 HBase 中的實體資料表數目,進而限制區域數目。 Phoenix 中的檢視可讓您在 HBase 上建立多個共用相同基礎實體資料表的虛擬資料表,以利實行此建議。 如需詳細資訊,請參閱 Apache Phoenix 檢視文件

假設 HBase 中的資料表定義如下。

CREATE  TABLE product_metrics (
    metric_type CHAR(1),
    created_by VARCHAR,
    created_date DATE,
    metric_id INTEGER
    CONSTRAINT pk PRIMARY KEY (metric_type, created_by, created_date, metric_id));

您可以定義下列檢視。

CREATE VIEW mobile_product_metrics (carrier VARCHAR, dropped_calls BIGINT) AS SELECT * FROM product_metric WHERE metric_type = 'm';

交易

雖然 HBase 僅適用於資料列層級交易,但藉由與 Apache Tephra 整合,Apache Phoenix 就能啟用跨資料表與跨資料列的交易,且具有完整的 ACID 支援。

如需詳細資訊,請參閱 Apache Phoenix 交易文件

下列範例會建立名為 my_table 的資料表,然後改變該資料表以啟用交易。

CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

進行 Salt 處理的資料表

如果資料列索引鍵單調增加,則在循序寫入期間,HBase 中可能會出現區域伺服器作用區。 Apache Phoenix 可讓您透過 Salt 位元組對特定資料表的資料列索引鍵進行 Salt 處理,藉以緩解作用區問題。 如需詳細資訊,請參閱「Apache Phoenix Salt 資料表」文件。

CREATE TABLE Saltedweblogs (
    transactionid varchar(500) Primary Key,
    transactiondate Date NULL,
    customerid varchar(50) NULL,
    bookid varchar(50) NULL,
    purchasetype varchar(50) NULL,
    orderid varchar(50) NULL,
    bookname varchar(50) NULL,
    categoryname varchar(50) NULL,
    invoicenumber varchar(50) NULL,
    invoicestatus varchar(50) NULL,
    city varchar(50) NULL,
    state varchar(50) NULL,
    paymentamount DOUBLE NULL,
    quantity INTEGER NULL,
    shippingamount DOUBLE NULL) SALT_BUCKETS=4;

略過掃描

對於指定的一組資料列,Apache Phoenix 可將「略過掃描」用於內部資料列掃描 (而不使用「範圍掃描」),以改善效能。 「略過掃描」會使用 SEEK_NEXT_USING_HINT HBase 篩選器。 它會儲存關於要在每個資料行中搜尋哪個索引鍵集合/索引鍵範圍的資訊。 然後,它會取用在篩選器評估期間傳來的索引鍵,並指出這是否屬於其中一個組合或範圍。 如果不是,則會指出下一個應跳到的最高索引鍵。 如需詳細資訊,請參閱 Apache Phoenix 略過掃描文件

Apache Phoenix 的效能最佳化是選用的要求功能,主要取決於底層的 HBase 效能最佳化。 效能最佳化是很複雜的主題,且不在此課程的討論之列。 但若您有興趣,可以參考 Apache Phoenix 效能最佳做法的相關文件。