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服务,实现数据上云,解决了数据孤岛问题,同时把数据迁移到云计算平台,对后续数据的计算和应用提供了第一步开山之路。
相关文章
|
2月前
|
SQL
十一、DDL
十一、DDL
54 0
|
10月前
|
SQL 关系型数据库 测试技术
PolarDB的Online DDL功能验证实验
本场景带您体验如何在PolarDB-X中进行Online DDL。
971 0
|
SQL 关系型数据库 分布式数据库
PostgreSQL 在线修改数据类型 - online ddl 方法之一
标签 PostgreSQL , online ddl , trigger , ddl 事务 背景 有张表的主键id是serial,但现在不够了,需要升级成bigserial,有什么优雅的方法吗?我看下来好像会锁表很久(因为数据量挺大) 如果直接alter table,由于数据类型从4字节改成了8字节,而tuple结构是在METADATA里面的,不是每行都有,所以DEFORM需要依赖METADATA,目前来说,这种操作需要rewrite table。
3778 0
|
SQL 关系型数据库 MySQL
MySQL基础教程5——DDL—表操作
使用create table 表名( 字段一 字段一类型 comment 字段一注释, 字段二 字段二类型 comment 字段二注释 ); comment 表注释 注意: 最后一个字段结尾不用加,,comment 注释可以不加。
|
SQL 缓存 数据管理
PolarDB-X源码解读系列:DML之Insert流程
Insert类的SQL语句的流程可初略分为:解析、校验、优化器、执行器、物理执行(GalaxyEngine执行)。本文将以一条简单的Insert语句通过调试的方式进行解读。
274 0
开发指南—DAL语句—DDL管理语句—PAUSE DDL
PAUSE DDL命令可用于暂停当前状态为RUNNING或ROLLBACK_RUNNING的DDL任务。
100 0
|
SQL 关系型数据库 MySQL
MySQL数据库基础(3)DDL和DML
MySQL数据库基础(3)DDL和DML
144 0
|
SQL 存储 Cloud Native
表格存储 SQL 操作实战
表格存储做为一款结构化存储系统,近期发布了新功能 SQL,大幅简化了查询的门槛,用户无需学习繁琐的 SDK,也不用区分表,索引等不同的接口,可以像访问传统的 MySQL 这类数据库一样,使用 SQL 的方式访问云原生的结构化大数据存储。下面我们就来具体实操下,看看查询用起来顺不顺手。
498 0
PolarDB-X 1.0-SQL 手册-DDL任务管理-概述
PolarDB-X在V5.3.12及以上的实例版本中引入了新的DDL执行引擎,开始支持DDL的任务管理,包括DDL执行过程中的任务状态查看、失败DDL任务的恢复和回滚等。
147 0
|
SQL 索引
PolarDB-X 1.0-SQL 手册-DDL-DDL常见问题
本文汇总了PolarDB-X上常见的DDL执行问题。
113 0