Bucketing в Hive Internal Table и SparkSql - PullRequest
0 голосов
/ 11 октября 2018

Я создал внутреннюю таблицу кустов с интервалом в единицу времени с помощью модуля записи saveAsTable api.

df.repartition(numBuckets, somecol)
              .write()
              .format("parquet")
              .bucketBy(numBuckets,col1)
              .sortBy(col1)
              .saveAsTable(hiveTableName);

Теперь я запускаю 2 запроса на выборку с помощью spark sql, один для столбца с опцией Bucket, а другой для столбца без контура.но я не вижу разницы во времени исполнения.

Запросы: выберите * из t1, где col1 = '123' [t1 заключен в столбец col1] выберите * из t1, где col2 = '123' [col2 не является столбцом с разбивкой по категориям] Мои вопросы

  1. Как я могу убедиться, что во время выполнения запроса происходит полное сканирование таблицы или частичное сканирование соответствующей таблицы?
  2. Могу ли я получить какую-либо информацию из DAG илифизический план?Я видел оба, но не вижу никакой разницы. Это то, что я вижу в физическом плане

    == Физический план == * (1) Проект [col1 # 0, col2 # 1, col3 # 2, col4 # 3, col5 # 4, col6 # 5, col7 # 6, col8 # 7, col9 # 8, col10 # 9, col11 # 10, col12 # 11] + - * (1) Фильтр (isnotnull (col2 # 1)) && (col2 # 1 = 123)) + - * (1) FileScan parquet default.uk_geocrosswalk [col1 # 0, col2 # 1, col3 # 2, col4 # 3, col5 # 4, col6 # 5, col7 # 6,col8 # 7, col9 # 8, LSOA_MSOA_WEIGHT # 9, col11 # 10, col12 # 11] Пакетная обработка: true, формат: паркет, расположение: InMemoryFileIndex [hdfs: //url/a.parquet, PartitionFilters: [], PhedFilters: [IsNotNull (col2), EqualTo (col2,123)], ReadSchema: struct

  3. В физическом плане, почему выполняется сканирование файлов?Разве он не должен выполнять HiveTableScan, поскольку таблица была создана как таблица улья?

  4. Существуют ли определенные параметры конфигурации, которые я могу использовать для настройки моих запросов при использовании sparksql?
  5. Я вижу, что каждый раз, когда я впервые запускаю запрос в spark sql, это занимает значительно больше времени.Можно ли как-то согреть исполнителей до того, как запрос будет выполнен?

1 Ответ

0 голосов
/ 11 октября 2018

Паркет столбчатый.Паркет очень быстро из моего опыта.Столбчатый аспект вполне может объяснить одинаковую производительность - независимо от того, ключевой или нет, формат данных физически является столбчатым.

Это таблица Hive, но с использованием Parquet и Bucketing, которая недоступна для Hive / Impala.Так как это паркет, Hive Table Scan не подходит.Таблица Hive может иметь много физических форматов, текст, паркет, ORC.

Вы можете увидеть фильтрацию: PartitionFilters: [], PressedFilters: [IsNotNull (col2), EqualTo (col2,123)],

Нет прогрева как такового.Вы можете .cache вещи, но я тестировал и видел тесты, в которых нет большой разницы с точки зрения кэширования таблиц Паркет, но это зависит от теста.

...