Коннектор Hive#

Коннектор Hive позволяет запрашивать данные, хранящиеся в хранилище данных Apache Hive. Hive состоит из трех компонентов:

  • Файлы данных в различных форматах, которые обычно хранятся в Hadoop Distributed File System (HDFS) или в системах объектного хранения, таких как Amazon S3.

  • Метаданные о том, как файлы данных сопоставлены со схемами и таблицами. Эти метаданные хранятся в базе данных, например MySQL, и доступны через сервис Hive metastore.

  • Язык запросов HiveQL. Этот язык запросов выполняется на распределенном вычислительном фреймворке, таком как MapReduce или Tez.

Trino использует только первые два компонента: данные и метаданные. Он не использует HiveQL или какую-либо часть среды выполнения Hive.

Требования#

Коннектор Hive требует сервис Hive metastore (HMS) или совместимую реализацию Hive metastore, такую как AWS Glue.

Необходимо выбрать и настроить поддерживаемую файловую систему в файле конфигурации каталога.

Координатор и все workers должны иметь сетевой доступ к Hive metastore и системе хранения. Доступ к Hive metastore по протоколу Thrift по умолчанию использует порт 9083.

Файлы данных должны быть в поддерживаемом формате. Форматы файлов можно настроить с помощью свойства таблицы format и других специальных свойств:

Для serializable-форматов разрешены только определенные SerDes:

  • RCText - RCFile с использованием ColumnarSerDe

  • RCBinary - RCFile с использованием LazyBinaryColumnarSerDe

  • SequenceFile с org.apache.hadoop.io.Text

  • SequenceFile с org.apache.hadoop.io.BytesWritable, содержащим записи protocol buffer с использованием com.twitter.elephantbird.hive.serde.ProtobufDeserializer

  • CSV - с использованием org.apache.hadoop.hive.serde2.OpenCSVSerde

  • JSON - с использованием org.apache.hive.hcatalog.data.JsonSerDe

  • OPENX_JSON - OpenX JSON SerDe из org.openx.data.jsonserde.JsonSerDe. Дополнительные сведения о реализации Trino см. в исходном репозитории.

  • TextFile

  • ESRI - с использованием com.esri.hadoop.hive.serde.EsriJsonSerDe

Общая конфигурация#

Чтобы настроить коннектор Hive, создайте файл свойств каталога etc/catalog/example.properties, который ссылается на коннектор hive.

Необходимо настроить metastore для метаданных.

Необходимо выбрать и настроить одну из поддерживаемых файловых систем.

connector.name=hive
hive.metastore.uri=thrift://example.net:9083
fs.x.enabled=true

Замените свойство конфигурации fs.x.enabled нужной файловой системой.

Если в качестве metastore используется AWS Glue, вместо этого необходимо установить hive.metastore в glue:

connector.name=hive
hive.metastore=glue

У каждого типа metastore есть специальные свойства конфигурации, а также General metastore configuration properties.

Несколько кластеров Hive#

Вы можете иметь столько каталогов, сколько нужно. Если у вас есть дополнительные кластеры Hive, просто добавьте еще один файл свойств в etc/catalog с другим именем, убедившись, что оно заканчивается на .properties. Например, если назвать файл свойств sales.properties, Trino создаст каталог sales с использованием настроенного коннектора.

Общие свойства конфигурации Hive#

В следующей таблице перечислены общие свойства конфигурации коннектора Hive. Дополнительные наборы свойств конфигурации приведены в других разделах документации коннектора Hive.

Общие свойства конфигурации Hive#

Имя свойства

Описание

По умолчанию

hive.recursive-directories

Включает чтение данных из подкаталогов расположений таблиц или партиций. Если отключено, подкаталоги игнорируются. Это эквивалентно свойству Hive hive.mapred.supports.subdirectories.

false

hive.ignore-absent-partitions

Игнорировать партиции, когда расположение в файловой системе не существует, вместо завершения запроса ошибкой. Это пропускает данные, которые могли ожидаться как часть таблицы.

false

hive.storage-format

Формат файлов по умолчанию, используемый при создании новых таблиц.

ORC

hive.orc.use-column-names

Доступ к столбцам ORC по имени. По умолчанию доступ к столбцам в файлах ORC выполняется по их порядковой позиции в определении таблицы Hive. Эквивалентное свойство сеанса каталога — orc_use_column_names. См. также ORC format configuration properties

false

hive.parquet.use-column-names

По умолчанию доступ к столбцам Parquet выполняется по имени. Установите это свойство в false, чтобы обращаться к столбцам по их порядковой позиции в определении таблицы Hive. Эквивалентное свойство сеанса каталога — parquet_use_column_names. См. также Parquet format configuration properties

true

hive.parquet.time-zone

Часовой пояс для чтения и записи Parquet.

По умолчанию JVM

hive.compression-codec

Кодек сжатия, используемый при записи файлов. Возможные значения: NONE, SNAPPY, LZ4, ZSTD или GZIP.

GZIP

hive.force-local-scheduling

Принудительно планировать splits на том же узле, где работает процесс Hadoop DataNode, обслуживающий данные split. Это полезно для установок, где Trino размещен совместно с каждым DataNode.

false

hive.respect-table-format

Следует ли записывать новые партиции с использованием существующего формата таблицы или формата Trino по умолчанию?

true

hive.immutable-partitions

Можно ли вставлять новые данные в существующие партиции? Если true, то установка hive.insert-existing-partitions-behavior в APPEND не разрешена. Это также аналогично влияет на свойство сеанса insert_existing_partitions_behavior.

false

hive.insert-existing-partitions-behavior

Что происходит при вставке данных в существующую партицию? Возможные значения:

  • APPEND - добавляет данные в существующие партиции

  • OVERWRITE - перезаписывает существующие партиции

  • ERROR - изменение существующих партиций не разрешено

Эквивалентное свойство сеанса каталога — insert_existing_partitions_behavior.

APPEND

hive.target-max-file-size

Максимальный размер новых файлов по принципу best effort.

1GB

hive.create-empty-bucket-files

Следует ли создавать пустые файлы для buckets без данных?

false

hive.validate-bucketing

Включает проверку, что данные находятся в правильном bucket при чтении bucketed-таблиц.

true

hive.partition-statistics-sample-size

Задает количество партиций для анализа при вычислении статистики таблицы.

100

hive.max-partitions-per-writers

Максимальное количество партиций на writer.

100

hive.max-partitions-for-eager-load

Максимальное количество партиций для одного сканирования таблицы, которые предварительно загружаются на координаторе. Некоторые оптимизации невозможны без eager loading.

100,000

hive.max-partitions-per-scan

Максимальное количество партиций для одного сканирования таблицы.

1,000,000

hive.non-managed-table-writes-enabled

Включает запись в non-managed (внешние) таблицы Hive.

false

hive.non-managed-table-creates-enabled

Включает создание non-managed (внешних) таблиц Hive.

true

hive.collect-column-statistics-on-write

Включает автоматический сбор статистики на уровне столбцов при записи. Подробности см. в Статистика таблиц.

true

hive.file-status-cache-tables

Кешировать список каталогов для определенных таблиц. Примеры:

  • fruit.apple,fruit.orange — кешировать списки только для таблиц apple и orange в схеме fruit

  • fruit.*,vegetable.* — кешировать списки для всех таблиц в схемах fruit и vegetable

  • * — кешировать списки для всех таблиц во всех схемах

hive.file-status-cache.excluded-tables

Если hive.file-status-cache-tables является списком включения, то это список исключения для кеша.

  • fruit.apple,fruit.orangeНЕ кешировать списки только для таблиц apple и orange в схеме fruit

  • fruit.*,vegetable.*НЕ кешировать списки для всех таблиц в схемах fruit и vegetable

hive.file-status-cache.max-retained-size

Максимальный удерживаемый размер кешированных записей состояния файлов.

1GB

hive.file-status-cache-expire-time

Как долго кешированный список каталога считается действительным.

1m

hive.per-transaction-file-status-cache.max-retained-size

Максимальный удерживаемый размер всех записей в кеше состояния файлов на транзакцию. Ограничение удерживаемого размера общее для всех выполняющихся запросов.

100MB

hive.rcfile.time-zone

Корректирует двоично закодированные значения timestamp к указанному часовому поясу. Для Hive 3.1+ должно быть установлено UTC.

По умолчанию JVM

hive.timestamp-precision

Задает точность для столбцов Hive типа TIMESTAMP. Возможные значения: MILLISECONDS, MICROSECONDS и NANOSECONDS. Значения с точностью выше настроенной округляются. Эквивалентное свойство сеанса каталога для использования в конкретном сеансе — timestamp_precision.

MILLISECONDS

hive.temporary-staging-directory-enabled

Управляет тем, используется ли временный staging-каталог, настроенный в hive.temporary-staging-directory-path, для операций записи. Временный staging-каталог никогда не используется для записи в несортированные таблицы на S3, зашифрованный HDFS или внешнее расположение. Запись в сортированные таблицы использует этот путь для staging временных файлов во время сортировки. Если отключено, целевое хранилище используется для staging при записи сортированных таблиц, что может быть неэффективно при записи в объектные хранилища вроде S3.

true

hive.temporary-staging-directory-path

Управляет расположением временного staging-каталога, используемого для операций записи. Заполнитель ${USER} можно использовать, чтобы задать разное расположение для каждого пользователя.

/tmp/presto-${USER}

hive.hive-views.enabled

Включает трансляцию для представлений Hive.

false

hive.hive-views.legacy-translation

Использовать legacy-алгоритм для трансляции представлений Hive. Для временного использования в конкретном каталоге можно использовать свойство сеанса каталога hive_views_legacy_translation.

false

hive.parallel-partitioned-bucketed-writes

Улучшает параллелизм записи partitioned и bucketed таблиц. Если отключено, количество потоков записи ограничено количеством buckets.

true

hive.query-partition-filter-required

Установите в true, чтобы принудительно требовать от запроса использования фильтра партиций. Для временного использования в конкретном каталоге можно использовать свойство сеанса каталога query_partition_filter_required.

false

hive.query-partition-filter-required-schemas

Позволяет указать список схем, для которых Trino будет требовать, чтобы запросы использовали фильтр по ключам партиций для исходных таблиц. Список можно указать с помощью hive.query-partition-filter-required-schemas или свойства сеанса query_partition_filter_required_schemas. Список учитывается только если свойство конфигурации hive.query-partition-filter-required или свойство сеанса query_partition_filter_required установлено в true.

[]

hive.table-statistics-enabled

Включает Статистика таблиц. Эквивалентное свойство сеанса каталога для использования в конкретном сеансе — statistics_enabled. Установите в false, чтобы отключить статистику. Отключение статистики означает, что Оптимизации на основе стоимости не сможет принимать разумные решения о плане запроса.

true

hive.auto-purge

Задает значение по умолчанию для свойства таблицы auto_purge у managed таблиц. Дополнительные сведения об auto_purge см. в Свойства таблицы.

false

hive.partition-projection-enabled

Включает поддержку Athena partition projection

true

hive.s3-glacier-filter

Фильтровать объекты S3 по их классу хранения и статусу восстановления, если применимо. Возможные значения:

  • READ_ALL - читать файлы из всех классов хранения S3

  • READ_NON_GLACIER - читать файлы из классов хранения не S3 Glacier

  • READ_NON_GLACIER_AND_RESTORED - читать файлы из классов хранения не S3 Glacier и восстановленные объекты из класса хранения Glacier

READ_ALL

hive.max-partition-drops-per-query

Максимальное количество партиций, удаляемых одним запросом.

100,000

hive.metastore.partition-batch-size.max

Максимальное количество партиций, обрабатываемых в одном batch.

100

hive.single-statement-writes

Включает auto-commit для всех записей. Это можно использовать, чтобы запретить транзакции записи с несколькими операторами.

false

hive.metadata.parallelism

Количество потоков, используемых для получения метаданных. В настоящее время параллелизована только загрузка таблиц.

8

hive.protobuf.descriptors.location

Путь к каталогу, где хранятся двоичные файлы дескрипторов Protocol Buffer, используемые для чтения таблиц, сохраненных в формате com.twitter.elephantbird.hive.serde.ProtobufDeserializer.

hive.protobuf.descriptors.cache.max-size

Максимальный размер кеша дескрипторов Protocol Buffer

64

hive.protobuf.descriptors.cache.refresh-interval

Длительность, после которой загруженные дескрипторы Protocol Buffer должны быть повторно загружены с диска.

1d

Конфигурация доступа к файловой системе#

Коннектор поддерживает доступ к следующим файловым системам:

Необходимо включить и настроить доступ к конкретной файловой системе. Legacy-поддержка не рекомендуется и будет удалена.

Поддержка отказоустойчивого выполнения#

Коннектор поддерживает Fault-tolerant execution для обработки запросов. Операции чтения и записи поддерживаются с любой политикой повторных попыток для нетранзакционных таблиц.

Операции чтения поддерживаются с любой политикой повторных попыток для транзакционных таблиц. Операции записи и операции CREATE TABLE ... AS не поддерживаются с какой-либо политикой повторных попыток для транзакционных таблиц.

Безопасность#

Коннектор поддерживает разные способы аутентификации для используемой файловой системы и metastore.

Кроме того, поддерживаются следующие возможности, связанные с безопасностью.

Авторизация#

Проверки авторизации можно включить, задав свойство hive.security в файле свойств каталога. Это свойство должно принимать одно из следующих значений:

Значения свойства hive.security#

Значение свойства

Описание

allow-all (default value)

Проверки авторизации не выполняются.

read-only

Операции, читающие данные или метаданные, такие как SELECT, разрешены, но операции, записывающие данные или метаданные, такие как CREATE, INSERT или DELETE, запрещены.

file

Проверки авторизации выполняются с помощью файла конфигурации управления доступом на уровне каталога, путь к которому указан в свойстве конфигурации каталога security.config-file. Подробности см. в Файлы контроля доступа на уровне каталога.

sql-standard

Пользователям разрешено выполнять операции, если у них есть необходимые привилегии согласно стандарту SQL. В этом режиме Trino применяет проверки авторизации для запросов на основе привилегий, определенных в Hive metastore. Чтобы изменить эти привилегии, используйте команды GRANT privilege и REVOKE privilege.

Подробности см. в разделе Авторизация на основе стандарта SQL.

Авторизация на основе стандарта SQL#

Когда включена безопасность sql-standard, Trino применяет такую же авторизацию на основе стандарта SQL, как Hive.

Поскольку поддержка синтаксиса ROLE в Trino соответствует стандарту SQL, а Hive не следует стандарту SQL в точности, существуют следующие ограничения и различия:

  • CREATE ROLE role WITH ADMIN is not supported.

  • Роль admin должна быть включена для выполнения CREATE ROLE, DROP ROLE или CREATE SCHEMA.

  • GRANT role TO user GRANTED BY someone is not supported.

  • REVOKE role FROM user GRANTED BY someone is not supported.

  • По умолчанию все роли пользователя, кроме admin, включены в новом пользовательском сеансе.

  • Одну конкретную роль можно выбрать, выполнив SET ROLE role.

  • SET ROLE ALL включает все роли пользователя, кроме admin.

  • Роль admin должна быть явно включена выполнением SET ROLE admin.

  • GRANT privilege ON SCHEMA schema не поддерживается. Владельца схемы можно изменить с помощью ALTER SCHEMA schema SET AUTHORIZATION user

Шифрование Parquet#

Коннектор Hive поддерживает чтение файлов Parquet, зашифрованных с помощью Parquet Modular Encryption (PME). Ключи расшифровки можно передать через переменные окружения. Запись зашифрованных файлов Parquet не поддерживается.

Свойства шифрования Parquet#

Имя свойства

Описание

По умолчанию

pme.environment-key-retriever.enabled

Включает средство получения ключей, которое читает ключи расшифровки из переменных окружения.

false

pme.aad-prefix

Префикс AAD, используемый при декодировании файлов Parquet. Должен совпадать с префиксом, использованным при записи файлов, если применимо.

pme.check-footer-integrity

Проверять подпись для plaintext footer файлов.

true

Когда установлено pme.environment-key-retriever.enabled, передайте ключи через переменные окружения:

  • pme.environment-key-retriever.footer-keys

  • pme.environment-key-retriever.column-keys

Каждая переменная принимает либо один ключ в кодировке base64, либо список пар id:key через запятую (ключи в кодировке base64), где id должен соответствовать метаданным ключа, встроенным в файл Parquet.

Поддержка SQL#

Коннектор предоставляет доступ на чтение и запись к данным и метаданным в настроенной системе объектного хранения и хранилищах метаданных:

Практические рекомендации по миграции с Hive на Trino см. в руководстве по миграции.

В следующих разделах приведена информация о поддержке SQL, специфичная для Hive.

Базовые примеры использования#

Приведенные здесь примеры работают в Google Cloud Storage, если заменить s3:// на gs://.

Создайте новую таблицу Hive с именем page_views в схеме web, которая хранится в формате файлов ORC, партиционирована по дате и стране и bucketed по пользователю на 50 buckets. Обратите внимание, что Hive требует, чтобы столбцы партиций были последними столбцами в таблице:

CREATE TABLE example.web.page_views (
  view_time TIMESTAMP,
  user_id BIGINT,
  page_url VARCHAR,
  ds DATE,
  country VARCHAR
)
WITH (
  format = 'ORC',
  partitioned_by = ARRAY['ds', 'country'],
  bucketed_by = ARRAY['user_id'],
  bucket_count = 50
)

Создайте новую схему Hive с именем web, которая хранит таблицы в bucket S3 с именем my-bucket:

CREATE SCHEMA example.web
WITH (location = 's3://my-bucket/')

Удалите схему:

DROP SCHEMA example.web

Удалите партицию из таблицы page_views:

DELETE FROM example.web.page_views
WHERE ds = DATE '2016-08-09'
  AND country = 'US'

Запросите таблицу page_views:

SELECT * FROM example.web.page_views

Выведите список партиций таблицы page_views:

SELECT * FROM example.web."page_views$partitions"

Создайте внешнюю таблицу Hive с именем request_logs, которая указывает на существующие данные в S3:

CREATE TABLE example.web.request_logs (
  request_time TIMESTAMP,
  url VARCHAR,
  ip VARCHAR,
  user_agent VARCHAR
)
WITH (
  format = 'TEXTFILE',
  external_location = 's3://my-bucket/data/logs/'
)

Соберите статистику для таблицы request_logs:

ANALYZE example.web.request_logs;

Удалите внешнюю таблицу request_logs. Это удаляет только метаданные таблицы. Каталог данных, на который она ссылается, не удаляется:

DROP TABLE example.web.request_logs
  • CREATE TABLE AS можно использовать для создания транзакционных таблиц в формате ORC следующим образом:

    CREATE TABLE <name>
    WITH (
        format='ORC',
        transactional=true
    )
    AS <query>
    

Добавьте пустую партицию в таблицу page_views:

CALL system.create_empty_partition(
    schema_name => 'web',
    table_name => 'page_views',
    partition_columns => ARRAY['ds', 'country'],
    partition_values => ARRAY['2016-08-09', 'US']);

Удалите статистику для партиции таблицы page_views:

CALL system.drop_stats(
    schema_name => 'web',
    table_name => 'page_views',
    partition_values => ARRAY[ARRAY['2016-08-09', 'US']]);

Таблицы, созданные в Hive с помощью Twitter Elephantbird поддерживаются для чтения. Двоичный protobuf-дескриптор, указанный в serialization.class, должен храниться в каталоге, настроенном через hive.protobuf.descriptors.location на каждом worker.

...
row format serde "com.twitter.elephantbird.hive.serde.ProtobufDeserializer"
with serdeproperties (
    "serialization.class"="com.example.proto.gen.Storage$User"
)

Процедуры#

Используйте оператор CALL для выполнения задач манипуляции данными или администрирования. Процедуры должны включать квалифицированное имя каталога, если ваш каталог Hive называется web:

CALL web.system.example_procedure()

Доступны следующие процедуры:

  • system.create_empty_partition(schema_name, table_name, partition_columns, partition_values)

    Создает пустую партицию в указанной таблице.

  • system.sync_partition_metadata(schema_name, table_name, mode, case_sensitive)

    Проверяет и обновляет список партиций в metastore. Доступны три режима:

    • ADD : добавить все партиции, существующие в файловой системе, но отсутствующие в metastore.

    • DROP: удалить все партиции, существующие в metastore, но отсутствующие в файловой системе.

    • FULL: выполнить и ADD, и DROP.

    Аргумент case_sensitive необязателен. Значение по умолчанию true используется для совместимости с поведением Hive MSCK REPAIR TABLE, которое ожидает, что имена столбцов партиций в путях файловой системы будут в нижнем регистре (например, col_x=SomeValue). Партиции в файловой системе, не соответствующие этому соглашению, игнорируются, если аргумент не установлен в false.

  • system.drop_stats(schema_name, table_name, partition_values)

    Удаляет статистику для подмножества партиций или всей таблицы. Партиции задаются как массив, элементы которого являются массивами значений партиций (аналогично аргументу partition_values в create_empty_partition). Если аргумент partition_values опущен, статистика удаляется для всей таблицы.

  • system.register_partition(schema_name, table_name, partition_columns, partition_values, location)

    Регистрирует существующее расположение как новую партицию в metastore для указанной таблицы.

    Если аргумент location опущен, расположение партиции строится с использованием partition_columns и partition_values.

    По соображениям безопасности процедура включена только когда hive.allow-register-partition-procedure установлено в true.

  • system.unregister_partition(schema_name, table_name, partition_columns, partition_values)

    Отменяет регистрацию указанной существующей партиции в metastore для указанной таблицы. Данные партиции не удаляются.

  • system.flush_metadata_cache()

    Очищает все кеши метаданных Hive.

  • system.flush_metadata_cache(schema_name => ..., table_name => ...)

    Очищает записи кеша метаданных Hive, связанные с выбранной таблицей. Процедура требует передачи именованных параметров.

  • system.flush_metadata_cache(schema_name => ..., table_name => ..., partition_columns => ARRAY[...], partition_values => ARRAY[...])

    Очищает записи кеша метаданных Hive, связанные с выбранной партицией. Процедура требует передачи именованных параметров.

Управление данными#

Функциональность Управление данными включает поддержку операторов INSERT, UPDATE, DELETE и MERGE; точная поддержка зависит от системы хранения, формата файлов и metastore.

При подключении к Hive metastore версии 3.x коннектор Hive поддерживает чтение из insert-only и ACID таблиц и запись в них, с полной поддержкой partitioning и bucketing.

DELETE, примененный к нетранзакционным таблицам, поддерживается только если таблица партиционирована и предложение WHERE соответствует целым партициям. Транзакционные таблицы Hive в формате ORC поддерживают удаление “row-by-row”, при котором предложение WHERE может соответствовать произвольным наборам строк.

UPDATE поддерживается только для транзакционных таблиц Hive в формате ORC. UPDATE столбцов партиций или buckets не поддерживается.

MERGE поддерживается только для ACID-таблиц.

ACID tables created with Hive Streaming Ingest не поддерживаются.

Управление схемами и таблицами#

Коннектор Hive поддерживает запросы и управление таблицами и схемами Hive (базами данных). Хотя некоторые редкие операции необходимо выполнять напрямую в Hive, большинство операций можно выполнять с помощью Trino.

Эволюция схемы#

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

Преобразование типов при эволюции схемы Hive#

Тип данных

Преобразуется в

BOOLEAN

VARCHAR

VARCHAR

BOOLEAN, TINYINT, SMALLINT, INTEGER, BIGINT, REAL, DOUBLE, TIMESTAMP, DATE, CHAR as well as narrowing conversions for VARCHAR

CHAR

VARCHAR, narrowing conversions for CHAR

TINYINT

VARCHAR, SMALLINT, INTEGER, BIGINT, DOUBLE, DECIMAL

SMALLINT

VARCHAR, INTEGER, BIGINT, DOUBLE, DECIMAL

INTEGER

VARCHAR, BIGINT, DOUBLE, DECIMAL

BIGINT

VARCHAR, DOUBLE, DECIMAL

REAL

DOUBLE, DECIMAL

DOUBLE

FLOAT, DECIMAL

DECIMAL

DOUBLE, REAL, VARCHAR, TINYINT, SMALLINT, INTEGER, BIGINT, as well as narrowing and widening conversions for DECIMAL

DATE

VARCHAR

TIMESTAMP

VARCHAR, DATE

VARBINARY

VARCHAR

Любая ошибка преобразования приводит к null, что соответствует поведению Hive. Например, преобразование строки 'foo' в число или преобразование строки '1234' в TINYINT (у которого максимальное значение 127).

Эволюция схемы Avro#

Trino поддерживает запросы и управление таблицами Hive с форматом хранения Avro, где схема задается на основе файла/литерала схемы Avro. Trino также может создавать таблицы, выводя схему из допустимого файла схемы Avro, расположенного локально или удаленно в HDFS/на веб-сервере.

Чтобы указать, что для интерпретации данных таблицы должна использоваться схема Avro, используйте свойство таблицы avro_schema_url.

Схему можно разместить в локальной файловой системе или удаленно в следующих расположениях:

  • HDFS (e.g. avro_schema_url = 'hdfs://user/avro/schema/avro_data.avsc')

  • S3 (e.g. avro_schema_url = 's3n:///schema_bucket/schema/avro_data.avsc')

  • Веб-сервер (например, avro_schema_url = 'http://example.org/schema/avro_data.avsc')

URL, где находится схема, должен быть доступен из Hive metastore и узлов координатора/workers Trino.

В качестве альтернативы можно использовать свойство таблицы avro_schema_literal для определения схемы Avro.

Таблица, созданная в Trino с использованием свойства avro_schema_url или avro_schema_literal, ведет себя так же, как таблица Hive с установленным avro.schema.url или avro.schema.literal.

Пример:

CREATE TABLE example.avro.avro_data (
   id BIGINT
 )
WITH (
   format = 'AVRO',
   avro_schema_url = '/usr/local/avro_data.avsc'
)

Столбцы, перечисленные в DDL (id в примере выше), игнорируются, если указан avro_schema_url. Схема таблицы соответствует схеме в файле схемы Avro. Перед любой операцией чтения выполняется обращение к схеме Avro, поэтому результат запроса отражает любые изменения схемы. Таким образом Trino использует возможности обратной совместимости Avro.

Если схема таблицы изменяется в файле схемы Avro, новую схему все еще можно использовать для чтения старых данных. Новые или переименованные поля должны иметь значение по умолчанию в файле схемы Avro.

Поведение эволюции схемы следующее:

  • Столбец добавлен в новой схеме: данные, созданные со старой схемой, возвращают значение по умолчанию, когда таблица использует новую схему.

  • Столбец удален в новой схеме: данные, созданные со старой схемой, больше не выводят данные из удаленного столбца.

  • Столбец переименован в новой схеме: это эквивалентно удалению столбца и добавлению нового, и данные, созданные со старой схемой, возвращают значение по умолчанию, когда таблица использует новую схему.

  • Изменение типа столбца в новой схеме: если приведение типа поддерживается Avro или коннектором Hive, выполняется преобразование. Для несовместимых типов выдается ошибка.

Ограничения#

Следующие операции не поддерживаются, когда установлен avro_schema_url:

  • CREATE TABLE AS не поддерживается.

  • Столбцы bucketing (bucketed_by) не поддерживаются в CREATE TABLE.

  • Команды ALTER TABLE, изменяющие столбцы, не поддерживаются.

ALTER TABLE EXECUTE#

Коннектор поддерживает следующие команды для использования с ALTER TABLE EXECUTE.

optimize#

Команда optimize используется для перезаписи содержимого указанной таблицы так, чтобы оно было объединено в меньшее число более крупных файлов. Если таблица секционирована, компактирование данных применяется отдельно к каждой секции, выбранной для оптимизации. Эта операция повышает производительность чтения.

Объединяются все файлы с размером меньше необязательного параметра file_size_threshold (значение порога по умолчанию — 100MB):

ALTER TABLE test_table EXECUTE optimize

Следующий оператор объединяет в таблице файлы размером меньше 128 мегабайт:

ALTER TABLE test_table EXECUTE optimize(file_size_threshold => '128MB')

Можно использовать предложение WHERE со столбцами, по которым секционирована таблица, чтобы отфильтровать секции для оптимизации:

ALTER TABLE test_partitioned_table EXECUTE optimize
WHERE partition_key = 1

Можно использовать более сложное предложение WHERE, чтобы сузить область действия процедуры optimize. В следующем примере значения меток времени приводятся к датам, а сравнение используется для оптимизации только секций с данными за 2022 год или более поздними:

ALTER TABLE test_table EXECUTE optimize
WHERE CAST(timestamp_tz AS DATE) > DATE '2021-12-31'

Команда optimize по умолчанию отключена и может быть включена для каталога с помощью свойства сеанса <catalog-name>.non_transactional_optimize_enabled:

SET SESSION <catalog_name>.non_transactional_optimize_enabled=true

Warning

Поскольку таблицы Hive нетранзакционные, обратите внимание на следующие возможные последствия:

  • Если запросы выполняются к таблицам, которые в данный момент оптимизируются, могут быть прочитаны дублирующиеся строки.

  • В редких случаях, когда во время операции optimize возникают исключения, требуется ручная очистка каталога таблицы. В этой ситуации обратитесь к журналам Trino и сообщениям об ошибке запроса, чтобы узнать, какие файлы нужно удалить.

Свойства таблицы#

Свойства таблицы предоставляют или задают метаданные для базовых таблиц. Это ключевой элемент для операторов CREATE TABLE AS. Свойства таблицы передаются коннектору с помощью предложения WITH:

CREATE TABLE tablename
WITH (format='CSV',
      csv_escape = '"')
Свойства таблицы коннектора Hive#

Имя свойства

Описание

По умолчанию

auto_purge

Указывает настроенному metastore выполнять purge при удалении таблицы или партиции вместо мягкого удаления через trash.

avro_schema_url

URI, указывающий на Эволюция схемы Avro для таблицы.

bucket_count

Количество buckets для группировки данных. Допустимо только при использовании с bucketed_by.

0

bucketed_by

Столбец bucketing для таблицы хранения. Допустимо только при использовании с bucket_count.

[]

bucketing_version

Указывает, какую версию Hive bucketing использовать. Допустимые значения: 1 или 2.

csv_escape

Escape-символ CSV. Требует формат CSV.

csv_quote

Символ кавычек CSV. Требует формат CSV.

csv_separator

Символ-разделитель CSV. Требует формат CSV. Можно использовать другие разделители, такие как |, или Unicode для настройки невидимых разделителей, например табуляции с U&'\0009'.

,

external_location

URI для внешней таблицы Hive на S3, Azure Blob Storage и т. д. Дополнительные сведения см. в Базовые примеры использования.

format

Формат файлов таблицы. Допустимые значения включают ORC, PARQUET, AVRO, RCBINARY, RCTEXT, SEQUENCEFILE, JSON, OPENX_JSON, TEXTFILE, CSV и REGEX. Свойство каталога hive.storage-format задает значение по умолчанию и может изменить его.

null_format

Формат сериализации для значения NULL. Требует формат TextFile, RCText или SequenceFile.

orc_bloom_filter_columns

Список столбцов через запятую для ORC bloom filter. Улучшает производительность запросов, использующих предикаты равенства, такие как =, IN, и небольшие диапазонные предикаты при чтении файлов ORC. Требует формат ORC.

[]

orc_bloom_filter_fpp

Вероятность ложноположительного срабатывания ORC bloom filters. Требует формат ORC.

0.05

partitioned_by

Столбец партиционирования для таблицы хранения. Столбцы, перечисленные в предложении partitioned_by, должны быть последними столбцами, как определено в DDL.

[]

parquet_bloom_filter_columns

Список столбцов через запятую для Parquet bloom filter. Улучшает производительность запросов, использующих предикаты равенства, такие как =, IN, и небольшие диапазонные предикаты при чтении файлов Parquet. Требует формат Parquet.

[]

skip_footer_line_count

Количество строк footer, игнорируемых при разборе файла данных. Требует таблицы формата TextFile или CSV.

skip_header_line_count

Количество строк header, игнорируемых при разборе файла данных. Требует таблицы формата TextFile или CSV.

sorted_by

Столбец для сортировки, используемый для определения bucketing строки. Допустимо только если также указаны bucketed_by и bucket_count.

[]

textfile_field_separator

Позволяет использовать пользовательские разделители полей, такие как ‘|’, для таблиц формата TextFile.

textfile_field_separator_escape

Позволяет использовать пользовательский escape-символ для таблиц формата TextFile.

transactional

Установите это свойство в true, чтобы создать транзакционную ORC ACID таблицу. Требует формат ORC. Это свойство может отображаться как true для insert-only таблиц, созданных с использованием старых версий Hive.

partition_projection_enabled

Включает partition projection для выбранной таблицы. Сопоставляется из свойства таблицы AWS Athena table property projection.enabled.

partition_projection_ignore

Игнорировать любые свойства partition projection, сохраненные в metastore для выбранной таблицы. Это свойство только Trino, позволяющее обойти проблемы совместимости для конкретной таблицы; если оно включено, Trino игнорирует все остальные параметры конфигурации, связанные с partition projection.

partition_projection_location_template

Шаблон расположения projected partition, например s3a://test/name=${name}/. Сопоставляется из свойства таблицы AWS Athena storage.location.template

${table_location}/${partition_name}

extra_properties

Дополнительные свойства, добавленные к таблице Hive. Эти свойства не используются Trino и доступны в metadata-таблице $properties. Свойства не включаются в вывод операторов SHOW CREATE TABLE.

Metadata-таблицы#

Сырые свойства таблицы Hive доступны как скрытая таблица, содержащая отдельный столбец для каждого свойства таблицы и одну строку со значениями свойств.

Таблица $properties#

Имя таблицы свойств составляется из имени таблицы с добавленным $properties. Она предоставляет параметры таблицы в metastore.

Имена и значения свойств можно посмотреть простым запросом:

SELECT * FROM example.web."page_views$properties";
       stats_generated_via_stats_task        | auto.purge |       trino_query_id       | trino_version | transactional
---------------------------------------------+------------+-----------------------------+---------------+---------------
 workaround for potential lack of HIVE-12730 | false      | 20230705_152456_00001_nfugi | 434           | false
Таблица $partitions#

Таблица $partitions предоставляет список всех значений партиций партиционированной таблицы.

Следующий пример запроса возвращает все значения партиций из таблицы page_views в схеме web каталога example:

SELECT * FROM example.web."page_views$partitions";
     day    | country
------------+---------
 2023-07-01 | POL
 2023-07-02 | POL
 2023-07-03 | POL
 2023-03-01 | USA
 2023-03-02 | USA

Свойства столбцов#

Свойства столбцов коннектора Hive#

Имя свойства

Описание

По умолчанию

partition_projection_type

Определяет тип проекции секций, используемый для этого столбца. Может использоваться только для столбцов секционирования. Доступные типы: ENUM, INTEGER, DATE, INJECTED. Сопоставляется из свойства таблицы AWS Athena projection.${columnName}.type.

partition_projection_values

Используется с partition_projection_type, установленным в ENUM. Содержит статический список значений, используемых для создания секций. Сопоставляется из свойства таблицы AWS Athena projection.${columnName}.values.

partition_projection_range

Используется с partition_projection_type, установленным в INTEGER или DATE, для определения диапазона. Это массив из двух элементов, описывающий минимальное и максимальное значения диапазона, используемые для создания секций. Создание начинается с минимума, затем значение увеличивается на заданный partition_projection_interval до максимума. Например, формат ['1', '4'] используется для partition_projection_type=INTEGER, а ['2001-01-01', '2001-01-07'] или ['NOW-3DAYS', 'NOW'] — для partition_projection_type=DATE. Сопоставляется из свойства таблицы AWS Athena projection.${columnName}.range.

partition_projection_interval

Используется с partition_projection_type, установленным в INTEGER или DATE. Представляет интервал, используемый для создания секций в заданном диапазоне partition_projection_range. Сопоставляется из свойства таблицы AWS Athena projection.${columnName}.interval.

partition_projection_digits

Используется с partition_projection_type, установленным в INTEGER. Количество цифр, используемых с проекцией целочисленного столбца. Сопоставляется из свойства таблицы AWS Athena projection.${columnName}.digits.

partition_projection_format

Используется с partition_projection_type, установленным в DATE. Формат проекции столбца даты, заданный как строка, например yyyy MM или MM-dd-yy HH:mm:ss, для использования с классом Java DateTimeFormatter. Сопоставляется из свойства таблицы AWS Athena projection.${columnName}.format.

partition_projection_interval_unit

Используется с partition_projection_type=DATE. Единица интервала диапазона проекции столбца даты, заданная в partition_projection_interval. Сопоставляется из свойства таблицы AWS Athena projection.${columnName}.interval.unit.

Metadata-столбцы#

Помимо определенных столбцов, коннектор Hive автоматически предоставляет метаданные в нескольких скрытых столбцах каждой таблицы:

  • $bucket: номер bucket для этой строки

  • $path: полный путь файловой системы к файлу для этой строки

  • $file_modified_time: дата и время последнего изменения файла для этой строки

  • $file_size: размер файла для этой строки

  • $partition: имя партиции для этой строки

Эти столбцы можно использовать в SQL-операторах как любые другие столбцы. Их можно выбирать напрямую или использовать в условных операторах. Например, можно просмотреть размер файла, расположение и партицию для каждой записи:

SELECT *, "$path", "$file_size", "$partition"
FROM example.web.page_views;

Получите все записи, принадлежащие файлам, хранящимся в партиции ds=2016-08-09/country=US:

SELECT *, "$path", "$file_size"
FROM example.web.page_views
WHERE "$partition" = 'ds=2016-08-09/country=US'

Управление представлениями#

Trino позволяет читать из материализованных представлений Hive и может быть настроен для поддержки чтения представлений Hive.

Материализованные представления#

Коннектор Hive поддерживает чтение из материализованных представлений Hive. В Trino эти представления представлены как обычные таблицы только для чтения.

Представления Hive#

Представления Hive определяются в HiveQL и хранятся в Hive Metastore Service. Они анализируются, чтобы обеспечить доступ на чтение к данным.

Коннектор Hive включает поддержку чтения представлений Hive в трех разных режимах.

  • Отключено

  • Legacy

  • Experimental

Если требуется использовать представления Hive из Trino, необходимо сравнить результаты в Hive и Trino для каждого определения представления, чтобы убедиться в идентичности результатов. Используйте experimental-режим, когда это возможно. Избегайте legacy-режима. Оставьте поддержку представлений Hive отключенной, если вы не обращаетесь к представлениям Hive из Trino.

Поведение можно настроить в файле свойств каталога.

По умолчанию представления Hive выполняются с режимом безопасности RUN AS DEFINER. Установите свойство конфигурации каталога hive.hive-views.run-as-invoker в true, чтобы использовать семантику RUN AS INVOKER.

Отключено

Поведение по умолчанию — игнорировать представления Hive. Это означает, что бизнес-логика и данные, закодированные в представлениях, недоступны в Trino.

Legacy

Очень простую реализацию для выполнения представлений Hive и, следовательно, доступа на чтение к данным в Trino, можно включить с помощью hive.hive-views.enabled=true и hive.hive-views.legacy-translation=true.

Для временного использования legacy-поведения для конкретного каталога можно установить свойство сеанса каталога hive_views_legacy_translation в true.

Это legacy-поведение интерпретирует любой запрос HiveQL, определяющий представление, как если бы он был написан на SQL. Оно не выполняет трансляцию, а полагается на то, что HiveQL очень похож на SQL.

Это работает для очень простых представлений Hive, но может приводить к проблемам для более сложных запросов. Например, если функция HiveQL имеет идентичную сигнатуру, но другое поведение по сравнению с SQL-версией, возвращаемые результаты могут отличаться. В более крайних случаях запросы могут завершаться ошибкой или даже не разбираться и не выполняться.

Experimental

Новое поведение лучше спроектировано и потенциально может стать значительно мощнее legacy-реализации. Оно может анализировать, обрабатывать и переписывать представления Hive, а также содержащиеся в них выражения и операторы.

Оно поддерживает следующие возможности представлений Hive:

  • UNION [DISTINCT] and UNION ALL against Hive views

  • Nested GROUP BY clauses

  • current_user()

  • LATERAL VIEW OUTER EXPLODE

  • LATERAL VIEW [OUTER] EXPLODE для array of struct

  • LATERAL VIEW json_tuple

Экспериментальное поведение можно включить с помощью hive.hive-views.enabled=true. Удалите свойство hive.hive-views.legacy-translation или установите его в false, чтобы убедиться, что legacy-режим не включен.

Имейте в виду, что при экспериментировании с этой возможностью многие функции еще не реализованы. Ниже приведен неполный список отсутствующей функциональности:

  • HiveQL current_date, current_timestamp и другие

  • Вызовы функций Hive, включая translate(), оконные функции и другие

  • Common table expressions и простые case-выражения

  • Учет настройки точности timestamp

  • Поддержка всех типов данных Hive и корректное сопоставление с типами Trino

  • Возможность обрабатывать пользовательские UDF

Производительность#

Коннектор включает ряд улучшений производительности, подробно описанных в следующих разделах.

Статистика таблиц#

Коннектор Hive поддерживает сбор и управление статистикой таблиц для повышения производительности обработки запросов.

При записи данных коннектор Hive всегда собирает базовую статистику (numFiles, numRows, rawDataSize, totalSize) и по умолчанию также собирает статистику на уровне столбцов:

Доступная статистика таблиц#

Тип столбца

Собираемая статистика

TINYINT

Количество null, количество различных значений, min/max значения

SMALLINT

Количество null, количество различных значений, min/max значения

INTEGER

Количество null, количество различных значений, min/max значения

BIGINT

Количество null, количество различных значений, min/max значения

DOUBLE

Количество null, количество различных значений, min/max значения

REAL

Количество null, количество различных значений, min/max значения

DECIMAL

Количество null, количество различных значений, min/max значения

DATE

Количество null, количество различных значений, min/max значения

TIMESTAMP

Количество null, количество различных значений, min/max значения

VARCHAR

Количество null, количество различных значений

CHAR

Количество null, количество различных значений

VARBINARY

Количество null

BOOLEAN

Количество null, количество значений true/false

Обновление статистики таблиц и партиций#

Если ваши запросы сложны и включают соединение больших наборов данных, выполнение ANALYZE для таблиц/партиций может повысить производительность запросов за счет сбора статистической информации о данных.

При анализе партиционированной таблицы партиции для анализа можно указать с помощью необязательного свойства partitions, которое является массивом, содержащим значения ключей партиций в порядке их объявления в схеме таблицы:

ANALYZE table_name WITH (
    partitions = ARRAY[
        ARRAY['p1_value1', 'p1_value2'],
        ARRAY['p2_value1', 'p2_value2']])

Этот запрос соберет статистику для двух партиций с ключами p1_value1, p1_value2 и p2_value1, p2_value2.

Для широких таблиц сбор статистики по всем столбцам может быть дорогим и негативно влиять на планирование запросов. Обычно это также не требуется: статистика полезна только для конкретных столбцов, например ключей join, предикатов и ключей группировки. Подмножество столбцов для анализа можно указать с помощью необязательного свойства columns:

ANALYZE table_name WITH (
    partitions = ARRAY[ARRAY['p2_value1', 'p2_value2']],
    columns = ARRAY['col_1', 'col_2'])

Этот запрос собирает статистику для столбцов col_1 и col_2 для партиции с ключами p2_value1, p2_value2.

Обратите внимание, что если статистика ранее была собрана для всех столбцов, ее необходимо удалить перед повторным анализом только подмножества:

CALL system.drop_stats('schema_name', 'table_name')

Также можно удалить статистику только для выбранных партиций:

CALL system.drop_stats(
    schema_name => 'schema',
    table_name => 'table',
    partition_values => ARRAY[ARRAY['p2_value1', 'p2_value2']])

Динамическая фильтрация#

Коннектор Hive поддерживает оптимизацию динамической фильтрации. Dynamic partition pruning поддерживается для партиционированных таблиц, хранящихся в любом формате файлов, как для broadcast, так и для partitioned joins. Dynamic bucket pruning поддерживается для bucketed-таблиц, хранящихся в любом формате файлов, только для broadcast joins.

Для таблиц, хранящихся в формате ORC или Parquet, динамические фильтры также проталкиваются в локальное сканирование таблиц на worker-узлах для broadcast joins. Предикаты динамических фильтров, проталкиваемые в ORC и Parquet readers, используются для stripe или row-group pruning и экономии дискового I/O. Сортировка данных внутри файлов ORC или Parquet по столбцам, используемым в критериях join, значительно повышает эффективность stripe или row-group pruning. Это связано с тем, что группировка похожих данных в одном stripe или row-group значительно повышает селективность min/max индексов, поддерживаемых на уровне stripe или row-group.

Отложенное выполнение для динамических фильтров#

Часто полезно дождаться сбора динамических фильтров перед запуском сканирования таблицы. Это дополнительное ожидание потенциально может дать значительную общую экономию времени запроса и CPU, если динамическая фильтрация способна уменьшить объем сканируемых данных.

Для коннектора Hive сканирование таблицы можно отложить на настроенное время до сбора динамических фильтров с помощью свойства конфигурации hive.dynamic-filtering.wait-timeout в файле каталога или свойства сеанса каталога <hive-catalog>.dynamic_filtering_wait_timeout.

Перенаправление таблиц#

Trino позволяет прозрачно перенаправлять операции над существующей таблицей в подходящий каталог на основе формата таблицы и конфигурации каталога.

В контексте коннекторов, зависящих от службы metastore, например Коннектор Hive, Коннектор Iceberg и Коннектор Delta Lake, metastore (служба Hive metastore, AWS Glue Data Catalog) может использоваться для работы с таблицами разных форматов. Поэтому база данных metastore может содержать разные таблицы с разными форматами.

В качестве конкретного примера используем следующий простой сценарий, в котором задействовано перенаправление таблицы:

USE example.example_schema;

EXPLAIN SELECT * FROM example_table;
                               Query Plan
-------------------------------------------------------------------------
Fragment 0 [SOURCE]
     ...
     Output[columnNames = [...]]
     │   ...
     └─ TableScan[table = another_catalog:example_schema:example_table]
            ...

Вывод оператора EXPLAIN указывает фактический каталог, который обрабатывает запрос SELECT к таблице example_table.

Функциональность перенаправления таблиц также работает при использовании полностью квалифицированных имен таблиц:

EXPLAIN SELECT * FROM example.example_schema.example_table;
                               Query Plan
-------------------------------------------------------------------------
Fragment 0 [SOURCE]
     ...
     Output[columnNames = [...]]
     │   ...
     └─ TableScan[table = another_catalog:example_schema:example_table]
            ...

Trino поддерживает перенаправление таблиц для следующих операций:

Trino не поддерживает перенаправление представлений.

Коннектор поддерживает перенаправление из таблиц Hive в таблицы Iceberg, Delta Lake и Hudi с помощью следующих свойств конфигурации каталога:

  • hive.iceberg-catalog-name: имя каталога, настроенного с Коннектор Iceberg, используемого для чтения таблиц Iceberg.

  • hive.delta-lake-catalog-name: имя каталога, настроенного с Коннектор Delta Lake, используемого для чтения таблиц Delta Lake.

  • hive.hudi-catalog-name: имя каталога, настроенного с Hudi connector, используемого для чтения таблиц Hudi.

Кеш файловой системы#

Коннектор поддерживает настройку и использование кеширования файловой системы.

Свойства конфигурации настройки производительности#

В следующей таблице описаны свойства настройки производительности коннектора Hive.

Warning

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

Имя свойства

Описание

Значение по умолчанию

hive.max-outstanding-splits

Целевое количество буферизованных splits для каждого сканирования таблицы в запросе, после которого планировщик пытается сделать паузу.

1000

hive.max-outstanding-splits-size

Максимально допустимый размер буферизованных splits для каждого сканирования таблицы в запросе, после которого запрос завершается ошибкой.

256 MB

hive.max-splits-per-second

Максимальное количество splits, генерируемых в секунду на одно сканирование таблицы. Это можно использовать для снижения нагрузки на систему хранения. По умолчанию ограничения нет, что приводит к максимальной параллелизации доступа к данным в Trino.

hive.max-initial-splits

Для каждого сканирования таблицы координатор сначала назначает участки файлов размером до max-initial-split-size. После назначения max-initial-splits для оставшихся splits используется max-split-size.

200

hive.max-initial-split-size

Размер одного участка файла, назначаемого worker до назначения max-initial-splits. Меньшие splits дают больше параллелизма, что ускоряет меньшие запросы.

32 MB

hive.max-split-size

Наибольший размер одного участка файла, назначаемого worker. Меньшие splits дают больше параллелизма и тем самым могут уменьшить задержку, но также имеют больше накладных расходов и увеличивают нагрузку на систему.

64 MB

Ограничения, связанные с Hive 3#

  • По соображениям безопасности системный каталог sys недоступен.

  • Тип данных Hive timestamp with local zone сопоставляется с timestamp with time zone с часовым поясом UTC. Поддерживается только чтение значений; запись в таблицы со столбцами этого типа не поддерживается.

  • Из-за проблем Hive HIVE-21002 и HIVE-22167 Trino некорректно читает значения TIMESTAMP из форматов файлов Parquet, RCBinary или Avro, созданных Hive 3.1 или более поздней версии. При чтении из этих форматов файлов Trino возвращает результаты, отличающиеся от Hive.

  • Trino не поддерживает сбор статистики таблиц для транзакционных таблиц Hive. После создания таблицы необходимо использовать Hive для сбора статистики таблицы с помощью оператора ANALYZE.