DDL概述

本文涉及的产品
实时计算 Flink 版,1000CU*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概述

相关文章
|
缓存 JSON API
Elasticsearch-05Elasticsearch之查询与过滤
Elasticsearch-05Elasticsearch之查询与过滤
568 0
|
存储 分布式计算 安全
基于OSS的EB级数据湖
数据湖无缝对接多种计算分析平台,对Hadoop生态支持良好,存储在数据湖中的数据可以直接对其进行数据分析、处理、查询,通过对数据深入挖掘与分析,洞察数据中蕴含的价值。
基于OSS的EB级数据湖
|
人工智能 移动开发 运维
阿里云APP “题库 ” 重磅上线!考取阿里云认证刷题神器,“懒人”必备
阿里云APP上线最新题库功能,和小编一起探索新功能~
14190 17
 阿里云APP  “题库 ”  重磅上线!考取阿里云认证刷题神器,“懒人”必备
|
6月前
|
存储 监控 网络协议
HarmonyOS NEXT实战:网络状态监控
本教程介绍如何在HarmonyOS Next中使用@ohos.net.connection模块实现网络状态监控,并通过AppStorage进行状态管理,适用于教育场景下的网络检测功能开发。
201 2
|
存储 缓存 前端开发
聊聊公众号联动扫码登录功能如何实现
【10月更文挑战第30天】公众号联动扫码登录功能的实现涉及前端、后端与微信平台的交互。前端设计二维码展示区和轮询机制,后端负责生成二维码、处理微信推送、用户身份验证及登录。整个过程需确保数据交互安全顺畅,提升用户体验。
405 1
|
SQL 存储 运维
阿里云分布式关系型数据库服务 DRDS
DRDS 是阿里巴巴集团自主研发的分布式数据库中间件产品,专注于解决单机关系型数据库扩展性问题,具备轻量(无状态)、灵活、稳定、高效等特性,稳定运行11年,经历历届双十一核心交易业务和各类行业业务的考验
14071 0
|
Linux Python
Linux 修改 pip 源
Linux 修改 pip 源
522 0
【乌拉喵.教程】进一步学习编写TestBench(VHDL语言),quartus与modelsim时序仿真
【乌拉喵.教程】进一步学习编写TestBench(VHDL语言),quartus与modelsim时序仿真
599 0
【乌拉喵.教程】进一步学习编写TestBench(VHDL语言),quartus与modelsim时序仿真
|
应用服务中间件 nginx
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
472 0
|
弹性计算 关系型数据库 MySQL
阿里云服务器申请试用并部署LNMP环境(CentOS 7)教程
阿里云提供云服务器1个月-3个月免费试用,可申请的试用配置有2核4GB 3个月、2核8GB 3个月、4核8GB 1个月、4核16GB 1个月,本文为大家介绍如何申请这些试用云服务器及在云服务器上部署LNMP环境(CentOS 7)教程,以供参考。
阿里云服务器申请试用并部署LNMP环境(CentOS 7)教程