Databricks — как получить текущую версию файлов паркета дельта-таблицы

Скажем, у меня есть таблица с именем data, и это временные ряды. Он хранится так:

/data
   /date=2022-11-30
      /region=usa
         part-000001.parquet
         part-000002.parquet

Где у меня есть два ключа раздела и два раздела для файлов паркета. Я могу легко перечислить файлы для ключей разделов с помощью:

dbfs.fs.ls('/data/date=2022-11-30/region=usa')

Но если я сейчас обновлю таблицу, она перегенерирует файлы паркета, и теперь у меня есть 4 files в этом каталоге.

Как я могу получить latest version файлов паркета? Мне действительно нужно перебирать все файлы состояния _delta_log и перестраивать состояние? Или мне нужно запустить VACCUM, чтобы очистить старые версии, чтобы я мог получить самые последние файлы?

Должна быть магическая функция.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Delta Lake сама отслеживает всю эту информацию в своем журнале транзакций. Когда вы запрашиваете дельта-таблицу с помощью механизма или API, который поддерживает Delta Lake, под прикрытием он читает этот журнал транзакций, чтобы определить, какие файлы составляют эту версию таблицы.

Например, скажем, четыре файла:

/data
   /date=2022-11-30
      /region=usa
         part-000001.parquet
         part-000002.parquet
         part-000003.parquet
         part-000004.parquet

Сам журнал дельта-транзакций содержит путь к файлам для каждой версии таблицы, например:

# VO | first version of the table
/data
   /date=2022-11-30
      /region=usa
         part-000001.parquet
         part-000002.parquet

# V1 | second version of the table
/data
   /date=2022-11-30
      /region=usa
         part-000003.parquet
         part-000004.parquet

Вы можете использовать Delta Standalone , если хотите использовать Scala/JVM для получения списка файлов и/или Delta Rust, чтобы использовать привязки Delta Rust и/или Python.

Если вы хотите сделать это в Spark SQL и/или углубиться в детали, ознакомьтесь с Погружение в Delta Lake: распаковка журнала транзакций , которое включает видео, блог и блокнот по этой теме. Также есть продолжение видео под названием Под отложениями v2.

Дэнни, ты даже дал мне выбор языка? Чувак. Эпический. Спасибо. Я возьму Раст.

VocoJax 01.12.2022 21:34

Круто - обязательно пингуйте нас и на канале Delta Rust, если хотите поболтать/задать вопросы, а?! go.delta.io/slack - ТТФН!

Denny Lee 07.12.2022 07:00

Другие вопросы по теме