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 ドライバーは、これらの連絡先を使用してクラスタートポロジーを検出します。少なくとも 1 つの Cassandra ホストが必要です。

cassandra.native-protocol-port

ネイティブクライアントプロトコルを実行している Cassandra サーバーのポート (デフォルトは 9042)。

cassandra.consistency-level

Cassandra の整合性レベルは、読み取りと書き込みの両方の操作に使用される整合性のレベルを指します。整合性レベルの詳細については、Cassandra の整合性ドキュメントを参照してください。このプロパティは、デフォルトで整合性レベルが ONE に設定されています。可能な値には、ALLEACH_QUORUMQUORUMLOCAL_QUORUMONETWOTHREELOCAL_ONEANYSERIALLOCAL_SERIAL があります。

cassandra.allow-drop-table

DROP TABLE を介して Presto から Cassandra テーブルを削除できるようにするには、true に設定します (デフォルトは 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 ドライバーが 1 つの Cassandra ノードからのクエリの応答を待機する最大時間。基になる Cassandra ドライバーは、読み取りタイムアウトが発生した場合、複数のノードに対してクエリを再試行する可能性があることに注意してください。これを増やすと、インデックスを使用するクエリに役立つ場合があります。

cassandra.client.connect-timeout

Cassandra ドライバーが Cassandra ノードへの接続を確立するのを待機する最大時間。これを増やすと、負荷の高い Cassandra クラスターに役立つ場合があります。

cassandra.client.so-linger

送信されていないデータがキューに入っている場合に、クローズ時に猶予する秒数。ゼロに設定すると、ソケットはすぐに閉じられます。このオプションがゼロ以外の場合、ソケットは、すべてのデータがピアに書き込まれたことの確認のために、指定された秒数だけ猶予されます。このオプションを使用すると、不要になった接続をすぐに閉じることで、Cassandra サーバーでソケットが消費されるのを防ぐことができます。

cassandra.retry-policy

Cassandraへの失敗したリクエストを再試行するためのポリシー。このプロパティのデフォルトは DEFAULT です。BACKOFF を使用すると、“not enough replicas” でクエリが失敗する場合に役立つ可能性があります。その他の可能な値は、DOWNGRADING_CONSISTENCY および FALLTHROUGH です。

cassandra.load-policy.use-dc-aware

DCAwareRoundRobinPolicy を使用する場合は true に設定します(デフォルトは 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

TokenAwarePolicy を使用する場合は true に設定します(デフォルトは false です)。

cassandra.load-policy.shuffle-replicas

レプリカのシャッフルを伴う TokenAwarePolicy を使用する場合は true に設定します(デフォルトは false です)。

cassandra.load-policy.use-white-list

WhiteListPolicy を使用する場合は true に設定します(デフォルトは 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には空にできないという制限があります。

上記の表に記載されていない型はサポートされていません(例:タプルまたはUDT)。

パーティションキーは、次の型のみにすることができます

  • ASCII

  • TEXT

  • VARCHAR

  • BIGINT

  • BOOLEAN

  • DOUBLE

  • INET

  • INT

  • FLOAT

  • DECIMAL

  • TIMESTAMP

  • UUID

  • TIMEUUID

  • SMALLINT

  • TINYINT

  • DATE

制限事項

  • パーティションキーを含むフィルターがないクエリは、すべてのパーティションのフェッチになります。これにより、データセット全体のフルスキャンが発生するため、パーティションキーをフィルターとする同様のクエリと比較して、はるかに遅くなります。

  • IN リストフィルターは、インデックス付き(つまり、パーティションキーまたはクラスタリングキー)の列でのみ許可されます。

  • 範囲(< または > および BETWEEN)フィルターは、パーティションキーにのみ適用できます。