Blink SQL DDL语句概述

Blink SQL DDL语句概述,第1张

Blink SQL DDL语句概述 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='',
 accessKey=''
);

以上代码不是在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='',
 accessKey=''
);

名称映射

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

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

DataHub定义的Schema如下:

字段名类型nameSTRINGageBIGINTvalueSTRING

说明 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='',
      accessKey=''
      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;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5704960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存