Hive 在查询包含大量列的配置单元表时,是否可以减少元存储检查的数量?

Hive 在查询包含大量列的配置单元表时,是否可以减少元存储检查的数量?,hive,pyspark,databricks,azure-databricks,hive-metastore,Hive,Pyspark,Databricks,Azure Databricks,Hive Metastore,我正在databricks上使用sparksql,它使用一个配置单元元存储,我正在尝试设置一个使用相当多列(20+)的作业/查询 运行metastore验证检查所需的时间与我的查询中包含的列数成线性比例-是否有跳过此步骤的方法?还是预先计算支票?或者至少让metastore每个表只检查一次,而不是每个列检查一次 一个小例子是,当我运行以下命令时,甚至在调用display或collect之前,metastore检查器也会发生一次: new_table = table.withColumn("new

我正在databricks上使用sparksql,它使用一个配置单元元存储,我正在尝试设置一个使用相当多列(20+)的作业/查询

运行metastore验证检查所需的时间与我的查询中包含的列数成线性比例-是否有跳过此步骤的方法?还是预先计算支票?或者至少让metastore每个表只检查一次,而不是每个列检查一次

一个小例子是,当我运行以下命令时,甚至在调用display或collect之前,metastore检查器也会发生一次:

new_table = table.withColumn("new_col1", F.col("col1")
当我运行以下命令时,metastore检查器会发生多次,因此需要更长的时间:

new_table = (table
.withColumn("new_col1", F.col("col1")
.withColumn("new_col2", F.col("col2")
.withColumn("new_col3", F.col("col3")
.withColumn("new_col4", F.col("col4")
.withColumn("new_col5", F.col("col5")
)
metastore会检查它是否在驱动程序节点中执行以下操作:

20/01/09 11:29:24 INFO HiveMetaStore: 6: get_database: xxx
20/01/09 11:29:24 INFO audit: ugi=root    ip=unknown-ip-addr    cmd=get_database: xxx
用户在databricks上的视图为:

Performing Hive catalog operation: databaseExists
Performing Hive catalog operation: tableExists
Performing Hive catalog operation: getRawTable
Running command...

我很想知道是否有人可以确认这就是它的工作方式(每列一个元存储检查),以及我是否必须只计划元存储检查的开销。

我对这种行为感到惊讶,因为它不适合Spark处理模型,我无法在Scala中复制它。它可能在某种程度上特定于PySpark,但我怀疑这一点,因为PySpark只是用于创建Spark计划的API

然而,现在发生的事情是,在使用列(…)对计划进行分析之后。如果计划很大,这可能需要一段时间。然而,有一个简单的优化。将多个
替换为列(…)
对独立列的调用替换为
df。选择(F.col(“*”),F.col(“col2”)。作为(“new_col2”),…)
。在这种情况下,只执行一次分析


在一些超大计划的情况下,我们为单个笔记本单元节省了10分钟以上的分析时间。

为什么不关闭metastore验证?hive.metastore.schema.verification false hive.metastore.schema.verification.record.version false还有,spark版本是什么?您可以查看以下内容: