云服务器内容精选

  • HQL编写之隐式类型转换 查询语句使用字段的值做过滤时,不建议通过Hive自身的隐式类型转换来编写HQL。因为隐式类型转换不利于代码的阅读和移植。 建议示例: select * from default.tbl_src where id = 10001; select * from default.tbl_src where name = 'TestName'; 不建议示例: select * from default.tbl_src where id = '10001'; select * from default.tbl_src where name = TestName; 表tbl_src的id字段为Int类型,name字段为String类型。
  • UDF管理 建议由管理员创建永久UDF,避免每次使用时都去add jar,和重新定义UDF。 Hive的UDF会有一些默认属性,比如“deterministic”默认为“true”(同一个输入会返回同一个结果),“stateful”(是否有状态,默认为“true”)。当用户实现的自定义UDF内部实现了汇总等,需要在类上加上相应的注解,例如如下类: @UDFType(deterministic = false) Public class MyGenericUDAFEvaluator implements Closeable {
  • 新建MySQL到OBS迁移作业 正式业务流程中,需要将MySQL中的原始样例数据需要导入OBS中,并标准化为点数据集和边数据集。 在DataArts Studio数据集成控制台,进入“集群管理”页面,在集群列表中找到所需要的集群,单击“作业管理”。 在“作业管理”页面,单击“表/文件迁移”,再单击“新建作业”。 图14 表/文件迁移 按照如下步骤将MySQL中的4张原始数据表,依次迁移到OBS桶中。 配置作业vertex_user_rds2obs。 源端的“表名”选择在新建OBS到MySQL迁移作业中迁移到MySQL的vertex_user。目的端的“写入目录”注意选择非原始数据所在目录以避免文件覆盖,“文件格式”按照GES图导入格式要求设置为“CSV格式”,由于表中有中文字符还需额外配置高级属性“编码类型”为“GBK”。 注意:目的端高级属性需要额外配置“自定义文件名”,取值为“${tableName}”。如果不配置,则迁移到OBS的CSV文件名会带上时间戳等额外字段,导致每次运行迁移作业获取的文件名不一致,无法每次迁移后自动导入GES图数据。 其他高级属性无需配置,单击“下一步”。 图15 vertex_user_rds2obs作业基础配置 图16 vertex_user_rds2obs作业高级配置 在字段映射中,根据GES图数据的要求,此处需要新增字段label,作为图文件的标签。 vertex_user:label取值为user,并将此字段调整至第2列。 vertex_movie:label取值为movie,并将此字段调整至第2列。 edge_friends:label取值为friends,并将此字段调整至第3列。 edge_rate:label取值为rate,并将此字段调整至第3列。 将原始数据结构根据GES图导入的要求标准化。则点表vertex_user和vertex_movie需要在第二列补充标签label,边表edge_rate和edge_friends需要在第三列补充标签label。 点数据集和边数据集应符合GES图数据格式要求。图数据格式要求简要介绍如下,详情可参见一般图数据格式。 点数据集罗列了各个点的数据信息。一行为一个点的数据。格式如下所示,id是点数据的唯一标识。 id,label,property 1,property 2,property 3,… 边数据集罗列了各个边的数据信息,一行为一条边的数据。GES中图规格是以边的数量进行定义的,如一百万边。格式如下所示,id 1、id 2是一条边的两个端点的id。 id 1, id 2, label, property 1, property 2, … 图17 vertex_user_rds2obs新增字段映射 调整字段顺序,点数据集将label调整至第2列,边数据集将label调整至第3列。调整完成后如图19所示,然后单击下一步。 图18 vertex_user_rds2obs调整字段顺序 图19 vertex_user_rds2obs字段映射 任务配置无需修改,直接保存并运行即可。 图20 任务配置 等待作业运行完成后,如果作业成功,则vertex_user.csv表已成功写入到OBS桶中。 图21 vertex_user_rds2obs作业运行成功 参考2到4,完成vertex_movie_rds2obs、edge_friends_rds2obs和edge_rate_rds2obs作业的创建,将4张原始表从MySQL标准化到OBS桶中。
  • 新建MySQL到MRS Hive迁移作业 正式业务流程中,需要将MySQL中的原始样例数据需要导入MRS Hive中,并标准化为点数据集和边数据集。 在DataArts Studio数据集成控制台,进入“集群管理”页面,在集群列表中找到所需要的集群,单击“作业管理”。 在“作业管理”页面,单击“表/文件迁移”,再单击“新建作业”。 图22 表/文件迁移 按照如下步骤将MySQL中的4张原始数据表,依次迁移到MRS Hive中。 配置作业vertex_user_rds2hive。 源端的“表名”选择在新建OBS到MySQL迁移作业中迁移到MySQL的vertex_user,目的端的“表名”选择在创建MRS Hive标准数据表中创建的vertex_user表。其他参数配置如图所示,无需配置高级属性,然后单击“下一步”。 图23 vertex_user_rds2hive作业基础配置 在字段映射中,根据GES图数据的要求,此处需要新增字段label,作为图文件的标签。 vertex_user:label取值为user,并将此字段调整至第2列。 vertex_movie:label取值为movie,并将此字段调整至第2列。 edge_friends:label取值为friends,并将此字段调整至第3列。 edge_rate:label取值为rate,并将此字段调整至第3列。 将原始数据结构根据GES图导入的要求标准化。则点表vertex_user和vertex_movie需要在第二列补充标签label,边表edge_rate和edge_friends需要在第三列补充标签label。 点数据集和边数据集应符合GES图数据格式要求。图数据格式要求简要介绍如下,详情可参见一般图数据格式。 点数据集罗列了各个点的数据信息。一行为一个点的数据。格式如下所示,id是点数据的唯一标识。 id,label,property 1,property 2,property 3,… 边数据集罗列了各个边的数据信息,一行为一条边的数据。GES中图规格是以边的数量进行定义的,如一百万边。格式如下所示,id 1、id 2是一条边的两个端点的id。 id 1, id 2, label, property 1, property 2, … 图24 vertex_user_rds2hive新增字段映射 调整字段顺序,点文件中将label调整至第2列,边文件将label调整至第3列。调整完成后如图26所示,然后单击下一步。 图25 vertex_user_rds2hive调整字段顺序 图26 vertex_user_rds2hive字段映射 任务配置无需修改,直接保存并运行即可。 图27 任务配置 等待作业运行完成后,如果作业成功,则vertex_user表已成功迁移到MRS Hive中。 图28 vertex_user_rds2hive作业运行成功 参考2到4,完成vertex_movie_rds2hive、edge_friends_rds2hive和edge_rate_rds2hive作业的创建,将4张原始表从MySQL标准化到MRS Hive中。
  • 新建OBS到MySQL迁移作业 为方便演示,需要将OBS中的CSV格式的样例数据导入到MySQL数据库中。 在DataArts Studio数据集成控制台,进入“集群管理”页面,在集群列表中找到所需要的集群,单击“作业管理”。 在“作业管理”页面,单击“表/文件迁移”,再单击“新建作业”。 图9 表/文件迁移 按照如下步骤将数据源准备中的4张原始数据表,依次从OBS迁移到MySQL数据库中。 配置作业vertex_user_obs2rds。 源端的“源目录或文件”选择在数据源准备中上传到OBS的vertex_user.csv,由于表中有中文字符还需额外配置高级属性“编码类型”为“GBK”。目的端的“表名”选择在创建MySQL原始数据表中创建的vertex_user表。然后单击“下一步”。 图10 vertex_user_obs2rds作业配置 在字段映射中,检查字段映射顺序是否正确。如果字段映射顺序正确,单击下一步即可。 图11 vertex_user_obs2rds字段映射 任务配置无需修改,直接保存并运行即可。 图12 任务配置 等待作业运行完成后,如果作业成功,则vertex_user表已成功迁移到MySQL数据库中。 图13 vertex_user_obs2rds作业运行成功 参考2到4,完成vertex_movie_obs2rds、edge_friends_obs2rds和edge_rate_obs2rds作业的创建,将4张原始表从OBS迁移到MySQL中。
  • 功能描述 您可以将Hive表用作时态表,通过时态联接来关联Hive表。有关时态联接的详细信息,请参阅 temporal join。 Flink支持processing-time temporal join Hive Table,processing-time temporal join始终会加入最新版本的时态表。Flink支持分区表和 Hive非分区表的临时连接,对于分区表,Flink 支持自动跟踪Hive表的最新分区。详情可参考:Apache Flink Hive Read & Write
  • 注意事项 Flink目前不支持与Hive表进行基于事件时间event-time的时间关联。 Temporal Join The Latest Partition 特性,仅在 Flink STREAMING 模式下支持。 创建Flink OpenSource SQL作业时,在作业编辑界面的“运行参数”处,“Flink版本”需要选择“1.15”,勾选“保存作业日志”并设置保存作业日志的OBS桶,方便后续查看作业日志。 数据类型的使用,请参考Format章节。 Hive 方言支持的 DDL 语句,Flink 1.15 当前仅支持使用Hive语法创建OBS表和使用hive语法的DLI Lakehouse表。 使用Hive语法创建OBS表 defalut方言: with 属性中需要设置hive.is-external为true。 使用hive 方言:建表语句需要使用EXTERNAL关键字。 使用hive语法的DLI Lakehouse表 使用hive 方言:表属性中需要添加'is_lakehouse'='true'。 创建Flink OpenSource SQL作业时,在作业编辑界面配置开启checkpoint功能。
  • 背景信息 假定用户开发一个应用程序,用于管理企业中的使用A业务的用户信息,使用Hive客户端实现A业务操作流程如下: 普通表的操作: 创建用户信息表user_info。 在用户信息中新增用户的学历、职称信息。 根据用户编号查询用户姓名和地址。 A业务结束后,删除用户信息表。 表1 用户信息 编号 姓名 性别 年龄 地址 12005000201 A 男 19 A城市 12005000202 B 女 23 B城市 12005000203 C 男 26 C城市 12005000204 D 男 18 D城市 12005000205 E 女 21 E城市 12005000206 F 男 32 F城市 12005000207 G 女 29 G城市 12005000208 H 女 30 H城市 12005000209 I 男 26 I城市 12005000210 J 女 25 J城市
  • 操作步骤 以客户端安装用户,登录安装客户端的节点,客户端安装详细操作请参见安装客户端(3.x及之后版本)。 执行以下命令切换到客户端目录,客户端安装目录如:/opt/client。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建Hive表的权限,具体请参见创建角色配置拥有对应权限的角色,参考创建用户为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinit MRS集群用户 例如,kinit hiveuser。 运行Hive客户端命令,实现A业务。 内部表操作 执行以下命令登录Hive客户端命令行: beeline 根据表1创建用户信息表user_info并添加相关数据,例如: create table user_info(id string,name string,gender string,age int,addr string); insert into table user_info(id,name,gender,age,addr) values("12005000201","A","男",19,"A城市"); 在用户信息表user_info中新增用户的学历、职称信息。 以增加编号为12005000201的用户的学历、职称信息为例,其他用户类似。 alter table user_info add columns(education string,technical string); 根据用户编号查询用户姓名和地址。 以查询编号为12005000201的用户姓名和地址为例,其他用户类似。 select name,addr from user_info where id='12005000201'; 删除用户信息表。 drop table user_info; 查询导入数据。 select * from user_info; 删除用户信息表。 drop table user_info; 执行以下命令退出Hive客户端。 !q 外部分区表操作 可使用insert语句直接向外部表中插入数据,也可以使用load data命令导入HDFS中的文件数据到外部表中。如果需要使用load data命令导入文件数据,需执行以下操作: 根据表1数据创建文件。例如,文件名为“txt.log”,以空格拆分字段,以换行符作为行分隔符。 执行以下命令上传文件至HDFS中,例如“/tmp”目录下。 hdfs dfs -put txt.log /tmp 执行以下命令创建外部表数据存储路径: hdfs dfs -mkdir /hive/ hdfs dfs -mkdir /hive/user_info 执行以下命令登录Hive客户端命令行: beeline 执行以下命令创建表: create external table user_info(id string,name string,gender string,age int,addr string) partitioned by(year string) row format delimited fields terminated by ' ' lines terminated by '\n' stored as textfile location '/hive/user_info'; fields terminated:表示分隔的字符,如按空格分隔,' '。 lines terminated:表示分行的字符,如按换行分隔,'\n'。 /hive/user_info:存储表user_info数据的HDFS路径。 导入数据。 使用insert语句插入数据,以插入编号为12005000201的用户相关信息为例,其他用户类似。 insert into user_info partition(year="2018") values ("12005000201","A","男",19,"A城市"); 使用load data命令导入文件数据。 load data inpath '/tmp/txt.log' into table user_info partition (year='2011'); 其中,“/tmp/txt.log”为5.a上传至HDFS的数据文件。 执行以下命令查询导入数据。 select * from user_info; 执行以下命令删除用户信息表。 drop table user_info; 执行以下命令退出Hive客户端。 !q
  • 背景信息 假定用户开发一个应用程序,用于管理企业中的使用A业务的用户信息,使用Hive客户端实现A业务操作流程如下: 普通表的操作: 创建用户信息表user_info。 在用户信息中新增用户的学历、职称信息。 根据用户编号查询用户姓名和地址。 A业务结束后,删除用户信息表。 表1 用户信息 编号 姓名 性别 年龄 地址 12005000201 A 男 19 A城市 12005000202 B 女 23 B城市 12005000203 C 男 26 C城市 12005000204 D 男 18 D城市 12005000205 E 女 21 E城市 12005000206 F 男 32 F城市 12005000207 G 女 29 G城市 12005000208 H 女 30 H城市 12005000209 I 男 26 I城市 12005000210 J 女 25 J城市
  • SQL命令 创建CATALOG的SQL命令以及参数说明。 CREATE CATALOG hive_catalog_OBS PROPERTIES ( 'type'='hms', 'hive.metastore.uris' = 'thrift://192.x.x.x:port,thrift://192.x.x.x:port', 'hive.metastore.sasl.enabled' = 'true', 'hive.server2.thrift.sasl.qop'='auth-conf', 'hive.server2.authentication' = 'KERBEROS', 'hive.server2.authentication.kerberos.principal' = 'hive/hadoop.99261318_1115_4b1a_bcbd_f944f2d68731.com@99261318_1115_4B1A_BCBD_F944F2D68731.COM', 'hive.metastore.kerberos.principal' = 'hive/hadoop.99261318_1115_4b1a_bcbd_f944f2d68731.com@99261318_1115_4B1A_BCBD_F944F2D68731.COM', 'hadoop.security.authentication'='kerberos', 'hadoop.kerberos.principal' = 'USER_NAME', 'hive.version' = '3.1.0', 'fs.defaultFS'='hdfs://hacluster', 'hadoop.rpc.protection'='privacy', 'AWS_ACCESS_KEY' = '***', 'AWS_SECRET_KEY' = '***', 'AWS_ENDPOINT' = 'obs.cn-north-7.ulanqab.huawei.com', 'AWS_REGION' = 'cn-north-7', 'yarn.resourcemanager.address' = '192.X.X.X:port', 'yarn.resourcemanager.principal' = 'mapred/hadoop.hadoop.com@HADOOP.COM' ); 表2 参数说明 参数 说明 type 对接外部数据类型。 hive.metastore.uris hive元数据uri,可在hive-site.xml配置文件查看。 hive.metastore.sasl.enabled 可在hive-site.xml配置文件查看。 hive.server2.thrift.sasl.qop 可在hive-site.xml配置文件查看。 hive.server2.authentication 认证类型,在集群连接页面查看。 hive.server2.authentication.kerberos.principal 可在hive-site.xml配置文件查看。 hive.metastore.kerberos.principal 可在hive-site.xml配置文件查看。 hadoop.security.authentication 可在core-site.xml配置文件查看。 hadoop.kerberos.principal \ hive.version Hive版本。 fs.defaultFS 可在core-site.xml配置文件查看。 hadoop.rpc.protection 可在core-site.xml配置文件查看。 AWS_ACCESS_KEY access key,获取方式请参见对象存储服务的获取访问密钥(AK/SK)章节。 AWS_SECRET_KEY secret key,获取方式请参见对象存储服务的获取访问密钥(AK/SK)章节。 AWS_ENDPOINT obs地址,获取方式见请参见对象存储服务的获取终端节点章节。 AWS_REGION obs region,在obs页面查看。 参数获取方法。 连接mrs集群,请参见使用mrs客户端章节。 进入client目录下,显示出MRS的全部组件,目前使用的组件有HDFS和Hive组件。 cd /opt/Bigdata/client/ HDFS组件中包含了core-site.xml、hdfs-site.xml配置文件,Hive组件中包含了hive-site.xml配置配置。 进入组件中的配置文件查看参数。 HDFS组件查看。 cd ./HDFS/hadoop/etc/ 进入hadoop目录。 cd hadoop/hdfs-site.xml 打开hdfs-site.xml配置文件,查找相关参数。 vim hdfs-site.xml Hive组件查看。 /opt/Bigdata/client/Hive/config/hive-site.xml 打开hive-site.xml配置文件,查找相关参数。 vim hive-site.xml catalog中的obs指的是obs桶,不是obs并行文件系统,目前还不支持obs并行文件系统。
  • 开发并调度Import GES作业 假设MySQL中的原始数据表是每日更新的,我们希望每天都能将基于原始数据的最新图数据更新到GES中,则需要使用数据开发按如下步骤编排作业,并定期调度。 在DataArts Studio控制台首页,选择对应工作空间的“数据开发”模块,进入数据开发页面。 创建一个数据开发批处理作业,作业名称可以命名为“import_ges”。 图2 新建作业 在作业开发页面,拖动1个Dummy节点、8个CDM Job节点、和2个Import GES节点到画布中,选中连线图标并拖动,编排图3所示的作业。 其中Dummy节点不执行任何操作,只作为起始点的标识。CDM Job节点用于调用在创建数据集成作业中创建的数据集成作业。Import GES节点用于将图数据导入GES。 图3 编排作业 分别配置作业中的8个CDM Job节点。调用已创建的数据集成作业,将原始数据标准化为GES点/边数据集,并同步到OBS和MRS Hive中。 图4 配置CDM节点 CDM节点说明: vertex_user_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_user_rds2hive”。 vertex_user_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_user_rds2obs”。 edge_friends_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_friends_rds2hive”。 edge_friends_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_friends_rds2obs”。 vertex_movie_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_movie_rds2hive”。 vertex_movie_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_movie_rds2obs”。 edge_rate_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_rate_rds2hive”。 edge_rate_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_rate_rds2obs”。 分别配置作业中的2个Import GES节点。由于1个Import GES节点只能选择一张点表和一张边表,并生成对应的元数据,因此本示例中使用2个Import GES节点依次进行导入。 Import GES节点说明: Import_GES_user-friend:在节点属性中,选择图名称后,边数据集和点数据集分别填写为“edge_friends”边表和“vertex_user”点表。另外,应配置为不允许重复边,否则定期调度后将产生大量重复边。 注意,“元数据来源”需要选择为“新建元数据”,然后单击“元数据”参数后的生成按钮,弹出新建元数据窗口,如图6所示。在新建元数据窗口内,分别选择MRS中的“edge_friends”边表和“vertex_user”点表,输出目录可以设置为OBS点表和边表所在目录,然后单击生成,系统会自动在“元数据”参数处回填已生成的元数据Schema所在的OBS目录。 Import_GES_movie-rate:在节点属性中,选择图名称后,边数据集和点数据集分别填写为“edge_rate”边表和“vertex_movie”点表。另外,应配置为不允许重复边,否则定期调度后将产生大量重复边。 注意,“元数据来源”需要选择为“新建元数据”,然后单击“元数据”参数后的生成按钮,弹出新建元数据窗口,如图6所示。在新建元数据窗口内,分别选择MRS中的“edge_rate”边表和“vertex_movie”点表,输出目录可以设置为OBS点表和边表所在目录,然后单击生成,系统会自动在“元数据”参数处回填已生成的元数据Schema所在的OBS目录。 图5 配置Import GES节点 图6 新建元数据 作业编排完成后,单击,测试运行作业。 图7 测试运行作业 如果作业运行正常,单击“调度配置”,配置作业的调度策略。 图8 调度配置 说明: 2023/04/01 00:00开始,每天00点00分执行一次作业。 依赖属性:可以配置为依赖其他作业运行,本例不涉及,无需配置。 跨周期依赖:可以选择配置为依赖上一周期或者不依赖,此处配置为不依赖即可。 最后保存并提交版本(单击),执行调度作业(单击)。实现作业每天自动运行,每日数据将自动导入到GES图中。 您如果需要及时了解作业的执行结果是成功还是失败,可以通过数据开发的运维调度界面进行查看,如图9所示。 图9 查看作业执行情况
  • 问题背景与现象 Hive执行查询操作时报错Error running child : java.lang.StackOverflowError,具体报错信息如下: FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.StackOverflowError at org.apache.hive.come.esotericsoftware.kryo.io.Input.readVarInt(Input.java:355) at org.apache.hive.come.esotericsoftware.kryo.util.DefautClassResolver.readName(DefautClassResolver.java:127) at org.apache.hive.come.esotericsoftware.kryo.util.DefautClassResolver.readClass(DefautClassResolver.java:115) at org.apache.hive.come.esotericsoftware.kryo.Kryo.readClass(Kryo.java.656) at org.apache.hive.come.esotericsoftware.kryo.kryo.readClassAnd0bject(Kryo.java:767) at org.apache.hive.come.esotericsoftware.kryo.serializers.collectionSerializer.read(CollectionSerializer.java:112)
  • 处理步骤 调整上层业务,将动态分区数控制在“hive.exec.max.dynamic.partitions”参数值范围内。 执行set hive.exec.max.dynamic.partitions = XXX;命令调大“hive.exec.max.dynamic.partitions”参数值。 SparkSQL中需要设置“spark.hadoop.hive.exec.max.dynamic.partitions”参数。
  • 示例 使用Spark SQL创建Hive语法OBS表,并插入10条数据。模拟数据源。 CREATE TABLE IF NOT EXISTS demo.student( name STRING, score DOUBLE) PARTITIONED BY (classNo INT) STORED AS PARQUET LOCATION 'obs://demo/spark.db/student'; INSERT INTO demo.student PARTITION(classNo=1) VALUES ('Alice', 90.0), ('Bob', 80.0), ('Charlie', 70.0), ('David', 60.0), ('Eve', 50.0), ('Frank', 40.0), ('Grace', 30.0), ('Hank', 20.0), ('Ivy', 10.0), ('Jack', 0.0); 使用Flink SQL展示使用批的方式,从Hive语法OBS表demo.student中读取数据,并打印。需要开启checkpoint。 CREATE CATALOG myhive WITH ( 'type' = 'hive', 'default-database' = 'demo', 'hive-conf-dir' = '/opt/flink/conf' ); USE CATALOG myhive; create table if not exists print ( name STRING, score DOUBLE, classNo INT) with ('connector' = 'print'); insert into print select * from student; 结果(taskmanager的out日志): +I[Alice, 90.0, 1] +I[Bob, 80.0, 1] +I[Charlie, 70.0, 1] +I[David, 60.0, 1] +I[Eve, 50.0, 1] +I[Frank, 40.0, 1] +I[Grace, 30.0, 1] +I[Hank, 20.0, 1] +I[Ivy, 10.0, 1] +I[Jack, 0.0, 1] 使用Flink SQL展示使用流的方式,从Hive语法OBS表demo.student中读取数据,并打印。 CREATE CATALOG myhive WITH ( 'type' = 'hive' , 'default-database' = 'demo', 'hive-conf-dir' = '/opt/flink/conf' ); USE CATALOG myhive; create table if not exists print ( name STRING, score DOUBLE, classNo INT) with ('connector' = 'print'); insert into print select * from student /*+ OPTIONS('streaming-source.enable' = 'true', 'streaming-source.monitor-interval' = '3 m') */;