本文介绍两种Spark SQL执行方式的注意事项、适用场景、特点及启动方法。

背景信息

AnalyticDB MySQL湖仓版(3.0)提供两种执行Spark SQL的方式,批处理和交互式执行。两种执行方式都直接与AnalyticDB MySQL的元数据服务连通,可以读写AnalyticDB 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行数据。
  • 使用交互执行方式执行的DQL语句,只返回执行成功或者失败,不返回数据。例如执行SELECT * FROM test;语句,只提示成功或失败,不返回表中的数据,和开源社区保持一致。
  • 当有英文分号(;)隔开的多个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时,都会采用交互式执行。