Blink SQL DDL语句概述

本文介绍了Blink SQL DDL语句的语法和使用,特别是字段映射的细节,包括顺序映射和名称映射。强调了在不同场景下字段数量、顺序的一致性要求,以及如何处理大小写敏感问题。对于名称映射,建议与外部数据存储Schema保持一致,而对于顺序映射,必须确保字段数量和顺序与数据源匹配。在遇到大小写敏感的数据源如Table Store时,需要使用反引号进行转义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DDL语句概述

语法

CREATE TABLE tableName
(columnName dataType [, columnName dataType ]*)
[ WITH (propertyName=propertyValue [, propertyName=propertyValue ]*) ];

说明

阿里云实时计算Flink版本身不具有数据存储功能,所有涉及表创建的DDL操作,实际上均是对外部数据表、存储的引用声明。

CREATE TABLE mq_stream(
 a VARCHAR,
 b VARCHAR,
 c VARCHAR
) WITH (
 type='mq',
 topic='blink_mq_test',
 accessID='<yourAccessID>',
 accessKey='<yourAccessSecret>'
);

以上代码不是在Flink SQL中创建了消息队列(MQ)源表的topic,而是声明了一个名称为mq_stream的表引用。下游所有对MQblink_mq_testTopic的相关DML操作,均可以使用别名mq_stream代替。声明外部表时,请注意:

  • 实时计算Flink版声明表的作用域是当前作业(1个SQL文件提交后生成1个实时计算作业),即上述有关mq_stream的声明仅在当前SQL有效。相同实时计算项目下不同SQL文件(作业)中同样可以声明名称为mq_stream的表。
  • 按照SQL标准定义,DDL语法中关键字、表名、列名等不区分大小写。
  • 表名、列名必须以字母开头,并且名称中只能包含字母、数字或下划线。
  • DDL声明不完全根据名称进行映射(取决于上游插件的性质)。建议您引用声明的字段名称、字段个数和外部表保持一致,避免因定义混乱而导致数据错乱。

说明

  • 如果上下游插件支持根据KEY取值,则不要求两者字段数量一致,但字段名称需要一致。

  • 如果上下游插件不支持根据KEY取值,则需要字段数量和字段顺序一致。

字段映射

声明表的字段映射根据外部数据源是否有Schema,分为两大类:

  • 顺序映射

    适用于以MQ为代表的不带有Schema的系统。这类系统通常是非结构化存储系统,不支持根据KEY取值。建议您在DDL SQL声明中对字段名称进行自定义,并且和外部表的字段类型、字段数量保持一致。

    以MQ的1条记录为例。

    asavfa,sddd32,sdfds
    

    按照命名规范设置MQ的字段名。

    CREATE TABLE mq_stream(
     a VARCHAR,
     b VARCHAR,
     c VARCHAR
    ) WITH (
     type='mq',
     topic='blink_mq_test',
     accessID='<yourAccessID>',
     accessKey='<yourAccessSecret>'
    );
    
  • 名称映射

    适用于带有Schema的系统。这类系统在表存储级别定义了字段名称以及字段类型,支持根据KEY取值。建议您在Flink SQL的声明中保持和外部数据存储Schema定义一致,包括字段名称、字段数量以及字段的顺序。

    说明 如果外部数据存储的字段名称是大小写敏感类型,例如,表格存储(Table Store),则需要在区分大小写的字段名称处,使用反引号(``)进行转换。在DDL语法中,声明表的字段名和外部表的字段名需要一致。

    DataHub定义的Schema如下:

    字段名类型
    nameSTRING
    ageBIGINT
    valueSTRING

    说明 DataHub中的STRING数据类型对应实时计算Flink版中的VARCHAR类型。

    关于上述DataHub声明的DDL如下:

    create table stream_result (
        `name` varchar,  
        age bigint,
        `value` varchar  
      ) with (
          type='datahub',
          endpoint='http://dh-cn-hangzhou.aliyuncs.com',
          accessID='<yourAccessID>',
          accessKey='<yourAccessSecret>'
          project='project',
          topic='topic'
      );
    

    说明 建议您将所有列进行声明引用。声明引用时可以减少字段,不能新增字段。

小结

  • 对于顺序映射的数据源,不可以减少声明的字段,必须保证Flink SQL作业中声明数据源的字段数量、顺序和数据源保持完全一致。
  • 对于名称映射的数据源,可以减少声明引用的字段(即声明的字段数量比数据源少),但是不能新增字段。

处理大小写敏感

SQL标准定义中,大小写是不敏感的。如下两个示例,语句的含义相同。

create table stream_result (
    name varchar,
    value varchar
);
create table STREAM_RESULT (
    NAME varchar,
    VALUE varchar
);

实时计算Flink版引用的大量外部数据源中,有时会存在要求大小写敏感的数据源。例如,表格存储(Table Store)对于大小写是敏感的。如果需要在Table Store定义大写NAME字段,您应该进行如下定义。

create  table STREAM_RESULT (
    `NAME` varchar,
    `VALUE` varchar
);

在之后所有的DML操作中,对于这个字段的引用均需要添加反引号(``),如下所示。

INSERT INTO tableA
SELECT
  `NAME`,
  `VALUE`
FROM
  tableB;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值