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

KSQL是类SQL操作,要以  ";" 结尾,通过使用两个连续的单引号('')来转义字符串文字中的单引号字符(')。例如,要逃避'T',请写''T''。

 

Stream

stream是一个无序的数据结构。打个比方,我们可以进行一些列交易,Alice向Bob发送了100美元,然后Charlie向Bob发送了50美元。stream中发生的事件是不可改变的,已经被认定为事实,新的事件加入到这个stream中,现有的事实都不会改变。Streams可以从Kafka的topic创建出来,也可以从现有streams中派生出来。streams的基础数据在Kafka的broker里的topic持久保存(持久化)

 

Table

table是stream的一个视图,表示不断变化的事实的集合。打个比方,我们可以有一个表格,其中包含最新的财务信息,例如“Bob的当前账户余额为150美元”。 它相当于传统的数据库表,但通过流式语义(如窗口)进行了丰富。 table中的事实是可变的,这意味着可以将新事实插入表中,同时可以更新或删除现有事实。 可以从Kafka主题创建table,也可以从现有streams和tables中派生。 在这两种情况下,table的基础数据都在Kafka的broker里的topic中持久存储(持久化)。

 

STRUCT

在KSQL 5.0及更高版本中,我们可以使用CREATE STREAM和CREATE TABLE语句中的STRUCT类型以Avro和JSON格式读取嵌套数据。 我们可以在这些KSQL语句中使用STRUCT类型:

  • CREATE STREAM/TABLE (from a topic)
  • CREATE STREAM/TABLE AS SELECT (from existing streams/tables)
  • SELECT (non-persistent query)

 

使用以下语法声明嵌套数据:

STRUCT<FieldName FieldType, ...>

STRUCT类型要求我们指定字段列表。 对于每个字段,可以指定字段名称和字段类型。 字段类型可以是任何受支持的KSQL类型,包括复杂类型MAP,ARRAY和STRUCT。

注意
Properties 不是有效的字段名

一个CREATE STREAM语句事例,它使用STRUCT来封装街道地址和邮政编码:

CREATE STREAM orders (
  orderId BIGINT,
  address STRUCT<street VARCHAR, zip INTEGER>) WITH (...);

使用引用运算符( - >)访问STRUCT中的字段:

使用解除引用运算符( - >)访问STRUCT中的字段:

 

 

 

KSQL在值表达式中支持以下运算符。

每个运算符的说明如下:

CREATE TABLE USERS (
    USERID BIGINT
    FIRST_NAME STRING,
    LAST_NAME STRING,
    NICKNAMES ARRAY<STRING>,
    ADDRESS STRUCT<STREET_NAME STRING, NUMBER INTEGER>
) WITH (KAFKA_TOPIC='users', VALUE_FORMAT='AVRO', KEY='USERID');

(+, - ,/,*,%)通常的算术运算符可以应用于数值类型(INT,BIGINT,DOUBLE)

SELECT LEN(FIRST_NAME) + LEN(LAST_NAME) AS NAME_LENGTH FROM USERS;

(+,||)连接运算符可用于连接STRING值。

SELECT FIRST_NAME + LAST_NAME AS FULL_NAME FROM USERS;

可以使用+运算符进行多部分串联,例如:

SELECT TIMESTAMPTOSTRING(ROWTIME, 'yyyy-MM-dd HH:mm:ss') +
        ': :heavy_exclamation_mark: On ' +
        HOST +
        ' there were ' +
        CAST(INVALID_LOGIN_COUNT AS VARCHAR) +
        ' attempts in the last minute (threshold is >=4)'
FROM INVALID_USERS_LOGINS_PER_HOST
WHERE INVALID_LOGIN_COUNT>=4;

 

引用(.)可用于指定特定列

SELECT USERS.FIRST_NAME FROM USERS;

 

下标([subscript_expr])用于引用数组索引或映射键的值。

SELECT NICKNAMES[0] FROM USERS;

STRUCT引用( - >)通过声明STRUCT其字段来访问嵌套数据:

CREATE STREAM orders (
  orderId BIGINT,
  address STRUCT<street VARCHAR, zip INTEGER>) WITH (...);

SELECT address->street, address->zip FROM orders;

结合 - >。 使用别名:

SELECT orders.address->street, o.address->zip FROM orders o;
注意
不能创建新的嵌套STRUCT数据作为查询的结果,但您可以按原样复制现有的STRUCT字段。

 

KSQL Time Units

以下列表显示SIZE,ADVANCE BY,SESSION和WITHIN子句的有效时间单位。

  • DAY, DAYS
  • HOUR, HOURS
  • MINUTE, MINUTES
  • SECOND, SECONDS
  • MILLISECOND, MILLISECONDS

详细了解, 请看 Windows in KSQL Queries.

 

KSQL Timestamp Formats(时间戳)

-- Example timestamp format: yyyy-MM-dd'T'HH:mm:ssX
CREATE STREAM TEST (ID bigint, event_timestamp VARCHAR)
  WITH (kafka_topic='test_topic',
        value_format='JSON',
        timestamp='event_timestamp',
        timestamp_format='yyyy-MM-dd''T''HH:mm:ssX');

-- Example timestamp format: yyyy.MM.dd G 'at' HH:mm:ss z
CREATE STREAM TEST (ID bigint, event_timestamp VARCHAR)
  WITH (kafka_topic='test_topic',
        value_format='JSON',
        timestamp='event_timestamp',
        timestamp_format='yyyy.MM.dd G ''at'' HH:mm:ss z');

-- Example timestamp format: hh 'o'clock' a, zzzz
CREATE STREAM TEST (ID bigint, event_timestamp VARCHAR)
  WITH (kafka_topic='test_topic',
        value_format='JSON',
        timestamp='event_timestamp',
        timestamp_format='hh ''o''clock'' a, zzzz');

了解更多相关信息,点我

 

KSQL CLI Commands

在启动ksql Server服务之后,通过命令  <path-to-confluent>/bin/ksql --help   可以查看相关的操作

ctrl - R可以清屏

NAME
        ksql - KSQL CLI

SYNOPSIS
        ksql [ --config-file <configFile> ] [ {-h | --help} ]
                [ --output <outputFormat> ]
                [ --query-row-limit <streamedQueryRowLimit> ]
                [ --query-timeout <streamedQueryTimeoutMs> ] [--] <server>

OPTIONS
        --config-file <configFile>
            A file specifying configs for Ksql and its underlying Kafka Streams
            instance(s). Refer to KSQL documentation for a list of available
            configs.

        -h, --help
            Display help information

        --output <outputFormat>
            The output format to use (either 'JSON' or 'TABULAR'; can be changed
            during REPL as well; defaults to TABULAR)

        --query-row-limit <streamedQueryRowLimit>
            An optional maximum number of rows to read from streamed queries

            This options value must fall in the following range: value >= 1


        --query-timeout <streamedQueryTimeoutMs>
            An optional time limit (in milliseconds) for streamed queries

            This options value must fall in the following range: value >= 1


        --
            This option can be used to separate command-line options from the
            list of arguments (useful when arguments might be mistaken for
            command-line options)

        <server>
            The address of the Ksql server to connect to (ex:
            http://confluent.io:9098)

            This option may occur a maximum of 1 times

 

RUN SCRIPT

可以将命令写在文件中执行

RUN SCRIPT '/local/path/to/queries.sql';

RUN SCRIPT支持的KSQL:

不支持:

  • SHOW TOPICS and SHOW STREAMS etc
  • TERMINATE
  • Non-persistent queries: SELECT etc

详情请看

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值