В настоящее время я работаю с Spark 2.4.3 и должен выполнить несколько объединений, например:
val res = df1.join(df2, Seq("x")).join(df3, Seq("y")).join(df4, Seq("z"))
, где каждый из задействованных DF создается из таблицы Hive. который содержит столбцы ArrayType. Например:
val df1 = spark.sql("SELECT x FROM TableWithArrayCols LATERAL VIEW EXPLODE(xArray) explodedX as x")
Как вы можете видеть, для создания DF требуется столбец (столбцы) TableWithArrayCols .
Я бы хотел, чтобы CBO запустил оптимизацию для переупорядочения соединений. Однако, насколько я понял, это не может произойти из-за отсутствия статистики для столбцов массива. Действительно, если я вычислю:
analyze table TableWithArrayCols compute statistics for columns xArray
, я получу следующее исключение:
org.apache.spark.sql.AnalysisException: Column xArray in table `myDB`.`TableWithArrayCols` is of type
ArrayType(StringType,true), and Spark does not support statistics collection on this column type.;
Мои вопросы:
1) Можно ли вручную добавить статистику c значения (например, min, max, num_nulls, different_count) для соответствующих метаданных? Если да, то как? Если нет, есть ли альтернативное решение?
2) В результате ручного добавления статистики автоматически запускается оптимизация из CBO?