Файловая структура выгрузки
Описанная ниже файловая структура применяется для выгрузки как в файловую систему, так и в S3-совместимое объектное хранилище. При работе с S3 в ключ объекта записывается путь к файлу, а директория выгрузки является префиксом ключа.
Директории
Каждой директории в базе данных соответствует директория в файловой структуре. В каждой из них находится файл permissions.pb
, содержащий информацию об ACL директории и её владельце в формате text protobuf. Иерархия директорий в файловой структуре соответствует иерархии директорий в базе данных. Если в какой-либо директории базы данных отсутствуют объекты (таблицы или поддиректории), то в файловой структуре такая директория содержит файл нулевого размера с именем empty_dir
.
Таблицы
Каждой таблице в базе данных также соответствует одноименная директория в иерархии директорий файловой структуры, в которой находятся:
- Файл
scheme.pb
, содержащий информацию о структуре таблицы и её параметрах в формате text protobuf - Файл
permissions.pb
, содержащий информацию об ACL таблицы и её владельце в формате text protobuf - Один или несколько файлов
data_XX.csv
, содержащих данные таблицы в форматеcsv
, гдеXX
- порядковый номер файла. Выгрузка начинается с файлаdata_00.csv
, каждый следующий файл создается при превышении размера текущего файла в 100MB. - Директории для описания потоков изменений. Имя директории соответствует названию потока изменений. В директории находятся:
- Файл
changefeed_description.pb
, содержащий информацию о потоке изменений в формате text protobuf. - Файл
topic_description.pb
, содержащий информацию о нижележащем топике в формате text protobuf.
- Файл
Файлы с данными
Формат файлов с данными - .csv
, одна строка соответствует одной записи в таблице, без строки с заголовками колонок. Для строк применяется представление в urlencoded формате. Например, строка файла для таблицы с колонками uint64 и utf8, содержащая число 1 и строку "Привет" соответственно, выглядит таким образом:
1,"%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82"
Примеры
Таблицы
При выгрузке таблиц, созданных в разделе Быстрый старт с YDB Начала работы, будет создана следующая файловая структура:
├── episodes
│ ├── data_00.csv
│ ├── permissions.pb
│ └── scheme.pb
├── seasons
│ ├── data_00.csv
│ ├── permissions.pb
│ └── scheme.pb
└── series
├── data_00.csv
├── permissions.pb
└── scheme.pb
└── updates_feed
└── changefeed_description.pb
└── topic_description.pb
Содержимое файла series/scheme.pb
:
columns {
name: "series_id"
type {
optional_type {
item {
type_id: UINT64
}
}
}
}
columns {
name: "title"
type {
optional_type {
item {
type_id: UTF8
}
}
}
}
columns {
name: "series_info"
type {
optional_type {
item {
type_id: UTF8
}
}
}
}
columns {
name: "release_date"
type {
optional_type {
item {
type_id: UINT64
}
}
}
}
primary_key: "series_id"
storage_settings {
store_external_blobs: DISABLED
}
column_families {
name: "default"
compression: COMPRESSION_NONE
}
Содержимое файла series/update_feed/changefeed_description.pb
:
name: "update_feed"
mode: MODE_UPDATES
format: FORMAT_JSON
state: STATE_ENABLED
Содержимое файла series/update_feed/topic_description.pb
:
self {
name: "update_feed"
owner: "Alice"
type: TOPIC
created_at {
plan_step: 1734362034420
tx_id: 281474982949619
}
}
consumers {
name: "my_consumer"
read_from {
}
attributes {
key: "_service_type"
value: "data-streams"
}
}
Директории
При выгрузке пустой директории directory
будет создана следующая структура файлов:
└── directory
├── permissions.pb
└── empty_dir
При выгрузке директории directory
с вложенной таблицей table
будет создана следующая структура файлов:
└── directory
├── permissions.pb
└── table
├── data_00.csv
├── permissions.pb
└── scheme.pb