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

调试阶段

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

“数据开发”为用户提供了一套模拟的运行环境(如下图),用户可以在调试环境中自定义上传数据,模拟运行,检查输出结果,如下图:

调试界面

在该环境运行StreamSQL可以实现:

  • 和生产完全隔离

    调试环境下,所有的StreamSQL运行将在独立的调试容器运行,且所有的输出将被直接改写到调试结果屏幕,不会对线上生产流计算作业、线上生产的数据存储系统造成任何影响,让用户可以放心大胆运行作业。

    数据调试实际上不会真正写入到外部数据存储,而是被流计算拦截输出到屏幕,因此在流计算调试完成的代码是在调试容器中完成,真正线上运行过程中可能由于对目标数据存储写入格式导致运行失败。这类错误调试阶段无法完全规避,只能到线上运行才能发现。例如,用户结果数据输出到RDS系统,其中某些字段输出字符串数据长度大于RDS建表最大值,在Debug环境下我们无法测试出该类问题,但实际生产运行过程中会有引发异常。后续,流计算将提供针对本地调试运行也支持写出到真实数据存储的功能,届时可以有效辅助用户缩短调试和生产的差距,尽可能在调试阶段解决问题。

    调试生产差别

  • 支持构造测试数据

    调试环境下,所有的StreamSQL运行均不会从源头数据存储系统读取数据,包括DataHub的流式输入、RDS等维表输入,调试作业均不会读取。调试环境要求用户必须进行自己构建测试数据集,并将测试数据上传到”数据开发”。

    您担心测试数据构造困难?没关系,流计算针对不同作业提供测试数据模板,您完全可以下载数据模板开始直接填写构造数据。我们强烈建议用户使用下载的数据模板构造数据,以避免报错。

调试分隔符

默认情况下,调试文件使用逗号作为分隔符,例如用户构造了如下的测试文件:

  1. id,name,age
  2. 1,alicloud,13
  3. 2,stream,1

在不指定调试分隔符情况下,默认使用了逗号进行分割。但一旦用户需要使用JSON作为字段内容,字段内容即包含了逗号,此时用户需要指定分割符为其他字符,注意,流计算仅支持指定单个英文字符为分隔符,不允许字符串,例如不允许’aaa’作为分隔符。如下:

  1. id|name|content|
  2. |1|alicloud|a,b,c|
  3. |2|stream|{"attr": "b"}|

此时用户需要针对该数据存储在WITH中指定相对应的分隔符,使用galaxy.semantic.source.input.field.delimiter指定分隔符即可,如下:

  1. CREATE STREAM TABLE source_table (
  2. id BIGINT,
  3. name STRING,
  4. content STRING
  5. ) WITH (
  6. type='datahub',
  7. galaxy.semantic.source.input.field.delimiter='|'
  8. );

此时流计算调试即可完美适应|分隔符。

本文导读目录