Apache Zeppelin 中 Cassandra CQL 解释器

2024-05-23 22:48

本文主要是介绍Apache Zeppelin 中 Cassandra CQL 解释器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Name
Class
Description
%cassandra CassandraInterpreter 为Apache Cassandra CQL查询语言提供解释器

启用Cassandra解释器

在笔记本中,要启用Cassandra解释器,请单击Gear图标并选择Cassandra。

 

使用Cassandra解释器

在段落中,使用%cassandra来选择Cassandra解释器,然后输入所有命令。

要访问交互式帮助,请键入HELP;

 

解释器命令

所述Cassandra解释器接受下列命令

Command Type
Command Name
Description
Help command HELP 显示交互式帮助菜单
Schema commands DESCRIBE KEYSPACE, DESCRIBE CLUSTER, DESCRIBE TABLES ... 描述Cassandra模式的自定义命令
Option commands @consistency, @retryPolicy, @fetchSize ... 将运行时选项注入段落中的所有语句
Prepared statement commands @prepare, @bind, @remove_prepared 让您注册一个准备好的命令,并通过注入绑定值重新使用它
Native CQL statements All CQL-compatible statements (SELECT, INSERT, CREATE ...) 所有CQL语句都直接针对Cassandra服务器执行

CQL语句

该解释器与Cassandra支持的任何CQL语句兼容。例如:

INSERT INTO users(login,name) VALUES( 'jdoe' , 'John DOE' );
SELECT  *  FROM users WHERE login = 'jdoe'

除了以下特殊命令之外,每个语句都应以分号(;)分隔:

  1. @准备
  2. @bind
  3. @remove_prepare
  4. @一致性
  5. @serialConsistency
  6. @timestamp
  7. @retryPolicy
  8. @fetchSize
  9. @请求超时

只要它们以分号分隔,就支持多行语句以及同一行上的多个语句。例如:

USE spark_demo;
  
SELECT  *  FROM albums_by_country LIMIT  1 ; SELECT  *  FROM countries LIMIT  1 ;
  
SELECT  *
FROM artists
WHERE login = 'jlennon'

 

支持批处理语句,可以跨多行,以及DDL(CREATE / ALTER / DROP)语句:

BEGIN BATCH
     INSERT INTO users(login,name) VALUES( 'jdoe' , 'John DOE' );
     INSERT INTO users_preferences(login,account_type) VALUES( 'jdoe' , 'BASIC' );
APPLY  BATCH;
  
CREATE TABLE IF NOT EXISTS test(
     key  int  PRIMARY KEY,
     value text
); 

 

CQL语句不区分大小写(列名和值除外)。这意味着以下语句是等同和有效的:

INSERT INTO users(login,name) VALUES( 'jdoe' , 'John DOE' );
Insert into users(login,name) vAlues( 'hsue' , 'Helen SUE' ); 

 

所有CQL语句和版本的完整列表如下:

Cassandra版本
文件链接
3.X http://docs.datastax.com/en/cql/3.3/cql/cqlIntro.html
2.2 http://docs.datastax.com/en/cql/3.3/cql/cqlIntro.html
2.1&2.0 http://docs.datastax.com/en/cql/3.1/cql/cql intro c.html
1.2 http://docs.datastax.com/en/cql/3.0/cql/aboutCQL.html

声明中的评论

可以在语句之间添加注释。单行注释以哈希符号(#)或双斜杠(//)开头。多行注释在/ **和** /之间。例如:

#Single line comment style 1
INSERT INTO users(login,name) VALUES( 'jdoe' , 'John DOE' );
/ / Single line comment style  2
/ * *
  Multi line
  comments
  * * /
Insert into users(login,name) vAlues( 'hsue' , 'Helen SUE' ); 

语法验证

解释器随附了一个内置的语法验证器。此验证器仅检查基本语法错误。

所有与CQL相关的语法验证都直接委托Cassandra

大多数情况下,语法错误是由于语句或打字错误之间的分号丢失造成的。

 

模式命令

为了使模式发现更容易和更具交互性,支持以下命令:

 

命令
描述
DESCRIBE CLUSTER; 显示当前的群集名称及其分区
DESCRIBE KEYSPACES; 列出集群中的所有现有密钥空间及其配置(复制因子,持久写入...)
DESCRIBE TABLES; 列出集群中的所有现有密钥空间,并列出所有表的名称
DESCRIBE TYPES; 列出集群中的所有现有密钥空间,并列出所有用户定义的类型名称
DESCRIBE FUNCTIONS; 列出集群中的所有现有键空间,并列出所有函数的名称
DESCRIBE AGGREGATES; 列出集群中的所有现有密钥空间,并列出所有聚合名称
DESCRIBE MATERIALIZED VIEWS; 列出集群中的所有现有密钥空间,并列出所有实例化视图名称
DESCRIBE KEYSPACE <keyspacename>; 描述给定的密钥空间配置及其所有表的详细信息(名称,列,...)
DESCRIBE TABLE (<keyspacename>).<tablename>; 描述给定的表。如果没有提供密钥空间,则使用当前登录的密钥空间。如果没有登录密钥空间,则使用默认系统密钥空间。如果没有找到表,会出现错误信息
DESCRIBE TYPE (<keyspacename>).<typename>; 描述给定类型(UDT)。如果没有提供密钥空间,则使用当前登录的密钥空间。如果没有登录密钥空间,则使用默认系统密钥空间。如果没有找到类型,会出现错误信息
DESCRIBE FUNCTION (<keyspacename>).<functionname>; 描述给定的功能。如果没有提供密钥空间,则使用当前登录的密钥空间。如果没有登录密钥空间,则使用默认系统密钥空间。如果没有找到功能,则会出现错误信息
DESCRIBE AGGREGATE (<keyspacename>).<aggregatename>; 描述给定的聚合。如果没有提供密钥空间,则使用当前登录的密钥空间。如果没有登录密钥空间,则使用默认系统密钥空间。如果没有找到聚合,则会出现错误消息
DESCRIBE MATERIALIZED VIEW (<keyspacename>).<view_name>; 描述给定的视图。如果没有提供密钥空间,则使用当前登录的密钥空间。如果没有登录密钥空间,则使用默认系统密钥空间。如果没有找到任何视图,会出现错误信息

模式对象(集群,密钥空间,表,类型,功能和聚合)以表格格式显示。左上角有一个下拉菜单来展开对象细节。右上角的菜单显示“图标”图标。

 

运行时参数

有时您希望能够将运行时查询参数传递给您的语句。

这些参数不是CQL规范的一部分,而是特定于解释器。

以下是所有参数的列表:

参数
语法
描述
Consistency Level @consistency=value 将给定的一致性级别应用于段落中的所有查询
Serial Consistency Level @serialConsistency=value 将给定的串行一致性级别应用于段落中的所有查询
Timestamp @timestamp=long value 将给定的时间戳应用于段落中的所有查询。请注意,直接在CQL语句中传递的时间戳值将覆盖此值
Retry Policy @retryPolicy=value 将给定的重试策略应用于段落中的所有查询
Fetch Size @fetchSize=integer value 将给定的提取大小应用于段落中的所有查询
Request Time Out @requestTimeOut=integer value 将给定的请求超时以毫秒单位应用于段落中的所有查询

一些参数仅接受限制值:

参数
可能的值
Consistency Level ALL, ANY, ONE, TWO, THREE, QUORUM, LOCALONE, LOCALQUORUM, EACHQUORUM
Serial Consistency Level SERIAL, LOCALSERIAL
Timestamp Any long value
Retry Policy DEFAULT, DOWNGRADINGCONSISTENCY, FALLTHROUGH, LOGGINGDEFAULT, LOGGINGDOWNGRADING, LOGGINGFALLTHROUGH
Fetch Size Any integer value

请注意,您应该加分号(;在每个参数语句的结束)

一些例子:

CREATE TABLE IF NOT EXISTS spark_demo.ts(
     key  int  PRIMARY KEY,
     value text
);
TRUNCATE spark_demo.ts;
  
/ /  Timestamp  in  the past
@timestamp = 10
  
/ /  Force timestamp directly  in  the first insert
INSERT INTO spark_demo.ts(key,value) VALUES( 1 , 'first insert' ) USING TIMESTAMP  100 ;
  
/ /  Select some data to make the clock turn
SELECT  *  FROM spark_demo.albums LIMIT  100 ;
  
/ /  Now insert using the timestamp parameter  set  at the beginning( 10 )
INSERT INTO spark_demo.ts(key,value) VALUES( 1 , 'second insert' );
  
/ /  Check  for  the result. You should see  'first insert'
SELECT value FROM spark_demo.ts WHERE key = 1

有关查询参数的一些注释:

  1. 许多查询参数可以在同一段落中设置
  2. 如果相同的查询参数用不同的值设置很多时间,则解释器仅考虑第一个值
  3. 每个查询参数都适用于同一段落中的所有CQL语句,除非您使用纯CQL文本覆盖选项(如强制使用USING子句的时间戳)
  4. 关于CQL语句的每个查询参数的顺序并不重要

 

支持准备声明

出于性能原因,最好先准备语句,然后通过提供绑定值重用它们。

此解释器提供3个命令来处理准备和绑定的语句:

  1. @prepare
  2. @bind
  3. @remove_prepared

例:

@prepare [statement - name] = ...
  
@bind [statement - name] = ’text’,  1223 , ’ 2015 - 07 - 30  12 : 00 : 01 ’, null, true, [‘list_item1’, ’list_item2’]
  
@bind [statement - name - with - no - bound - value]
  
@remove_prepare [statement - name] 
@prepare

您可以使用语法“@prepare [statement-name] = SELECT ...”来创建一个准备好的语句。该语句名强制性的,因为翻译准备与Java驱动程序给定的语句,并在保存生成的准备语句内部哈希表,使用所提供的语句名作为搜索关键字。

请注意,内部准备的语句映射与所有笔记本所有段落共享,因为Cassandra只有一个解释器实例

如果解释器遇到相同的statement-name(key)的许多 @prepare,那么只有第一个语句才会被考虑。      

 

例:

@prepare [select] = SELECT  *  FROM spark_demo.albums LIMIT ?
  
@prepare [select] = SELECT  *  FROM spark_demo.artists LIMIT ?  

对于上述示例,准备好的语句是SELECT * FROM spark_demo.albums LIMIT ?。`SELECT * FROM spark_demo.artists LIMIT?被忽略,因为已准备好的语句映射中已经存在一个条目,带有key select。

Zeppelin的背景下,笔记本可以定期执行,因此有必要避免重新准备许多时间相同的声明(被认为是反模式)

@bind

一旦准备好声明(可能在分开的笔记本/段落中)。您可以将值绑定到它:

@bind [select_first] = 10 

绑定值不是@bind语句的强制值。但是,如果您提供绑定值,则需要遵守一些语法: 

  • 字符串值应包含在简单引号(')之间
  • 日期值应包含在简单引号(')之间,并遵循格式:
    1. yyyy-MM-dd HH:MM:ss
    2. yyyy-MM-dd HH:MM:ss.SSS
  • null按原样解析
  • 布尔值(true | false)按原样解析
  • 集合值必须遵循标准的CQL语法
    • 列表:['list item1','list item2',...]
    • 设置:{'set item1','set item2',...}
    • map:{'key1':'val1','key2':'val2',...}
  • 元组值应该在括号之间(见元组CQL语法):('text',123,true)
  • udt值应该在括号之间(见UDT CQL语法):{stree name:'Beverly Hills',number:104,邮编:90020,state:'California',...}
 

可以在批处理中使用@bind语句:

BEGIN BATCH
    @bind [insert_user] = 'jdoe' , 'John DOE'
    UPDATE users  SET  age  =  27  WHERE login = 'hsue' ;
APPLY  BATCH; 
 
@remove_prepare
为了避免准备好的语句永远保留在准备好的语句映射中,您可以使用 @remove_prepare [statement-name]语法将其删除。删除不存在的准备语句不会产生错误。

 

使用动态表单

而不是对CQL查询进行硬编码,可以使用Zeppelin动态表单语法注入简单的值或多个选择表单。

仍然支持绑定输入文本和选择表单的旧式胡须语法({{}}),但不推荐使用,并在将来的版本中将其删除。

传统 简单参数的语法是:{{input_Label = default value}}。默认值是强制性的,因为第一次执行该段落,我们在呈现表单之前启动CQL查询,因此应提供至少一个值。

多选择参数的语法是:{{input_Label = value1 | value2 | ... | valueN}}。默认情况下,第一次执行该段落时,首选用于CQL查询。

例:

#Secondary index on performer style
SELECT name, country, performer
FROM spark_demo.performers
WHERE name = '${performer=Sheryl Crow|Doof|Fanfarlo|Los Paranoia}'
AND styles CONTAINS  '${style=Rock}' ;  

在上面的例子中,第一个CQL查询将执行为performer ='Sheryl Crow'AND style ='Rock'。对于后续查询,您可以使用表单直接更改值。

请注意,我们在简单引号(')之间附带了$ {}块,因为Cassandra希望有一个String。我们也可以使用$ {style ='Rock'}语法,但这次,表单上显示的值是“Rock”而不是Rock        

也可以使用动态表单来准备语句

@bind [select] = = '${performer=Sheryl Crow|Doof|Fanfarlo|Los Paranoia}' '${style=Rock}' 

共享状态

可以并行执行许多段落。但是,在后端,我们仍然使用同步查询。 只有当有可能返回值时,异步执行才是可能FutureInterpreterResult。这可能是Zeppelin项目的一个有趣的建议。

最近,Zeppelin允许您选择解释员的隔离级别(请参阅解释器绑定模式)。

长篇小说,你有3个可用的绑定:

  • shared相同的JVM和所有注释的相同的解释器实例 
  • 范围相同的JVM不同的解释器实例,每个音符一个
  • 隔离不同的JVM运行单个解释器实例,每个音符一个JVM

使用共享绑定,所有注释和段落com.datastax.driver.core.Session都使用相同的对象。因此,如果您使用USE 密钥空间名称 ; 声明登录到一个密钥空间,它会更改密钥空间 所有当前用户的的卡桑德拉解释,因为我们只能创造1个%的实例对象卡桑德拉解释。          com.datastax.driver.core.Session   

同样的说法也适用于准备好的语句哈希映射,它由所有使用Cassandra解释器的实例共享。

当使用作用域绑定时,在同一个JVM中, Zeppelin将创建Cassandra解释器的多个实例,从而创建多个com.datastax.driver.core.Session对象。小心使用这种绑定的资源和内存使用!

所述分离的模式是最极端的,并且将创建许多JVM / com.datastax.driver.core.Session因为有不同的笔记对象。

 

解释器配置

要配置Cassandra解释器,请转到解释器菜单,向下滚动以更改参数。该卡珊德拉解释器使用的是官方卡桑德拉Java驱动程序和大多数参数都用于配置Java驱动程序

以下是配置参数及其默认值。

属性名称
描述
默认值
cassandra.cluster 要连接的Cassandra群集的名称 Test Cluster
cassandra.compression.protocol 在线压缩 可能的值为:NONE,SNAPPY,LZ4 NONE
cassandra.credentials.username 如果启用安全性,请提供登录 none
cassandra.credentials.password 如果启用安全性,请提供密码 none
cassandra.hosts 逗号分隔Cassandra主机(DNS名称或IP地址)。 
例如:'192.168.0.12,node2,node3'
localhost
cassandra.interpreter.parallelism 可执行的并发段数(查询块)数 10
cassandra.keyspace 要连接的默认键盘空间。强烈建议让默认值在表名前加上所有查询中的实际键空格 system
cassandra.load.balancing.policy

负载均衡策略。Default = new TokenAwarePolicy(new DCAwareRoundRobinPolicy())  要指定您自己的策略,请提供您的策略的完全限定类名(FQCN)

在运行时,解释器将使用Class.forName(FQCN)实例化策略,  

DEFAULT
cassandra.max.schema.agreement.wait.second Cassandra max模式协议等待第二 10
cassandra.pooling.core.connection.per.host.local 协议V2及以下default = 2.协议V3及以上default = 1 2
cassandra.pooling.core.connection.per.host.remote 协议V2及以下default = 1.协议V3及以上default = 1 1
cassandra.pooling.heartbeat.interval.seconds 卡桑德拉泳池心跳间隔(秒) 30
cassandra.pooling.idle.timeout.seconds Cassandra空闲时间在几秒钟内 120
cassandra.pooling.max.connection.per.host.local Protocol V2及以下default = 8.协议V3及以上default = 1 8
cassandra.pooling.max.connection.per.host.remote 协议V2及以下default = 2.协议V3及以上default = 1 2
cassandra.pooling.max.request.per.connection.local 协议V2及以下默认值= 128.协议V3及以上默认值= 1024 128
cassandra.pooling.max.request.per.connection.remote 协议V2及以下默认值= 128.协议V3及以上默认值= 256 128
cassandra.pooling.new.connection.threshold.local 协议V2及以下默认值= 100.协议V3及以上默认= 800 100
cassandra.pooling.new.connection.threshold.remote 协议V2及以下默认值= 100.协议V3及以上default = 200 100
cassandra.pooling.pool.timeout.millisecs Cassandra游泳池以毫秒为单位超时 5000
cassandra.protocol.version Cassandra二进制协议版本 4
cassandra.query.default.consistency Cassandra查询默认一致性级别 
可用值:ONE,TWO,THREE,QUORUM,LOCAL ONE,LOCAL QUORUM,EACH QUORUM,ALL
ONE
cassandra.query.default.fetchSize Cassandra查询默认提取大小 5000
cassandra.query.default.serial.consistency Cassandra查询默认串行一致性级别 
可用值:SERIAL,LOCALSERIAL
SERIAL
cassandra.reconnection.policy

Cassandra重新连接政策。Default = new ExponentialReconnectionPolicy(1000, 10 * 60 * 1000) 要指定自己的策略,请提供策略的完全限定类名(FQCN)

在运行时,解释器将使用Class.forName(FQCN)实例化策略,  

DEFAULT
cassandra.retry.policy Cassandra重试政策 Default = DefaultRetryPolicy.INSTANCE要指定您自己的策略,请提供您的策略的完全限定类名(FQCN)。在运行时,解释器将使用Class.forName(FQCN)实例化策略,   DEFAULT
cassandra.socket.connection.timeout.millisecs Cassandra套接字默认连接超时(毫秒) 500
cassandra.socket.read.timeout.millisecs Cassandra套接字以毫秒为单位读取超时 12000
cassandra.socket.tcp.no_delay Cassandra套接字TCP没有延迟 true
cassandra.speculative.execution.policy

Cassandra投机执行政策 Default = NoSpeculativeExecutionPolicy.INSTANCE要指定您自己的策略,请提供策略的完全限定类名(FQCN)

在运行时,解释器将使用Class.forName(FQCN)实例化策略。

DEFAULT

更改日志

3.0 (Zeppelin 0.7.1)

  • 更新文档
  • 更新交互式文档
  • 添加对二进制协议V4的支持 
  • 实现新的@requestTimeOut运行时选项
  • 将Java驱动程序版本升级到3.0.1
  • 允许解释器在使用FormType.SIMPLE时以编程方式添加动态表单
  • 允许动态窗体使用默认的Zeppelin语法
  • 在FallThroughPolicy上修正打字错误
  • 在创建动态表单之前,请先查看AngularObjectRegistry中的数据
  • 添加缺少的ALTER语句支持

2.0 (Zeppelin 0.7.1)

  • 更新帮助菜单并添加更改日志
  • 添加对用户定义函数用户定义的聚合物化视图的支持
  • 将Java驱动程序版本升级到3.0.0-rc1

1.0 (Zeppelin 0.5.5-孵育)

  • 初始版本

 

错误和联系人

如果您遇到这个解释器的错误,请在@doanduyhai创建一个JIRA票,并在Twitter上打我一下。


这篇关于Apache Zeppelin 中 Cassandra CQL 解释器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/996637

相关文章

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

Apache HttpClient使用详解

转载地址:http://eksliang.iteye.com/blog/2191017 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟

开源Apache服务器安全防护技术精要及实战

Apache 服务简介   Web服务器也称为WWW服务器或HTTP服务器(HTTPServer),它是Internet上最常见也是使用最频繁的服务器之一,Web服务器能够为用户提供网页浏览、论坛访问等等服务。   由于用户在通过Web浏览器访问信息资源的过程中,无须再关心一些技术性的细节,而且界面非常友好,因而Web在Internet上一推出就得到了爆炸性的发展。现在Web服务器已

Java中WebService接口的生成、打包成.exe、设置成Windows服务、及其调用、Apache CXF调用

一、Java中WebService接口的生成: 1、在eclipse工具中新建一个普通的JAVA项目,新建一个java类:JwsServiceHello.java package com.accord.ws;import javax.jws.WebMethod;import javax.jws.WebService;import javax.xml.ws.Endpoint;/*** Ti

【虚拟机/服务器】XAMPP错误: Apache shutdown unexpectedly解决办法

XAMPP安装好之后启动,但有些用户在启动apache的时候会出现: 11:41:38 [Apache] Status change detected: running11:41:38 [Apache] Status change detected: stopped11:41:38 [Apache] Error: Apache shutdown unexpectedly.11:41:38

windows下安装apache及php需要注意的问题

1.php5.2版本不扩展模块顺序有问题 把php_mbstring.dll放在php_exif.dll上面,后者依赖前者

部署Apache网站

简易部署自己的apache网站 写在前面:先安装好mysql,再来搭建站点 1.安装php [root@localhost ~]# yum install php -y##安装了php,默认会和apache结合工作 2.创建文件编写php网页代码 [root@localhost ~]# vim /var/www/html/index.php ##创建php的代码,index.p

兔子-更改 Apache 默认网站根目录

1.到Apache的安装目录下找到conf文件夹,该文件夹内会httpd.conf这样一个文本文档,它是Apache的配置文件。2.Ctrl+F组合键,找到 DocumentRoot D:/Apache/htdocs 将D:/Apache/htdocs改为你自定义的网站目录; 3.找到 <Directory D:/Apache/htdocs 将D:/Apache/htdocs改为你自定义的网

POM文件第一行报错org.apache.maven.archiver.MavenArchiver.getManifest

前几天新建maven项目时,系统自动生成的POM文件第一行总是报错 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration) 百思不得其解,明明是自动生成的怎么还会有

兼容Trino Connector,扩展Apache Doris数据源接入能力|Lakehouse 使用手册(四)

Apache Doris 内置支持包括 Hive、Iceberg、Hudi、Paimon、LakeSoul、JDBC 在内的多种 Catalog,并为其提供原生高性能且稳定的访问能力,以满足与数据湖的集成需求。而随着 Apache Doris 用户的增加,新的数据源连接需求也随之增加。因此,从 3.0 版本开始,Apache Doris 引入了 Trino Connector 兼容框架。 Tri