DDL概述

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介:

语法

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

说明

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

 
 
  1. create table tt_stream(
  2. a varchar,
  3. b varchar,
  4. c varchar
  5. ) with (
  6. type='datahub',
  7. topic='blink_tt_test',
  8. accessId='06xxxxxxxxx',
  9. accessKey='a6xxxxxxxxxxxxxxxxxxxxxxxxxx'
  10. );

此处并非是在实时计算Flink SQL中创建一个DataHub的Topic,而是声明了一个名称为tt_stream的表引用。下游所有对这张Topic相关的DML操作均可以使用tt_stream别名来进行操作。

  • 实时计算对于声明表的作用域是在当前作业(一个SQL文件提交后生成一个实时计算作业),即上述有关tt_stream的声明仅在当前SQL有效。在同一个Project下的其他SQL文件同样可以声明名称为tt_stream的表。

  • 按照SQL标准定义,DDL语法中关键字、表名、列名等不区分大小写。

  • 表名、列名必须以字母或者数字开头,并且名称中只能包含字母、数字、下划线。

  • DDL声明不完全根据名称进行映射(取决于上游插件的性质)。如果插件支持根据key取值(如DataHub),则不要求字段个数完全一致。但名称需要一致。如果上游插件不支持根据key取值(如TT),则对字段数量和顺序有严格要求。实时计算建议您引用声明的字段名称、个数和外部表一致,避免出现定义混乱导致数据错乱的情况。
    因此,我们推荐名称、列数、顺序完全一致

字段映射

根据外部数据源是否有Schema分为两大类别。

顺序映射

适用于以TT、MetaQ为代表的不带有Schema系统。这类系统通常是非结构化存储系统。推荐的操作是,您可以在DDL SQL声明中对字段名称进行自定义,但需按照外部表字段的类型、列数进行对齐。

以TT为例,TT的一条记录格式:

 
 
  1. asavfa,sddd32,sdfdsv

示例,TT的字段名按照命名规范来设置。

 
 
  1. create table tt_stream(
  2. a varchar,
  3. b varchar,
  4. c varchar
  5. ) with (
  6. type='tt',
  7. topic='blink_tt_test',
  8. accessId='0622XXXXXX',
  9. accessKey='a62cfe8XXXXXXXXX'
  10. );

名称映射

适用于以DataHub、TDDL为代表的带有Schema的系统。这类系统在表存储级别定义了字段名称以及字段类型。推荐您在Flink SQL中严格按照外部数据存储Schema进行定义,包括名称、列数、顺序完全一致

注意:
如果外部数据存储的字段名称是大小写敏感类型(例如OTS),则在流计算SQL中需要在区分大小写的字段名称处使用‘`’进行转换。以DataHub为例,在DDL语法中,声明字段名和目标表的字段名需要名称完全一致。

Datahub定义的Schema如下:

字段名
类型
name
varchar
age
bigint
value
varchar

我们推荐用户将所有列进行声明引用,注意可以少字段,不可以多字段。针对上述DataHub声明的DDL如下:

 
 
  1. create table stream_result (
  2. name varchar,
  3. age bigint,
  4. value varchar
  5. ) with (
  6. type='datahub',
  7. endpoint='http://dh-cn-hangzhou.aliyuncs.com',
  8. accessId='xxxxxx',
  9. accessKey='xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  10. project='project',
  11. topic='topic'
  12. );

处理大小写敏感

SQL标准定义中,大小写是不敏感的,例如:

 
 
  1. create table stream_result (
  2. name varchar,
  3. value varchar
  4. );

和下列语句含义一致:

 
 
  1. create table STREAM_RESULT (
  2. NAME varchar,
  3. VALUE varchar
  4. );

但实时计算引用的大量外部数据源,可能要求大小写敏感。例如,TableStore对于大小写是敏感的。如果在TableStore定义了一个NAME的大写字段,我们应该如下定义:

 
 
  1. create table STREAM_RESULT (
  2. `NAME` varchar,
  3. `VALUE` varchar
  4. );

在之后所有的DML操作中,对于这个字段引用均需要添加反引号,例如:

 
 
  1. INSERT INTO xxx
  2. SELECT
  3. `NAME`,
  4. `VALUE`
  5. FROM
  6. XXX;

本文转自实时计算——DDL概述

相关实践学习
实时数据及离线数据上云方案
本实验通过使用CANAL、DataHub、DataWorks、MaxCompute服务,实现数据上云,解决了数据孤岛问题,同时把数据迁移到云计算平台,对后续数据的计算和应用提供了第一步开山之路。
相关文章
|
3月前
|
SQL
十一、DDL
十一、DDL
42 0
|
7月前
|
SQL 关系型数据库 测试技术
PolarDB的Online DDL功能验证实验
本场景带您体验如何在PolarDB-X中进行Online DDL。
950 0
|
SQL AliSQL 数据库连接
PolarDB-X 源码解读系列:DML 之 INSERT IGNORE 流程
本文将进一步介绍 PolarDB-X 中 INSERT IGNORE 的执行流程,其根据插入的表是否有 GSI 也有所变化。
PolarDB-X 源码解读系列:DML 之 INSERT IGNORE 流程
【笔记】开发指南—DAL语句—DDL管理语句—SHOW DDL
一条DDL语句会以一个DDL任务方式在PolarDB-X内部执行,使用SHOW DDL命令可以查看当前PolarDB-X实例中的DDL任务。
135 0
【笔记】开发指南—DAL语句—DDL管理语句—SHOW DDL
|
SQL 缓存 数据管理
PolarDB-X源码解读系列:DML之Insert流程
Insert类的SQL语句的流程可初略分为:解析、校验、优化器、执行器、物理执行(GalaxyEngine执行)。本文将以一条简单的Insert语句通过调试的方式进行解读。
259 0
|
SQL 关系型数据库 MySQL
MySQL数据库基础(3)DDL和DML
MySQL数据库基础(3)DDL和DML
135 0
PolarDB-X 1.0-SQL 手册-DDL任务管理-概述
PolarDB-X在V5.3.12及以上的实例版本中引入了新的DDL执行引擎,开始支持DDL的任务管理,包括DDL执行过程中的任务状态查看、失败DDL任务的恢复和回滚等。
132 0
|
SQL 索引
PolarDB-X 1.0-SQL 手册-DDL-DDL常见问题
本文汇总了PolarDB-X上常见的DDL执行问题。
104 0
|
SQL 关系型数据库 RDS
PolarDB-X 1.0-SQL 手册-DDL任务管理-最佳实践
本文将介绍一些对PENDING任务进行合适处理的最佳实践。
529 0
|
SQL 数据库连接 数据库管理
PolarDB-X 1.0-SQL 手册-DDL任务管理-常见场景与限制
新DDL执行引擎引入任务管理,外部行为与之前版本相比有所变化。本文将介绍相关的常见场景与限制。
203 0