全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
流计算

DDL声明技巧

更新时间:2017-06-07 13:26:11

流计算中,对于表的创建实际上只是声明对于外部表的引用,因此有部分特殊技巧可以帮助大家不易犯错。

使用”数据开发”进行创建

使用DDL语句创建外部表,流计算推荐使用自带的DDL生成工具进行生成,而不推荐用户手工编写DDL。详情参看: DDL辅助生成

DDL大小写忽略

SQL语句中对于字段大小写的定义是忽略的,因此在StreamSQL创建table中,务必不要使用大小写区分字段。如果外部表正好存在使用大小写区分字段名,例如两个字段,一个是Name,另外一个是name。目前StreamSQL暂时无法支持该类情况。

  1. -- 以下SQL为错误案例!
  2. create result table ots_reference
  3. (
  4. id bigint,
  5. Name string,
  6. name string
  7. )

支持多次声明

前面提到,表的创建实际上只是声明对于外部表的引用,那么实际上我们可以对于同一张表进行多次声明引用。例如,我们可以对一个DataHub的Topic声明为结果表,同样我们亦可在同一个流计算Job里面将其声明为一个源头表,这样我们在后续SQL中可以将该Topic用作数据存储使用。

  1. create stream table source_table
  2. (
  3. id string,
  4. name string
  5. ) with (
  6. 同一个外部DataHubTopic
  7. );
  8. create stream table dest_table
  9. (
  10. id string,
  11. name string
  12. ) with (
  13. 同一个外部DataHubTopic
  14. )

特别注意,必须保证在同一个Job里面,声明的表名(实际上是别名)必须不重名,否则SQL解析器无法判断SQL的意图。

支持部分字段声明

对于一个外部表声明,例如源表有a,b,c三列,流计算声明该表引用时候,可以只用填写a,b两列,例如:

  1. create stream table source_table
  2. (
  3. a string,
  4. b string
  5. )

这样,后续的SQL仅仅只能引用source_table的a、b两个字段。对于STREAM和DIM的外部表声明,由于不涉及到外部表修改,较为简单。如果对于目标表声明,如果声明部分字段,如果未声明字段恰好不允许为空,那么插入过程底层的数据存储是报错的。请务必注意这类情况的发生。

本文导读目录