Я использую Pyspark 2.1
для вычисления статистики таблиц и столбцов из таблиц улья.
Когда я делаю:
spark.sql("ANALYZE TABLE <table name> COMPUTES STATISTICS")
Я могу собирать статистику с DESCRIBE EXTENDED
Команда SQL:
spark.sql("DESCRIBE EXTENDED <table name>").show()
Однако при вычислении статистики столбцов, например, так:
spark.sql("ANALYZE TABLE <table name> COMPUTES STATISTICS FOR COLUMNS")
Задание отправлено и успешно выполнено, но я не могу собрать статистику с помощью команды SQLв соответствии с рекомендациями этого ответа :
spark.sql("DESCRIBE EXTENDED <table name> <column name>").show()
Я получаю:
ParseException Неподдерживаемый оператор SQL
Повторное выдача того же DESCRIBE EXTENDED
запрос (без имени столбца) не возвращает никаких изменений в CatalogTable: я вижу только статистику таблицы (то есть sizeInBytes и rowCount).
Этот другой ответ предлагает получитьСтатистика Spark из «таблицы» в metastore, но для меня это загадочно ...
Как мне получить доступ к статистике на уровне столбцов в Spark?
Редактировать: Iисследовали это дальше, что позволяет мне уточнитьмой вопрос:
Похоже, мой клиент Hive (Hive View 2.0) и Spark SQL не записывают статистику в одном месте.
При использовании Spark SQL ANALYZE TABLE
метод, статистика только по таблице отображается в ключе Статистика в CatalogTable:
Statistics: sizeInBytes=15196959528, rowCount=39763901, isBroadcastable=false
Однако Hive View не учитывает эту статистику,которые не перечислены в моей статистике таблиц
И наоборот, при вычислении статистики таблиц или столбцов в представлении Hive я могу собирать статистику таблиц с помощью метода Spark SQL DESCRIBE EXTENDED
, но они появляются в Свойства ключ моего каталога.Это также указывает, были ли вычислены некоторые статистические данные столбца:
Properties: [numFiles=20, transient_lastDdlTime=1540381765, totalSize=15196959528, COLUMN_STATS_ACCURATE={"COLUMN_STATS":{"bubble_level":"true","bubble_level_n1s":"true","timestamp":"true"}}]
Таким образом, эти фрагменты информации кажутся независимыми, и тогда возникает вопрос: какой фрагмент может использоваться Spark дляоптимизировать план выполнения?Я понимаю, что некоторые из этих вопросов можно решить путем обновления до последней версии Spark, но на данный момент это не входит в мое расписание.
Вышеупомянутый ответ Яцека Ласковского предлагаетСтатистику Hive можно использовать, если она доступна с помощью метода Spark SQL DESCRIBE EXTENDED
.
Кто-нибудь может подтвердить это?
Заранее большое спасибо за помощь в прояснении этого вопроса.