Documentation
¶
Overview ¶
Package etl provides functionality for the TDTP framework.
Index ¶
- func ApplyVariables(config *PipelineConfig, vars map[string]string) (warnings []string, err error)
- func ParsePipelineVars(args []string) (vars map[string]string, other []string)
- func UsedVariables(config *PipelineConfig, vars map[string]string) map[string]string
- type AuditConfig
- type CSVSourceConfig
- type ErrorHandlingConfig
- type ExecutionResult
- type Executor
- type ExportResult
- type Exporter
- func (e *Exporter) Export(ctx context.Context, dataPacket *packet.DataPacket) (*ExportResult, error)
- func (e *Exporter) ExportStream(ctx context.Context, streamResult *StreamingResult, tableName string) (*StreamingExportResult, error)
- func (e *Exporter) SetFast(fast bool)
- func (e *Exporter) ValidateConfig() error
- func (e *Exporter) WithMercuryBinder(binder processors.MercuryBinder) *Exporter
- func (e *Exporter) WithPipelineContext(ctx *packet.PipelineContext) *Exporter
- func (e *Exporter) WithPreExportChain(chain *processors.Chain) *Exporter
- func (e *Exporter) WithSecurity(sec SecurityConfig, packageUUID, pipelineName string) *Exporter
- type ImportResult
- type ImportStats
- type ImporterConfig
- type KafkaInputConfig
- type KafkaOutputConfig
- type KafkaSpoolExporter
- type Loader
- type OutputConfig
- type OutputResilienceConfig
- type ParallelImporter
- type PerformanceConfig
- type PipelineConfig
- type Processor
- func (p *Processor) Execute(ctx context.Context) error
- func (p *Processor) GetConfig() *PipelineConfig
- func (p *Processor) GetPackageUUID() string
- func (p *Processor) GetStats() ProcessorStats
- func (p *Processor) SetPipelineContext(ctx *packet.PipelineContext) *Processor
- func (p *Processor) Validate() error
- func (p *Processor) WithMercuryBinder(binder processors.MercuryBinder) *Processor
- type ProcessorStats
- type RabbitMQInputConfig
- type RabbitMQOutputConfig
- type ResultLogConfig
- type SanitizeFieldsConfig
- type SecurityConfig
- type SourceConfig
- type SourceData
- type StreamingExportResult
- type StreamingResult
- type TDTPOutputConfig
- type TransformConfig
- type Workspace
- func (w *Workspace) Close(ctx context.Context) error
- func (w *Workspace) CreateTable(ctx context.Context, tableName string, fields []packet.Field) error
- func (w *Workspace) ExecuteSQL(ctx context.Context, sqlQuery, resultTableName string) (*packet.DataPacket, error)
- func (w *Workspace) ExecuteSQLStream(ctx context.Context, sqlQuery, resultTableName string) (*StreamingResult, error)
- func (w *Workspace) LoadData(ctx context.Context, tableName string, dataPacket *packet.DataPacket) error
- type WorkspaceConfig
- type XLSXOutputConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ApplyVariables ¶
func ApplyVariables(config *PipelineConfig, vars map[string]string) (warnings []string, err error)
ApplyVariables substitutes CLI pipeline variables into a PipelineConfig in-place.
Substitution rules:
- SQL queries: '@name' → 'escaped_value' (single-quotes in value are doubled)
- SQL queries: @name → value (bare / numeric context)
- YAML fields: {{name}} → value (description, destination paths, DSN)
Validation:
- Variable declared in config but absent from vars → error (pipeline cannot run).
- Variable present in vars but unused in config → warning (returned in warnings slice).
func ParsePipelineVars ¶
ParsePipelineVars extracts @name=value arguments from a slice of strings. Surrounding double-quotes on the value are stripped automatically. Returns the variable map and any args that did not match the @name=value pattern.
func UsedVariables ¶
func UsedVariables(config *PipelineConfig, vars map[string]string) map[string]string
UsedVariables returns only the variables from vars that are actually referenced in config (via @name in SQL or {{name}} in YAML fields). Unused vars are excluded. Call after ApplyVariables so config is already substituted; declared set is stable.
Types ¶
type AuditConfig ¶
type AuditConfig struct {
Enabled bool `yaml:"enabled"` // Включить аудит
Level string `yaml:"level"` // Уровень: minimal, standard, detailed
Output string `yaml:"output"` // Путь к файлу лога
Format string `yaml:"format"` // Формат: json, text
}
AuditConfig определяет параметры аудита
type CSVSourceConfig ¶
type CSVSourceConfig struct {
Columns []string `yaml:"columns"`
Delimiter string `yaml:"delimiter"` // One character; default comma
Encoding string `yaml:"encoding"` // utf-8 (default) or windows-1251
Header *bool `yaml:"header"` // Default true
}
CSVSourceConfig describes the physical CSV layout. Columns remain TEXT in the workspace so invalid values can be reported by SQL without being lost.
type ErrorHandlingConfig ¶
type ErrorHandlingConfig struct {
OnSourceError string `yaml:"on_source_error"` // skip, fail, retry
RetryAttempts int `yaml:"retry_attempts"` // Количество повторов
RetryDelaySeconds int `yaml:"retry_delay_seconds"` // Задержка между повторами
OnTransformError string `yaml:"on_transform_error"` // skip, fail
OnOutputError string `yaml:"on_output_error"` // fail, retry
}
ErrorHandlingConfig определяет стратегии обработки ошибок
func (*ErrorHandlingConfig) Validate ¶
func (e *ErrorHandlingConfig) Validate() error
Validate проверяет корректность ErrorHandlingConfig
type ExecutionResult ¶
type ExecutionResult struct {
SQL string
RowsAffected int
Duration time.Duration
Packet *packet.DataPacket
Error error
}
ExecutionResult представляет результат выполнения SQL трансформации
type Executor ¶
type Executor struct {
// contains filtered or unexported fields
}
Executor отвечает за выполнение SQL трансформаций в workspace
func NewExecutor ¶
NewExecutor создает новый исполнитель SQL
func (*Executor) Execute ¶
func (e *Executor) Execute(ctx context.Context, sql, resultTableName string) (*ExecutionResult, error)
Execute выполняет SQL трансформацию и возвращает результат
func (*Executor) GetWorkspace ¶
GetWorkspace возвращает workspace (для тестирования)
type ExportResult ¶
ExportResult представляет результат экспорта
type Exporter ¶
type Exporter struct {
// contains filtered or unexported fields
}
Exporter отвечает за экспорт результатов ETL
func NewExporter ¶
func NewExporter(config OutputConfig) *Exporter
NewExporter создает новый экспортер
func (*Exporter) Export ¶
func (e *Exporter) Export(ctx context.Context, dataPacket *packet.DataPacket) (*ExportResult, error)
Export экспортирует DataPacket в сконфигурированный выход. Если настроен fallback-канал, при любой ошибке primary автоматически переключается на резервный канал (Smart Failover через circuit breaker).
func (*Exporter) ExportStream ¶
func (e *Exporter) ExportStream(ctx context.Context, streamResult *StreamingResult, tableName string) (*StreamingExportResult, error)
ExportStream выполняет потоковый экспорт данных в RabbitMQ/Kafka Используется для больших объемов данных - части генерируются и отправляются по мере чтения из БД Не требует загрузки всех данных в память
func (*Exporter) SetFast ¶
SetFast propagates the performance.fast flag so packet generation skips SpecialValues detection (DetectAndApply). Per-output TDTP.Fast takes precedence; this is the global fallback from PipelineConfig.Performance.Fast.
func (*Exporter) ValidateConfig ¶
ValidateConfig проверяет конфигурацию экспортера
func (*Exporter) WithMercuryBinder ¶
func (e *Exporter) WithMercuryBinder(binder processors.MercuryBinder) *Exporter
WithMercuryBinder устанавливает замену Mercury-клиента (dev-режим, тесты). Если не вызван — exportEncrypted создаёт mercury.NewClient() из SecurityConfig.
func (*Exporter) WithPipelineContext ¶
func (e *Exporter) WithPipelineContext(ctx *packet.PipelineContext) *Exporter
WithPipelineContext встраивает метаданные pipeline в каждую часть TDTP-пакета (v1.4).
func (*Exporter) WithPreExportChain ¶
func (e *Exporter) WithPreExportChain(chain *processors.Chain) *Exporter
WithPreExportChain устанавливает цепочку процессоров, которая применяется к данным перед каждым экспортом (маскирование, нормализация, валидация).
func (*Exporter) WithSecurity ¶
func (e *Exporter) WithSecurity(sec SecurityConfig, packageUUID, pipelineName string) *Exporter
WithSecurity добавляет конфигурацию шифрования. Вызывается из processor.go когда output.tdtp.encryption: true.
type ImportResult ¶
type ImportResult struct {
PartNumber int
TotalParts int // Из Header.TotalParts
RowsCount int
Error error
Duration time.Duration
}
ImportResult представляет результат импорта одной части
type ImportStats ¶
type ImportStats struct {
TotalParts int
PartsImported int
TotalRows int
Errors []error
StartTime time.Time
EndTime time.Time
Duration time.Duration
AvgPartDuration time.Duration
}
ImportStats содержит статистику импорта
func ImportToDatabase ¶
func ImportToDatabase( ctx context.Context, importer *ParallelImporter, workspace *Workspace, tableName string, ) (*ImportStats, error)
ImportToDatabase импортирует данные из брокера в базу данных Автоматически создает таблицу если её нет и загружает данные
type ImporterConfig ¶
type ImporterConfig struct {
Type string // "RabbitMQ" или "Kafka"
RabbitMQ *RabbitMQInputConfig
Kafka *KafkaInputConfig
Workers int // Количество параллельных воркеров для обработки частей
}
ImporterConfig содержит конфигурацию импортера
type KafkaInputConfig ¶
KafkaInputConfig конфигурация для чтения из Kafka
type KafkaOutputConfig ¶
type KafkaOutputConfig struct {
Brokers []string `yaml:"brokers"` // Список Kafka brokers
Topic string `yaml:"topic"` // Kafka topic
// Streaming spool — для надёжной отправки больших таблиц.
// Каждый пакет сжимается и пишется на диск; отдельная горутина
// читает файлы и шлёт пачками. Гарантирует < 1MB на сообщение.
SpoolDir string `yaml:"spool_dir"` // "" = os.TempDir()/tdtp-kafka-spool; явный путь — постоянный spool
PacketKB int `yaml:"packet_kb"` // целевой размер пакета несжатого XML, КБ (default 750)
BatchSend int `yaml:"batch_send"` // кол-во пакетов в одном WriteMessages (default 10)
CompressAlgo string `yaml:"compress_algo"` // zstd (default) или none
CompressLevel int `yaml:"compress_level"` // уровень сжатия zstd (default 3)
// MemLimitMB > 0 включает быстрый in-memory путь вместо disk-spool.
// Writer блокируется когда суммарный объём сжатых данных в канале
// превышает лимит. Нет записи на диск — нет resumability при падении.
MemLimitMB int `yaml:"mem_limit_mb"` // 0 = disk spool; > 0 = in-memory с backpressure
}
KafkaOutputConfig определяет параметры отправки в Kafka
type KafkaSpoolExporter ¶
type KafkaSpoolExporter struct {
// contains filtered or unexported fields
}
KafkaSpoolExporter реализует pipeline:
Writer: DataPacket → XML → zstd → файл в spoolDir/ Sender: файл из spoolDir/ → kafka.Writer.WriteMessages → delete
Два работника запускаются параллельно и связаны каналом путей файлов. Размер каждого сообщения ≤ defaultPacketKB после сжатия — работает с любым Kafka-брокером без изменения конфигурации брокера.
Отправка идёт через общий brokers.Kafka. Свой kafka.Writer здесь был заведён ради write-only соединения без Reader, чей Close() блокировал на секунды; в brokers.Kafka это позже решили ленивым созданием Reader, и копия стала лишней. Пока она жила, конфигурация writer'а существовала в двух экземплярах, и всё, что добавлялось в один — включая проверку message.max.bytes, — не действовало на другой.
func NewKafkaSpoolExporter ¶
func NewKafkaSpoolExporter(cfg *KafkaOutputConfig, jobID string) (*KafkaSpoolExporter, error)
NewKafkaSpoolExporter создаёт экспортер, применяя дефолты. spoolDir создаётся автоматически; при permanent=false он удаляется после экспорта.
func (*KafkaSpoolExporter) Cleanup ¶
func (ke *KafkaSpoolExporter) Cleanup() error
Cleanup удаляет spool-директорию (вызывать после успешного экспорта).
func (*KafkaSpoolExporter) Close ¶
func (ke *KafkaSpoolExporter) Close()
Close освобождает ресурсы энкодера и Kafka-соединение.
func (*KafkaSpoolExporter) ExportPackets ¶
func (ke *KafkaSpoolExporter) ExportPackets(ctx context.Context, packets []*packet.DataPacket) error
ExportPackets принимает слайс пакетов и отправляет их в Kafka через spool.
Pipeline:
Writer goroutine: packet[i] → XML → zstd → spool/000001.tdtp.zst → fileCh Sender goroutine: fileCh → batch N файлов → WriteMessages → delete
func (*KafkaSpoolExporter) SpoolDir ¶
func (ke *KafkaSpoolExporter) SpoolDir() string
SpoolDir возвращает путь к рабочей директории (для логов / ручного retry).
type Loader ¶
type Loader struct {
// contains filtered or unexported fields
}
Loader отвечает за загрузку данных из источников
func NewLoader ¶
func NewLoader(sources []SourceConfig, errorHandling ErrorHandlingConfig) *Loader
NewLoader создает новый загрузчик данных
func (*Loader) GetSourceCount ¶
GetSourceCount возвращает количество сконфигурированных источников
func (*Loader) GetSourceNames ¶
GetSourceNames возвращает имена всех источников
func (*Loader) LoadAll ¶
func (l *Loader) LoadAll(ctx context.Context) ([]SourceData, error)
LoadAll загружает данные из всех источников параллельно
type OutputConfig ¶
type OutputConfig struct {
Type string `yaml:"type"` // Тип: tdtp, rabbitmq, kafka, xlsx
TDTP *TDTPOutputConfig `yaml:"tdtp,omitempty"` // Конфигурация для TDTP
RabbitMQ *RabbitMQOutputConfig `yaml:"rabbitmq,omitempty"` // Конфигурация для RabbitMQ
Kafka *KafkaOutputConfig `yaml:"kafka,omitempty"` // Конфигурация для Kafka
XLSX *XLSXOutputConfig `yaml:"xlsx,omitempty"` // Конфигурация для XLSX
// Fallback — резервный канал доставки.
// Если primary-канал (Type) недоступен, tdtpcli автоматически переключается на fallback.
// Пример: primary=kafka, fallback=tdtp(s3://bucket/...) — данные не теряются при сбое брокера.
Fallback *OutputConfig `yaml:"fallback,omitempty"`
// Resilience — настройки circuit breaker для primary-канала.
// По умолчанию: max_failures=3, timeout_sec=60.
Resilience *OutputResilienceConfig `yaml:"resilience,omitempty"`
}
OutputConfig определяет назначение для результатов
func (*OutputConfig) Validate ¶
func (o *OutputConfig) Validate() error
Validate проверяет корректность OutputConfig
type OutputResilienceConfig ¶
type OutputResilienceConfig struct {
MaxFailures int `yaml:"max_failures"` // Число последовательных сбоев до переключения (default: 3)
TimeoutSec int `yaml:"timeout_sec"` // Время в Open-состоянии до следующей probe (default: 60)
}
OutputResilienceConfig настраивает circuit breaker для primary-канала доставки.
type ParallelImporter ¶
type ParallelImporter struct {
// contains filtered or unexported fields
}
ParallelImporter выполняет параллельный импорт TDTP пакетов из брокеров
func NewParallelImporter ¶
func NewParallelImporter(config ImporterConfig) *ParallelImporter
NewParallelImporter создает новый параллельный импортер
func (*ParallelImporter) Import ¶
func (pi *ParallelImporter) Import( ctx context.Context, handler func(ctx context.Context, dataPacket *packet.DataPacket) error, ) (*ImportStats, error)
Import выполняет параллельный импорт из брокера Принимает части из очереди/топика и обрабатывает их параллельно handler - функция обработки каждой части (например, вставка в БД)
type PerformanceConfig ¶
type PerformanceConfig struct {
MaxMemoryMB int `yaml:"max_memory_mb"` // Максимальная память для workspace (MB)
BatchSize int `yaml:"batch_size"` // Размер batch для импорта
ParallelSources bool `yaml:"parallel_sources"` // Загружать источники параллельно
// Fast — глобальный режим --fast для всего пайплайна.
// Пропускает DetectAndApply (SpecialValues NULL/NaN/Inf) при экспорте из БД и
// при генерации TDTP/Kafka-пакетов. Использовать когда источник гарантированно
// не содержит DB NULL, NaN, Infinity. Даёт ~5x ускорение GenerateReference.
Fast bool `yaml:"fast"`
}
PerformanceConfig определяет параметры производительности
type PipelineConfig ¶
type PipelineConfig struct {
Name string `yaml:"name"`
Version string `yaml:"version"`
Description string `yaml:"description"`
Sources []SourceConfig `yaml:"sources"`
Workspace WorkspaceConfig `yaml:"workspace"`
Transform TransformConfig `yaml:"transform"`
Processors processors.ProcessorConfig `yaml:"processors"`
Output OutputConfig `yaml:"output"`
Performance PerformanceConfig `yaml:"performance"`
Audit AuditConfig `yaml:"audit"`
ErrorHandling ErrorHandlingConfig `yaml:"error_handling"`
ResultLog ResultLogConfig `yaml:"result_log"`
Security SecurityConfig `yaml:"security"`
}
PipelineConfig содержит полную конфигурацию ETL pipeline
func LoadConfig ¶
func LoadConfig(path string) (*PipelineConfig, error)
LoadConfig загружает конфигурацию из YAML файла
func (*PipelineConfig) SetDefaults ¶
func (c *PipelineConfig) SetDefaults()
SetDefaults устанавливает значения по умолчанию для необязательных полей
func (*PipelineConfig) Validate ¶
func (c *PipelineConfig) Validate() error
Validate проверяет корректность конфигурации
type Processor ¶
type Processor struct {
// contains filtered or unexported fields
}
Processor представляет главный ETL процессор
func NewProcessor ¶
func NewProcessor(config *PipelineConfig) *Processor
NewProcessor создает новый ETL процессор
func (*Processor) GetConfig ¶
func (p *Processor) GetConfig() *PipelineConfig
GetConfig возвращает конфигурацию процессора
func (*Processor) GetPackageUUID ¶
GetPackageUUID возвращает UUID пакета, сгенерированный в начале Execute. Используется resultlog для публикации идентификатора зашифрованного результата.
func (*Processor) GetStats ¶
func (p *Processor) GetStats() ProcessorStats
GetStats возвращает статистику выполнения
func (*Processor) SetPipelineContext ¶
func (p *Processor) SetPipelineContext(ctx *packet.PipelineContext) *Processor
SetPipelineContext встраивает метаданные pipeline в экспортируемые пакеты (v1.4). Должен быть вызван до Execute().
func (*Processor) WithMercuryBinder ¶
func (p *Processor) WithMercuryBinder(binder processors.MercuryBinder) *Processor
WithMercuryBinder устанавливает замену Mercury-клиента (dev-режим, тесты). Должен быть вызван до Execute(). Propagates в Exporter через initWorkspace().
type ProcessorStats ¶
type ProcessorStats struct {
StartTime time.Time
EndTime time.Time
Duration time.Duration
SourcesLoaded int
TotalRowsLoaded int
TotalRowsExported int
Errors []error
}
ProcessorStats представляет статистику выполнения ETL
type RabbitMQInputConfig ¶
RabbitMQInputConfig конфигурация для чтения из RabbitMQ
type RabbitMQOutputConfig ¶
type RabbitMQOutputConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"password"`
Queue string `yaml:"queue"`
// VHost — виртуальный хост RabbitMQ. Пусто = "/", как и у самого RabbitMQ.
// До этого поля документация YAML показывала vhost, а структура его не
// читала: значение молча терялось, и пайплайн всегда шёл в "/".
VHost string `yaml:"vhost"`
}
RabbitMQOutputConfig определяет параметры отправки в RabbitMQ
type ResultLogConfig ¶
type ResultLogConfig struct {
Type string `yaml:"type"` // Тип: redis (пустое = отключено)
Address string `yaml:"address"` // Адрес Redis, например "127.0.0.1:6379"
Name string `yaml:"name"` // Имя результата (ключ/канал), например "MASK_V001"
Password string `yaml:"password"` // Пароль Redis (опционально)
DB int `yaml:"db"` // Индекс базы данных Redis (по умолчанию 0)
TTL int `yaml:"ttl"` // TTL ключа в секундах (по умолчанию 3600)
}
ResultLogConfig определяет параметры публикации результата выполнения пайплайна Позволяет оркестратору отслеживать состояния через Redis (GET/SUBSCRIBE)
func (*ResultLogConfig) Validate ¶
func (r *ResultLogConfig) Validate() error
Validate проверяет корректность ResultLogConfig
type SanitizeFieldsConfig ¶
type SanitizeFieldsConfig struct {
// Enabled включает санитайзинг. Можно опустить — достаточно задать translit или clear.
Enabled bool `yaml:"enabled"`
// Translit транслитерирует не-ASCII символы в ASCII через go-unidecode
// (кириллица, европейские диакритики: "Имя" → "Imia", "Österreich" → "Osterreich").
Translit bool `yaml:"translit"`
// Clear заменяет спецсимволы безопасными токенами:
// % → _pct, @ → _at, # → _xh, пробел → _, и т.д.
// Оставшиеся не-ASCII символы заменяются на _.
Clear bool `yaml:"clear"`
}
SanitizeFieldsConfig определяет правила санитайзинга имён полей источника. Применяется к именам полей в схеме до загрузки в workspace; данные строк не изменяются.
func (*SanitizeFieldsConfig) IsActive ¶
func (s *SanitizeFieldsConfig) IsActive() bool
IsActive возвращает true если санитайзинг должен быть применён.
type SecurityConfig ¶
type SecurityConfig struct {
MercuryURL string `yaml:"mercury_url"` // URL xZMercury, например "http://mercury:3000"
RecipientResource string `yaml:"recipient_resource"` // Имя ресурса/очереди получателя
KeyTTLSeconds int `yaml:"key_ttl_seconds"` // TTL ключа в Mercury Redis (по умолчанию 86400)
MercuryTimeoutMs int `yaml:"mercury_timeout_ms"` // Таймаут обращения к xZMercury (по умолчанию 5000)
ServerSecret string `yaml:"server_secret"` // HMAC-ключ xZMercury; fallback: $MERCURY_SERVER_SECRET
}
SecurityConfig определяет параметры интеграции с xZMercury для шифрования результатов. Используется когда output.tdtp.encryption: true.
type SourceConfig ¶
type SourceConfig struct {
Name string `yaml:"name"` // Имя источника (будет использовано как имя таблицы в workspace)
Type string `yaml:"type"` // Тип: postgres, mssql, mysql, sqlite, tdtp, tdtp-enc, tdtp-s3, csv
DSN string `yaml:"dsn"` // Data Source Name: строка подключения, путь к файлу или s3://bucket/key
Query string `yaml:"query"` // SQL запрос для извлечения данных (не используется для type: tdtp/tdtp-enc/tdtp-s3)
Timeout int `yaml:"timeout"` // Таймаут в секундах (0 = без таймаута)
MultiPart bool `yaml:"multi_part"` // Для type: tdtp/tdtp-s3 — загружать все части набора автоматически
MercuryURL string `yaml:"mercury_url"` // Только для type: tdtp-enc — URL xZMercury (например "http://mercury:3000")
MercuryTimeoutMs int `yaml:"mercury_timeout_ms"` // Только для type: tdtp-enc — таймаут обращения к xZMercury (по умолчанию 5000)
// NoDateSentinels — список дат-заглушек для "нет даты" (DB-specific conventions).
// Пример для MSSQL: ["1900-01-01", "1753-01-01"]
NoDateSentinels []string `yaml:"no_date_sentinels"`
// S3 — конфигурация S3-совместимого хранилища (SeaweedFS, MinIO и т.п.).
// Используется только для type: tdtp-s3. DSN может быть s3://bucket/key (bucket перекрывает S3.Bucket)
// или просто ключом (путём к объекту) при заданном S3.Bucket.
S3 *storage.S3Config `yaml:"s3,omitempty"`
// CSV loads raw text. Business types and validation belong in transform.sql.
CSV *CSVSourceConfig `yaml:"csv,omitempty"`
// Sanitize — правила санитайзинга имён полей.
// Применяется к схеме источника до загрузки данных в workspace.
// Пример:
// sanitize:
// translit: true # "Имя" → "Imia"
// clear: true # "Total %" → "Total_pct"
Sanitize *SanitizeFieldsConfig `yaml:"sanitize,omitempty"`
// Fast — пропустить DetectAndApply (SpecialValues) для этого источника.
// Переопределяет performance.fast на уровне источника.
Fast bool `yaml:"fast"`
}
SourceConfig определяет источник данных (PostgreSQL, MSSQL, MySQL, SQLite, TDTP, TDTP-enc, TDTP-S3)
func (*SourceConfig) Validate ¶
func (s *SourceConfig) Validate() error
Validate проверяет корректность SourceConfig
type SourceData ¶
type SourceData struct {
SourceName string
TableName string
Packet *packet.DataPacket
Error error
}
SourceData представляет загруженные данные из одного источника
type StreamingExportResult ¶
type StreamingExportResult struct {
OutputType string
Destination string
TotalParts int
TotalRows int
PartsSent int
ErrorsCount int
Errors []error
}
StreamingExportResult представляет результат потокового экспорта
type StreamingResult ¶
type StreamingResult struct {
Schema packet.Schema
RowsChan <-chan []string
ErrorChan <-chan error
}
StreamingResult содержит схему и канал с данными для потоковой обработки
type TDTPOutputConfig ¶
type TDTPOutputConfig struct {
Format string `yaml:"format"` // Формат: xml, json (в будущем)
Compression bool `yaml:"compression"` // Использовать сжатие
// Compress — второй YAML-ключ для того же факта, ради совместимости с CLI.
// SetDefaults складывает его в Compression и обнуляет, так что дальше по
// коду читать нужно ТОЛЬКО Compression. Читать это поле напрямую — значит
// видеть false у конфига, где сжатие включено.
Compress bool `yaml:"compress"`
CompressAlgo string `yaml:"compress_algo"` // Алгоритм: zstd (по умолчанию) или kanzi
CompressLevel int `yaml:"compress_level"` // Уровень: 1-19 (zstd), 6-7 (kanzi)
Destination string `yaml:"destination"` // Путь к файлу или s3://bucket/key
Encryption bool `yaml:"encryption"` // Шифровать результат через xZMercury (AES-256-GCM)
EncryptionV13 bool `yaml:"encryption_v13"` // true = legacy TDTP v1.3 whole-blob формат вместо v1.5 section-level (по умолчанию)
Compact bool `yaml:"compact"` // v1.3.1: compact format
CompactTail bool `yaml:"compact_tail"` // v1.3.1: tail-строка
FixedFields []string `yaml:"fixed_fields"` // v1.3.1: явный список fixed полей
S3 *storage.S3Config `yaml:"s3,omitempty"` // S3-совместимое хранилище (SeaweedFS, MinIO и т.п.)
// Fast — пропустить DetectAndApply при генерации выходных TDTP/Kafka-пакетов.
// Переопределяет performance.fast на уровне output.
Fast bool `yaml:"fast"`
// Columnar — Data.Layout="columns" (--columnar на CLI). До этого поля
// пайплайн не мог попросить колоночную раскладку никак.
Columnar bool `yaml:"columnar"`
// PacketSizeMB — размер части в МБ реального XML (--packet-size на CLI).
// 0 = дефолт генератора (~1.9 МБ). НЕ то же самое, что packet_kb у
// Kafka-вывода: там нет множителя ×2, и выравнивать формулы нельзя
// (см. packet.PacketSizeBudget и CLAUDE.md).
PacketSizeMB int `yaml:"packet_size_mb"`
// Integrity — проставить v1.4 xxh3_128 хеши (Schema+Data+Packet),
// независимо от Encryption. Раньше этот шаг попадал в цепочку только
// как побочный эффект encryption: true — обычный (нешифрованный)
// экспорт не мог получить хеш никаким способом. Зеркалит --integrity
// у CLI (pkg/cli/commands/export.go, needsIntegrity): без
// security.mercury_url — только локальный хеш для последующей сверки,
// с ним — ещё и регистрация в xZMercury.
Integrity bool `yaml:"integrity"`
}
TDTPOutputConfig определяет параметры экспорта в TDTP формат
type TransformConfig ¶
type TransformConfig struct {
SQL string `yaml:"sql"` // SQL запрос для трансформации
ResultTable string `yaml:"result_table"` // Имя таблицы с результатом (опционально)
Timeout int `yaml:"timeout"` // Таймаут выполнения в секундах
}
TransformConfig определяет SQL трансформацию данных в workspace
func (*TransformConfig) Validate ¶
func (t *TransformConfig) Validate() error
Validate проверяет корректность TransformConfig
type Workspace ¶
type Workspace struct {
// contains filtered or unexported fields
}
Workspace представляет SQLite :memory: рабочую среду для ETL операций Используется для загрузки данных из нескольких источников и выполнения JOIN запросов
func NewWorkspace ¶
NewWorkspace создает новый :memory: workspace
func (*Workspace) CreateTable ¶
CreateTable создает таблицу в workspace на основе схемы TDTP пакета
func (*Workspace) ExecuteSQL ¶
func (w *Workspace) ExecuteSQL(ctx context.Context, sqlQuery, resultTableName string) (*packet.DataPacket, error)
ExecuteSQL выполняет SQL запрос в workspace и возвращает результат как DataPacket
func (*Workspace) ExecuteSQLStream ¶
func (w *Workspace) ExecuteSQLStream(ctx context.Context, sqlQuery, resultTableName string) (*StreamingResult, error)
ExecuteSQLStream выполняет SQL запрос и возвращает данные через channel (streaming) Используется для экспорта больших объемов данных в RabbitMQ/Kafka без загрузки всего в память
type WorkspaceConfig ¶
type WorkspaceConfig struct {
Type string `yaml:"type"` // Тип: sqlite (только sqlite поддерживается)
Mode string `yaml:"mode"` // Режим: memory (:memory:) или путь к файлу
Config map[string]any `yaml:"config"` // Дополнительные настройки SQLite
}
WorkspaceConfig определяет временное хранилище для объединения данных
func (*WorkspaceConfig) Validate ¶
func (w *WorkspaceConfig) Validate() error
Validate проверяет корректность WorkspaceConfig
type XLSXOutputConfig ¶
type XLSXOutputConfig struct {
Destination string `yaml:"destination"` // Путь к выходному файлу
Sheet string `yaml:"sheet"` // Имя листа (пустое = имя таблицы результата)
}
XLSXOutputConfig определяет параметры экспорта в Excel формат