Cassandra 連接器

Cassandra 連接器允許查詢儲存在 Cassandra 或 ScyllaDB 中的資料。

相容性

連接器與從 2.1.5 開始的所有 Cassandra 版本相容。 最新測試的 ScyllaDB 版本為 5.1.11。

組態

若要設定 Cassandra 連接器,請建立一個目錄屬性檔案 etc/catalog/cassandra.properties,其內容如下,並將 host1,host2 替換為以逗號分隔的 Cassandra 節點清單,用於探索叢集拓撲

connector.name=cassandra
cassandra.contact-points=host1,host2

如果您的 Cassandra 節點未使用預設連接埠 (9042),您還需要設定 cassandra.native-protocol-port

對於 ScyllaDB,您無需新增任何額外的組態。ScyllaDB 預設使用與 Cassandra 相同的連接埠。只需在 cassandra.contact-points 組態屬性中指向 ScyllaDB 節點即可。

多個 Cassandra 或 ScyllaDB 叢集

您可以根據需要擁有任意數量的目錄,因此如果您有額外的 Cassandra (ScyllaDB) 叢集,只需在 etc/catalog 中新增另一個具有不同名稱的屬性檔案(確保它以 .properties 結尾)。例如,如果您將屬性檔案命名為 sales.properties,Presto 將使用設定的連接器建立一個名為 sales 的目錄。

組態屬性

以下組態屬性可用

屬性名稱

說明

cassandra.contact-points

Cassandra 叢集中主機的逗號分隔清單。Cassandra 驅動程式將使用這些聯絡點來探索叢集拓撲。至少需要一個 Cassandra 主機。

cassandra.native-protocol-port

執行原生用戶端協定的 Cassandra 伺服器連接埠(預設為 9042)。

cassandra.consistency-level

Cassandra 中的一致性層級是指讀取和寫入操作所使用的一致性層級。有關一致性層級的詳細資訊,請參閱 Cassandra 一致性 文件。此屬性預設為一致性層級 ONE。可能的值包括 ALLEACH_QUORUMQUORUMLOCAL_QUORUMONETWOTHREELOCAL_ONEANYSERIALLOCAL_SERIAL

cassandra.allow-drop-table

設定為 true 以允許透過 Presto 中的 DROP TABLE 刪除 Cassandra 表格(預設為 false)。

cassandra.username

用於驗證 Cassandra 叢集的用戶名稱。這是用於所有連線的全域設定,無論連線到 Presto 的使用者是誰。

cassandra.password

用於驗證 Cassandra 叢集的密碼。這是用於所有連線的全域設定,無論連線到 Presto 的使用者是誰。

cassandra.protocol-version

可以覆寫較舊 Cassandra 叢集的協定版本。此屬性預設為 V3。可能的值包括 V2V3V4

注意

如果啟用了授權,cassandra.username 必須具有足夠的權限,才能在 system.size_estimates 表格上執行 SELECT 查詢。

以下進階組態屬性可用

屬性名稱

說明

cassandra.fetch-size

在 Cassandra 查詢中一次擷取的列數。

cassandra.partition-size-for-batch-select

批次處理在一起的分割區數量,用於單一分割區索引鍵資料行的單一選取。

cassandra.split-size

查詢 Cassandra 時每個分割的索引鍵數量。

cassandra.splits-per-node

每個節點的分割數量。預設情況下,會使用 system.size_estimates 表格中的值。僅在連線到缺少 system.size_estimates 表格的 Cassandra 版本 < 2.1.5 時覆寫。

cassandra.client.read-timeout

Cassandra 驅動程式將等待來自一個 Cassandra 節點的查詢回應的最長時間。請注意,在發生讀取逾時時,基礎的 Cassandra 驅動程式可能會針對多個節點重試查詢。增加此值可能有助於使用索引的查詢。

cassandra.client.connect-timeout

Cassandra 驅動程式將等待建立與 Cassandra 節點連線的最長時間。增加此值可能有助於處理負載較重的 Cassandra 叢集。

cassandra.client.so-linger

如果未傳送的資料已排隊,則關閉時會停留的秒數。如果設定為零,則會立即關閉通訊端。當此選項為非零時,通訊端會停留那麼多秒,以確認所有資料都已寫入對等端。此選項可用於避免在不再需要連線時立即關閉它們,進而佔用 Cassandra 伺服器上的通訊端。

cassandra.retry-policy

用於重試對 Cassandra 的失敗請求的原則。此屬性預設為 DEFAULT。當查詢失敗並顯示「複本不足」時,使用 BACKOFF 可能有助於解決問題。其他可能的值包括 DOWNGRADING_CONSISTENCYFALLTHROUGH

cassandra.load-policy.use-dc-aware

設定為 true 以使用 DCAwareRoundRobinPolicy(預設為 false)。

cassandra.load-policy.dc-aware.local-dc

DCAwareRoundRobinPolicy 的本機資料中心名稱。

cassandra.load-policy.dc-aware.used-hosts-per-remote-dc

使用每個遠端資料中心的所提供的主機數量,作為 DCAwareRoundRobinPolicy 本機主機的容錯移轉。

cassandra.load-policy.dc-aware.allow-remote-dc-for-local

設定為 true 以允許對本機一致性層級使用遠端資料中心的主機。

cassandra.load-policy.use-token-aware

設定為 true 以使用 TokenAwarePolicy (預設為 false)。

cassandra.load-policy.shuffle-replicas

設定為 true 以使用具有副本隨機排序的 TokenAwarePolicy (預設為 false)。

cassandra.load-policy.use-white-list

設定為 true 以使用 WhiteListPolicy (預設為 false)。

cassandra.load-policy.white-list.addresses

用於 WhiteListPolicy 的主機列表,以逗號分隔。

cassandra.no-host-available-retry-timeout

用於 NoHostAvailableException 的重試逾時時間 (預設為 1m)。

cassandra.speculative-execution.limit

推測性執行的次數 (預設為 1)。

cassandra.speculative-execution.delay

每次推測性執行之間的延遲時間 (預設為 500ms)。

cassandra.tls.enabled

是否啟用 TLS 安全性 (預設為 false)。

cassandra.tls.keystore-path

PEM 或 JKS 金鑰儲存的路徑。

cassandra.tls.truststore-path

PEM 或 JKS 信任儲存的路徑。

cassandra.tls.keystore-password

金鑰儲存的密碼。

cassandra.tls.truststore-password

信任儲存的密碼。

查詢 Cassandra 或 ScyllaDB 資料表

users 資料表是 Cassandra 入門指南中的範例 Cassandra 資料表。可以使用 Cassandra 的 cqlsh (CQL 互動式終端機) 建立此資料表和 mykeyspace 索引鍵空間。

cqlsh> CREATE KEYSPACE mykeyspace
   ... WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
cqlsh> USE mykeyspace;
cqlsh:mykeyspace> CREATE TABLE users (
              ...   user_id int PRIMARY KEY,
              ...   fname text,
              ...   lname text
              ... );

此資料表可以在 Presto 中描述

DESCRIBE cassandra.mykeyspace.users;
 Column  |  Type   | Extra | Comment
---------+---------+-------+---------
 user_id | bigint  |       |
 fname   | varchar |       |
 lname   | varchar |       |
(3 rows)

然後可以在 Presto 中查詢此資料表

SELECT * FROM cassandra.mykeyspace.users;

資料類型

資料類型對應如下

Cassandra

Presto

ASCII

VARCHAR

BIGINT

BIGINT

BLOB

VARBINARY

BOOLEAN

BOOLEAN

DECIMAL

DOUBLE

DOUBLE

DOUBLE

FLOAT

REAL

INET

VARCHAR(45)

INT

INTEGER

LIST<?>

VARCHAR

MAP<?, ?>

VARCHAR

SET<?>

VARCHAR

TEXT

VARCHAR

TIMESTAMP

TIMESTAMP

TIMEUUID

VARCHAR

VARCHAR

VARCHAR

VARINT

VARCHAR

SMALLINT

INTEGER

TINYINT

INTEGER

DATE

DATE

任何集合 (LIST/MAP/SET) 都可以指定為 FROZEN,並且該值會對應到 VARCHAR。此外,blob 有不能為空的限制。

上表中未提及的類型不受支援 (例如 tuple 或 UDT)。

分割區索引鍵只能是以下類型

  • ASCII

  • TEXT

  • VARCHAR

  • BIGINT

  • BOOLEAN

  • DOUBLE

  • INET

  • INT

  • FLOAT

  • DECIMAL

  • TIMESTAMP

  • UUID

  • TIMEUUID

  • SMALLINT

  • TINYINT

  • DATE

限制

  • 不包含分割區索引鍵的篩選條件的查詢會導致提取所有分割區。這會導致掃描整個資料集,因此與使用分割區索引鍵作為篩選條件的類似查詢相比,速度會慢得多。

  • IN 列表篩選條件僅允許用於索引 (即分割區索引鍵或叢集索引鍵) 欄位。

  • 範圍篩選條件 (<>BETWEEN) 只能應用於分割區索引鍵。