Hive Spark SQL临时视图的最佳实践

Hive Spark SQL临时视图的最佳实践,hive,apache-spark-sql,Hive,Apache Spark Sql,我是新来的Spark。我们使用Spark SQL查询AWS EMR上的Hive表 我通过分步构建几个临时视图来运行一个复杂的查询 例如,第一个临时视图是通过在步骤1中连接两个表,然后使用此临时视图创建的 作为下一步的源,依此类推,直到最后一步,最后一步的结果将持久化到磁盘。下面给出了一个例子: create temporary view test1 as select a.cust_id, b.prod_nm from a inner join b on a.id = b.id; creat

我是新来的
Spark
。我们使用Spark SQL查询
AWS EMR
上的
Hive

我通过分步构建几个临时视图来运行一个复杂的查询

例如,第一个临时视图是通过在步骤1中连接两个表,然后使用此临时视图创建的 作为下一步的源,依此类推,直到最后一步,最后一步的结果将持久化到磁盘。下面给出了一个例子:

create temporary view test1 as
select a.cust_id, b.prod_nm
from a 
inner join b
on a.id = b.id;

create temporary view test2 as
select t1.*, t2.*
from test1 t1
inner join c t2
on t1.cust_id = t2.cust_id;
请注意,第一步的结果视图(test1)在第二步中用作与另一个表
C
联接的源

现在,由于Spark的惰性计算,即使在每一步都创建了临时视图,但直到最后一步才提取数据。因此,在实现复杂转换的查询中,我们经常会遇到性能问题(例如,多个表上的连接)

基本上我有两个问题:

  • 如何估计此类临时视图的大小(在任何给定步骤) 这样我就可以在下一步选择正确的加入策略 在下一步中,此视图将连接到另一个表/视图
  • 对于这样一个框架,使用什么样的最佳实践来实现 改善性能
  • 注:我们使用Spark 2.4。我没有访问PySpark的权限,但只能访问SparkSQL(查询配置单元表)

    感谢您的帮助。谢谢

  • 无法确定创建的临时视图的大小
  • 当使用spark这样的分布式框架时,您的连接策略不应该基于数据的大小,而应该基于数据/连接键在多个分区中的分布方式。如果多次使用同一个临时视图,最好缓存它,这样应用程序就不会每次都从hdfs/s3读取它
  • 要在SQL
    cache TABLE cache\u视图中缓存的代码
    从表中选择*