KSQL入门,史上最详细语法解析之一(2)还在更新中。。。

KSQL入门,史上最详细语法解析之一(1)

注意

一条完整的ksql语句结束,必须以“;”结尾
在CLI中 要空掉一行又不结束命令语句 ,可以以“\”结尾
但是在script的.sql中用不了“\”
streams, tables, topics, and columns的命名中不支持“-”
不要用引号,在创建命名stream和table时

CREATE STREAM

CREATE STREAM stream_name ( { column_name data_type } [, ...] )
  WITH ( property_name = expression [, ...] );

stream中列所支持的数据类型:

  • BOOLEAN
  • INTEGER
  • BIGINT
  • DOUBLE
  • VARCHAR (or STRING)
  • ARRAY<ArrayType> (JSON and AVRO only. Index starts from 0)
  • MAP<VARCHAR, ValueType> (JSON and AVRO only)
  • STRUCT<FieldName FieldType, ...> (JSON and AVRO only) STRUCT类型要求我们指定字段列表。 对于每个字段,必须指定字段名称(FieldName)和字段类型(FieldType)。 字段类型可以是任何受支持的KSQL类型,包括复杂类型MAP,ARRAY和STRUCT。 可以使用struct dereference( - >)运算符在表达式中访问STRUCT字段。 有关详细信息,请参阅opertors

KSQL将隐式列ROWTIME和ROWKEY添加到每个stream和table,它们分别代表相应的Kafka消息时间戳和消息密钥。 时间戳具有毫秒精度。

 

WITH支持的配置信息:

PropertyDescription
KAFKA_TOPIC (required)支持stream中Kafka topic的名称。 该topic必须已存在于Kafka中。
VALUE_FORMAT (required)指定topic中消息值的序列化格式。 支持的格式:JSON,DELIMITED(逗号分隔值)和AVRO。
KEY优化提示:如果Kafkamessage key也作为Kafka消息值中的字段/列出现,则可以设置此属性以将相应的字段/列与隐式ROWKEY列(message key)相关联。 如果设置,KSQL将其用作优化提示,以确定在执行聚合和连接时是否可以避免重新分区。 如果kafka中的key为VARCHAR或STRING,则只能使用此方法。 如果kafka中的message key格式为AVRO或JSON,请不要使用此提示。 有关更多信息,请参阅关键要求
TIMESTAMP默认情况下,隐式ROWTIME列是Kafka主题中消息的时间戳。 TIMESTAMP属性可用于使用Kafka消息值中的指定字段/列的内容覆盖ROWTIME(类似于Kafka的Streams API中的时间戳提取器)。 时间戳具有毫秒精度。 基于时间的操作(例如窗口化)将根据ROWTIME中的时间戳处理记录。
TIMESTAMP_FORMAT与TIMESTAMP一起使用。 如果未设置,则假定时间戳字段为bigint。 如果已设置,则TIMESTAMP字段必须是varchar类型,并且具有可以使用java DateTimeFormatter解析的格式。 如果您的时间戳格式具有需要单引号的字符,则可以使用连续的单引号来逃避它们,例如:'yyyy-MM-dd''T''HH:mm:ssX'。 有关时间戳格式的更多信息,请参阅DateTimeFormatter
WINDOW_TYPE默认情况下,假定主题包含非窗口数据。 如果数据是窗口化的,即使用包含WINDOW子句的查询使用KSQL创建的,则可以使用WINDOW_TYPE属性来提供窗口类型。 有效值为SESSION,HOPPING`和“TUMBLING”。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:
要使用Avro,必须启用Schema Registry,并且必须在KSQL服务器配置文件中设置ksql.schema.registry.url。 请参阅为KSQL配置Avro和Schema Registry。
Avro字段名称在KSQL中不区分大小写。 这与KSQL列名称行为相匹配。

KSQL配置Avro和Schema Registry

举例:

CREATE STREAM pageviews (viewtime BIGINT, user_id VARCHAR, page_id VARCHAR)
  WITH (VALUE_FORMAT = 'JSON',
        KAFKA_TOPIC = 'my-pageviews-topic');

如果source topic中列的名称是KSQL中的保留字之一,则可以使用后引号来定义列。 这同样适用于STRUCT类型中的字段名称。 例如,如果在上面的示例中我们有另一个名为Properties的字段,它是KSQL中的保留字,可以使用以下语句来声明stream:

CREATE STREAM pageviews (viewtime BIGINT, user_id VARCHAR, page_id VARCHAR, `Properties` VARCHAR)
  WITH (VALUE_FORMAT = 'JSON',
        KAFKA_TOPIC = 'my-pageviews-topic');

 

 

CREATE TABLE

CREATE TABLE table_name ( { column_name data_type } [, ...] )
  WITH ( property_name = expression [, ...] );
  • BOOLEAN
  • INTEGER
  • BIGINT
  • DOUBLE
  • VARCHAR (or STRING)
  • ARRAY<ArrayType> (JSON and AVRO only. Index starts from 0)
  • MAP<VARCHAR, ValueType> (JSON and AVRO only)
  • STRUCT<FieldName FieldType, ...> (JSON and AVRO only) STRUCT类型要求我们指定字段列表。 对于每个字段,必须指定字段名称(FieldName)和字段类型(FieldType)。 字段类型可以是任何受支持的KSQL类型,包括复杂类型MAP,ARRAY和STRUCT。 可以使用struct dereference( - >)运算符在表达式中访问STRUCT字段。 有关详细信息,请参阅opertors

KSQL将隐式列ROWTIME和ROWKEY添加到每个stream和table,它们分别代表相应的Kafka消息时间戳和消息密钥。 时间戳具有毫秒精度。

 

KSQL目前有以下要求从Kafka topic 创建table:

Kafka message key 也必须作为Kafka value中的字段/列出现。 必须定义KEY属性(见下文)以通知KSQL消息值中的哪个字段/列表示Key。 如果消息值中不存在message key,请按照key要求中的说明进行操作。
消息密钥必须是VARCHAR又称为STRING格式。 如果message key不是此格式,请按照key要求中的说明进行操作。

WITH支持的配置信息跟上面的stream相同:

例子:

CREATE TABLE users (usertimestamp BIGINT, user_id VARCHAR, gender VARCHAR, region_id VARCHAR) WITH (
    KAFKA_TOPIC = 'my-users-topic',
    KEY = 'user_id');

如果source topic中列的名称是KSQL中的保留字之一,则可以使用后引号来定义列。 这同样适用于STRUCT类型中的字段名称。 例如,如果在上面的示例中我们有另一个名为Properties的字段,它是KSQL中的保留字,可以使用以下语句来声明table:

CREATE TABLE users (usertimestamp BIGINT, user_id VARCHAR, gender VARCHAR, region_id VARCHAR, `Properties` VARCHAR) WITH (
        KAFKA_TOPIC = 'my-users-topic',
        KEY = 'user_id');

 

 

改变副本参数

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值