- Refactor metadata handling into
datapipe.meta
submodule - Add
Required
qualifier forinputs
Major changes:
- Enable Python 3.12 support
DatatableTansform
can becomeBatchTransform
with empty indices- SQLAlchemy tables can be used directly without duplication in Catalog
datapipe.compute.Table
can be used directly without Catalog
See "Migration from v0.13 to v0.14" for more details
- Fix #334
- Add
ComputeStep.get_status
method - Remove restriction for Pandas < 2.2
- Add processing of an empty response in
QdrantStore
- Add optional
index_schema
toQdrantStore
- Add redis cluster mode support in
RedisStore
- Remove logging to database (
datapipe_events
table) fromEventLogger
- Fix compatibility with SQLalchemy < 2 (ColumnClause in typing)
- Fix compatibility with Ray and SQLalchemy > 2 (serialization of Table)
- (post.1) Fix dependencies for MacOS; deprecate Python 3.8
- Adapter
PILFile
now accepts np.ndarray image TableStoreFiledir
now supportsinsert_rows
anddelete_rows
in case multiply suffixes in template
- Fix #301
- Add
BytesFile
adapter forTableStoreFiledir
- Add
delete_stale
argument toBatchGenerate
- Fix duplicated indices in
BaseBatchTransformStep.get_full_process_ids
- Fix empty result in
BaseBatchTransformStep.get_full_process_ids
in special case - Fix pandas warning #286
- Fix SQLAlchemy 2.0 warnings
- Enable SQLAlchemy 2.0
- Optimize join in batch transform when there's an input without intersecting keys with transform
- Add support for base64 encoded images in
TableStoreFiledir
PILFile
adapter
- Add create_engine_kwargs for
DBConn
- Fix desc/asc order in batch transform when ordering by multiple columns
- Add logging of log_step_full for
DatatableTransformStep
- Fix
TableStoreFiledir
usage ofauto_mkdir
(enable only for "file://")
- Fix
TableStoreFiledir
ignoringfsspec_kwargs
- Added dropna and idx check for
TransformMetaTable
- Allow
pandas >= 2
andnumpy >= 1.21
- Add
GPU
support for RayExecutor - Add
auto_mkdir
toTableStoreFiledir
, fixes issues with local filedir - Add Python 3.11 support.
- Add
api_key
toQdrantStore
constructor. Now can run pipelines with Qdrant authentication - Fix
TableStoreDB.update_rows
method crashing when trying to store pandas none-types
- Add
datapipe.metastore.TransformMetaTable
. Now each transform gets it's own meta table that tracks status of each transformation - Generalize
BatchTransform
andDatatableBatchTransform
throughBaseBatchTransformStep
- Add
transform_keys
to*BatchTransform
- Move changed idx computation out of
DataStore
toBaseBatchTransformStep
- Add column
priority
to transform meta table, sort work by priority - Switch from vanilla
tqdm
totqdm_loggable
for better display in logs TableStoreFiledir
constructor accepts new argumentfsspec_kwargs
- Add
filters
,order_by
,order
arguments to*BatchTransformStep
- Add magic injection of
ds
,idx
,run_config
to transform function via parameters introspection toBatchTransform
- Add magic
ds
inject intoBatchGenerate
- Split
core_steps
intostep.batch_transform
,step.batch_generate
,step.datatable_transform
,step.update_external_table
- Move
metatable.MetaTable
todatatable
- Enable WAL mode for sqlite database by default
- Add
step reset-metadata
CLI command - Add
step fill-metadata
CLI command that populates transform meta-table with all indices to process - Add
step run-idx
CLI command - CLI
step run_changelist
command accepts new argument--chunk-size
- New CLI command
table migrate_transform_tables
for0.13
migration - Add
--start-step
parameter tostep run-changelist
CLI - Move
--executor
parameter fromdatapipe step
todatapipe
command
- Executors:
datapipe.executor.SingleThreadExecutor
,datapipe.executor.ray.RayExecutor
- Fix
QdrantStore.read_rows
when no idx is specified - Fix
RedisStore
serialization for Ray
- Fix
RedisStore
serialization for Ray
- Enable WAL mode for sqlite database by default
- Refactor all database writes to
insert on conflict update
- Remove check for non-overlapping input indices because they are supported now
- Add
transform_keys
toDatatableBatchTransform
- Fix
BatchTransformStep.get_full_process_ids
ids duplication - Add
MetaTable.get_changed_rows_count_after_timestamp
- Split
core_steps
intostep.batch_transform
,step.batch_generate
,step.datatable_transform
,step.update_external_table
- Move
metatable.MetaTable
todatatable
- Fix SingleThreadExecutor initialization
- Fix CLI
table migrate-transform-tables
for complex case - Add magic
ds
inject intoBatchGenerate
-
Try to setup logging in RayExecutor (fails so far)
-
Lazy initialisation of Ray to speedup things in CLI
-
Add
ExecutorConfig.parallelism
parameter -
Add
name
parameter toexecutor.run_process_batch
to customize task name in ray dashboard -
Migrate
run_changelist
to executor, possible parallelisation -
Limit number of in-flight Ray tasks in one
run_process_batch
to 100 -
Fix batch count in tqdm in
run_changelist
-
Add
--start-step
parameter tostep run-changelist
CLI -
Move
--executor
parameter fromdatapipe step
todatapipe
command
- Move batch functions to
BaseBatchTransformStep
- fix index_difference index assert
- Allow passing empty dfs when idx is passed to func
TableStoreFiledir
constructor accepts new argumentfsspec_kwargs
- Add
filters
,order_by
,order
arguments to*BatchTransformStep
- Add magic injection of
ds
,idx
,run_config
to transform function via parameters introspection - CLI
step run_changelist
command accepts new argument--chunk-size
- New CLI command
table migrate_transform_tables
for0.13
migration
- Switch from vanilla
tqdm
totqdm_loggable
for better display in logs
- Move cli from
datapipe-app
todatapipe
- Remove separate
datapipe step status
command, now it's a flag:datapipe step list --status
DatatableTransform
moved fromdatapipe.compute
todatapipe.core_steps
- Remove
datapipe.metastore.MetaTableData
(nobody used it anyway)
- Add command
step run_changelist
to CLI - Add
datapipe.store.qdrant.QdrantStore
- Add
labels
arg and property toComputeStep
base class - Add
labels
arg toBatchTransform
andBatchTransformStep
- Add
labels
arg toBatchGenerate
andDatatableTransformStep
- Add
labels
arg toUpdateExternalTable
andDatatableTransformStep
- Large refactoring,
ComputeStep
now contains pieces of overridable functions forrun_full
andrun_changelist
- Add prototype events logging for steps, add
event_logger.log_step_full_complete
, add tabledatapipe_step_events
- Add formatting through
traceback_with_variables
inevent_logger
- Add exception traceback to debug log output
- Install sqlite from
pysqlite3-binary
package; Addsqlite
extra; Update examples; Adddocs/sqlite.md
document - Update type annotations for
mypy >= 0.991
- Fix
RedisStore
andTableDataSingleFileStore
.read_rows
in case when nonexistent rows are requested, align behavior withTableStoreDB
- Add test for nonexistent rows read
- New method
DataTable.reset_metadata()
- Add
idx
logging on errors - Add specialized implementation for
DataStoreFiledir
when file contents are not needed - Add trace span for getting ids to process
- Add protocol in
TableStoreFiledir._read_rows_fast
try/except
forDatatableTransformStep
- Add check for indexes uniqueness in
DataTable.store_chunk
- Fix metadata columns in case of empty
get_metadata
- Fix
DataTable.get_data
for large batches - Refactored implementation for chunked storage in
MetaTable
andTableStoreDB
- Switched default Python version to 3.9
- Fix
DataTable.get_data
indices in returned DataFrame
- Fix
RedisStore.read_rows
- Force initialization of all tables in catalog in
build_compute
- Do not throw
NotImplementedError
inrun_changelist
- Fix some more Pandas warnings in
metastore
- New table store:
RedisStore
- Fix #178
- Added
DataTable.get_size()
method
DatatableTransform
,DatatableTransformStep
,BatchGenerate
,BatchGenerateStep
,BatchTransform
,BatchTransformStep
now accepts keyworded arguments**kwargs
to parametrize arguments of corresponding functionfunc
(#150)
- Column
filepath
is now written to meta-pseudo-df ofTableStoreFiledir
whenadd_filepath_column
is enabled (#149) - Fix
TableStoreFiledir
issues with regular expressions: #146 and #147 (#149) - Added new arguments
readonly
anddisable_rm
inTableStoreFiledir
. By defaultTableStoreFiledir
is running as reader and writer, but ifenable_rm=True
then it also removes files. Whenreadonly=None
(defualt), it checks for patterns*
to disable/enable writing files, but if it needed to force enable or disable writing,readonly
should be changed accordingly. - Addeed OR patterns support in format
(aaa|bbb|ccc)
inTableStoreFiledir
. For example:/path/to/(folder1|folder2|folder3)/to/the/files.(jpg|png|jpeg)
. - Fix:
read_rows()
should returnDataFrame
with primary key columns even if empty
Backwards incompatible changes
- Move
datapipe.cli
anddatapipe.debug_ui
todatapipe_app
- Remove obsolete dependencies:
requests
andtoml
- Changed default of
create_table
parameters toFalse
; now by default no tables will be created. Needed for Alembic migrations autogeneration
- Make
gcsfs
ands3fs
dependencies optional - Remove
poetry.lock
from project
- Split
run_changelist
intorun_changelist
andrun_steps_changelist
- Add
create_meta_table
flag inDataStore
- controls automatic creation of meta tables. - Fix optionality for opentelemetry packages
- Relax dependencies for
fsspec
- New table store:
MilvusStore
- fix: Fixed pipeline run with changlist by chunk_size
Несовместимые изменения
- Вернулся класс
ComputeStep
как основа вычислительного пайплайна - Введено понятие
full
иchangelist
обработки batch_transform_wrapper
переименован вdo_full_batch_transform
- Появился метод
do_batch_transform
который принимает итератор индексов и делает итерационную обработку batch_generate_wrapper
переименован вdo_batch_generate
- Исключения в
do_batch_generate
больше не скрываются - По всему коду параметр
batchsize
переименован вbatch_size
для консистентности сinput_dts
,change_list
и тп DataStore.get_process_ids
переименован вget_full_process_ids
- Добавлен метод
get_change_list_process_ids
- Fix SettingWithCopyWarning in
MetaTable
- Add
MetaKey()
support forMetaTable
columns. Now it's possible to add non-primary keys into MetaTable for joins. See example:examples/meta_key_pipeline.py
- Add
read_data
parameter toTableStoreFiledir
(#132) - Fix fields order for compound indexes in
get_process_idx
(#136) - Add
check_for_changes
parameter toDatatableTransform
step (#131) - Update
Pillow
to version9.0.0
- Move LabelStudio support to separate repo
- Move LevelDB TableStore to separate repo
- Remove
UPDATE FROM VALUES
support for SQLite - Add methods
Catalog.add_datatable
,Catalog.remove_datatable
,DataStore.get_datatable
- Add methods
index_intersection
,index_to_data
- Disable SQLAlchemy compiled cache for
UPDATE FROM VALUES
query - Backport from 0.11.0-alpha.1: Фикс для join-а таблиц без пересекающихся индексов
- Fix
DBConn.supports_update_from
serialization
- Ускорение обновления метаданных через UPDATE FROM
- Добавлено инструментирование для трейсинга выполнения пайплайнов в Jaeger
- Исправлен баг с падением проверки типов в
DatatableTransformStep
при несколькох входных и выходных таблицах
- Поддержка явного задания
primary_schema
дляTableStoreFiledir
- Первичная проверка корректности схем данных в
DatatableTransformStep
- Не считать отсутствие строки в одной из входных таблиц необходимым условием для повторной обработки
- Добавлен
LevelDBStore
- Трансформация может работать без пересекающихся ключей (любая строка слева сравнивается со строкой справа)
ComputeStep
объединен сDatatableTransformStep
Несовместимые изменения
- Удален класс
ExternalTable
, теперь это явный шаг пайплайнаUpdateExternalTable
- Удален модуль
dsl
, классы переехали вcompute
иcore_steps
- Удален модуль
step
, классы переехали вrun_config
иcompute
- Исправлена проблема обновления
ExternalTable
с фильтрацией черезRunConfig
- Фикс сохранения пустого DF
- Исправить удаление строк в
DataTable.store_chunk
при пустом входном DF
- Логгировать количество обработанных записей в
event_logger
- Фикс получения данных из входной таблицы с фильтрацией
- Фикс для
read_rows
вTableStore
, для случая когда передаеться пустойIndexDF
- Фикс для случая когда одна и та же таблица является и входом и выходом в трансформацию
- Ускорение работы
TableStoreDB
- Фикс фильтрации
get_process_ids
изRunConfig
- Логгирование меты из
run_config
вdatapipe_events
.
- Метадата использует
JSONB
поле в случае Postgres соединения - Багфикс: assert путей, содержащие протоколы, и
w{mode}+
->w{mode}
- Фикс бага с добавлением и обновление пустых табличек
- Учет
RunConfig.filters
при обновленииExternalTable
сTableStoreDB
- Новый класс
RunConfig
который можно передать вrun_pipeline
. Предоставляет возможность фильтрации данных по конкретному значению одного или нескольких индексов.
- Фикс для кейса повторного добавления строк в
TableStoreDB
- Фикс работы с SQLite для чанков больше 1000 (#63)
- Новый CLI параметр
--debug-sql
- Стриминг реализация чтения данных из БД в
ExternalTable
сценарии
- теперь нужно создавать отдельный
DBConn
для данных и метаданных из-за стримингового чтения
- Исправлена запись пустого
DataDF
вDataTable
- Исправлено несоответствие типов для поля
hash
в sqlite
- Поле
hash
метадаты теперь имеет типint32
и считается с помощью модуляcityhash
- update SQLAlchemy to 1.4 version
- FileDir DataStore поддерживает множественную идентификацию.
- Индексация данных теперь множественная
- Класса
MetaStore
больше нет, его роль выполняетDataStore
DataTable.store_chunk
теперь принимаетprocessed_idx
, отдельного методаsync_meta_for_store_chunk
больше нет
inc_process_many
работает полностью инкрементально
- Функция
MetaStore.get_process_chunks
перестала быть методомMetaStore
и переехала в модульdatatable
- Добавлена обработка ошибок в gen_process: исключение ловится, логгируется и выполнение переходит к следующим шагам
- Добавлена обработка ошибок в inc_process: исключение ловится, чанк с ошибкой игнорируется и выполнение продолжается
- Таблица datapipe_events изменила структуру (требует пересоздания)
- агрумент ф-ии в gen_process всегда должен быть генератором
- Добавлен аттрибут
const_idx
вTableStoreDB
, позволяет хранить данные разных шагов/пайплайнов в одной физической таблице с помощью доп.идентификаторов - Добавлен класс
metastore.MetaTable
, который собирает в себе все задачи по работе с метаданными одной таблицы.
Важно: Поменялся интерфейс создания DataTable
.
Было: DataTable(meta_store, name, data_store)
Стало: DataTable(name, meta_store.create_meta_table(name), data_store)
- Добавился прототип debug ui. Запускается с помощью команды
python script.py ui
Значимый рефакторинг
- Корневой модуль переименован
c12n_pipe
→datapipe
- Реализован новый модуль
datapipe.dsl
для декларативного описания пайплайнов. Пример использования:examples/goal_v0.4.0.py
- Описание пайплайна отделено от способа выполнения → есть возможность написать конвертер в другой рантайм, например Prefect
- Переписана логика работы
MetaStore
, теперь всеми мета-таблицамиMetaStore
владеет в явном виде, а потребители информации обращаются к ним по имени - Реализовано хранение данных таблиц в отделяемых хранилищах (хранение в БД - один
из способов)
database.TableStoreDB
- хранение данных в таблице БДfiledir.TableStoreFiledir
- хранение данных в виде папки с файлами (плюс описаны адаптеры для разных типов файлов)pandas.TableStoreJsonLine
- хранение данных в виде одного jsonline файла
- Add major code with Label Studio implementation
- Add Data cataloges and Nodes