Cassandra 连接器¶
Cassandra 连接器允许查询存储在 Cassandra 或 ScyllaDB 中的数据。
兼容性¶
连接器与所有 Cassandra 版本(从 2.1.5 开始)兼容。最新测试的 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 集群中主机列表,用逗号分隔。Cassandra 驱动程序将使用这些联系点来发现集群拓扑。至少需要一个 Cassandra 主机。 |
|
运行本机客户端协议的 Cassandra 服务器端口(默认值为 |
|
Cassandra 中的 Consistency Levels 指的是用于读写操作的一致性级别。有关 Consistency Levels 的更多信息,请参阅 Cassandra 一致性 文档。此属性默认为 |
|
设置为 |
|
用于对 Cassandra 集群进行身份验证的用户名。这是一个全局设置,用于所有连接,而不管连接到 Presto 的用户是谁。 |
|
用于对 Cassandra 集群进行身份验证的密码。这是一个全局设置,用于所有连接,而不管连接到 Presto 的用户是谁。 |
|
可以覆盖旧版 Cassandra 集群的协议版本。此属性默认为 |
注意
如果启用了授权,则 cassandra.username
必须拥有足够的权限才能在 system.size_estimates
表上执行 SELECT
查询。
以下高级配置属性可用
属性名称 |
描述 |
---|---|
|
在 Cassandra 查询中一次获取的行数。 |
|
将单个分区键列表中的分区批量组合到单个选择中的数量。 |
|
查询 Cassandra 时每个拆分的键数。 |
|
每个节点的拆分数量。默认情况下,将使用来自 |
|
Cassandra 驱动程序等待 Cassandra 节点查询响应的最长时间。请注意,底层 Cassandra 驱动程序可能会在读超时的情况下对多个节点重试查询。增加此值可能有助于使用索引的查询。 |
|
Cassandra 驱动程序建立与 Cassandra 节点连接的最长时间。增加此值可能有助于负载很高的 Cassandra 集群。 |
|
如果未发送的数据排队,则关闭时延迟的秒数。如果设置为零,则套接字将立即关闭。当此选项不为零时,套接字将延迟这么多秒,以获取对所有数据已写入对等方的确认。此选项可用于避免在不再需要连接时立即关闭连接,从而在 Cassandra 服务器上消耗套接字。 |
|
用于重试对 Cassandra 的失败请求的策略。此属性默认为 |
|
设置为 |
|
用于 |
|
使用每个远程数据中心提供的主机数量作为本地主机的故障转移,用于 |
|
设置为 |
|
设置为 |
|
设置为 |
|
设置为 |
|
逗号分隔的 |
|
针对 |
|
推测执行的次数(默认为 |
|
每次推测执行之间的延迟(默认为 |
|
是否启用 TLS 安全(默认为 |
|
PEM 或 JKS 密钥库的路径。 |
|
PEM 或 JKS 信任库的路径。 |
|
密钥库的密码。 |
|
信任库的密码。 |
查询 Cassandra 或 ScyllaDB 表格¶
users
表是 Cassandra 入门指南 中的示例 Cassandra 表格。可以使用 Cassandra 的 cqlsh(CQL 交互式终端)与 mykeyspace
keyspace 一起创建该表格
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
)筛选器只能应用于分区键。