AnalyticDB for MySQL湖仓版(3.0)支持使用批处理和交互式两种方法执行Spark SQL,两种执行方式都直接与AnalyticDB for MySQL的元数据服务连通,可以读写AnalyticDB for MySQL的库表。本文介绍批处理和交互式两种执行方式的注意事项、适用场景、特点及启动方法。
批处理
注意事项
使用批处理方式执行SQL时,必须在SQL执行开始处使用
USE <database_name>;
语法选择一个数据库。SQL语句中指定表时,必须为
database_name.table_name
格式。批处理方式执行DML、DDL或DQL等任何SQL语句时,只有返回执行成功或者失败,不返回数据。执行成功的结果会抽样一部分打印到日志中。如需查看SQL语句返回的数据,详情请参见查看Spark应用信息。
适用场景
执行多条相互依赖的SQL语句。
SQL语句需要严格的资源隔离。
需要处理较大规模的数据,例如使用SQL执行一次性的ETL。
有复杂的第三方依赖包需要上传,且这些包可能需要反复测试和替换。
特点
批处理方式提交的SQL运行在单独的Spark应用中,可以保证稳定性。
支持通过SQL语句描述独立的配置,如
SET spark.sql.adaptive.coalescePartitions.minPartitionSize = 2MB;
。批处理方式执行的SQL中如果包含SELECT语句,这些SELECT语句的执行结果会抽样一部分打印到日志中,您可以在日志中查看。
启动方法
在SQLConsole窗口,选择Job型资源组和Spark引擎。执行SQL语句时,在弹窗中选择继续执行。
交互式执行
注意事项
交互式执行的DDL和DML语句的执行结果仅返回最多1000行数据。
使用交互执行方式执行的DDL语句,只返回执行成功或者失败,不返回数据。例如执行
CREATE TABLE
语句,只提示成功或失败,不返回表中的数据,和开源社区保持一致。当有英文分号(;)隔开的多个SQL语句时,Spark引擎只会执行最后一行SQL。
ThriftServer引擎启动需要一定时间,如果出现启动时失败可以等待一定时间重试。
适用场景
临时进行数据计算,无需返回所有数据。
需要执行大量的DDL语句。
希望在提交DQL语句后,可以立即开始执行, 且对资源隔离不敏感,能允许一定的失败。
特点
同一个资源组中的SQL由共享的ThriftServer引擎执行,并返回1000条结果到控制台。
资源隔离是线程级的。多个用户在同一个Spark应用中执行SQL,相互之间可能存在干扰。
线程级的配置可以通过配置SQL生效。
应用级别的配置,需要重启ThriftServer引擎才能生效。如需修改应用级别的配置,需要先停止ThriftServer,参数配置完成后重新启动ThriftServer引擎。启动和停止ThriftServer的操作,请参见启停ThriftServer。
启动方式
使用Job型资源组交互式执行SQL时,需要启动ThriftServer,您可以通过以下两种方式启动ThriftServer。
在SQLConsole窗口,选择Job型资源组和Spark引擎。执行SQL语句时,在弹窗中选择启动ThriftServer。
在资源组列表中,单击目标Job型资源组操作列的高级配置,完成参数配置后,单击启动。详情请参见启动ThriftServer。
已启动ThriftServer的Job型资源组,在执行SQL时,都会采用交互式执行。