etl

package
v1.26.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 10, 2026 License: MIT Imports: 38 Imported by: 0

Documentation

Overview

Package etl provides functionality for the TDTP framework.

Index

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

func ParsePipelineVars(args []string) (vars map[string]string, other []string)

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

func NewExecutor(workspace *Workspace) *Executor

NewExecutor создает новый исполнитель SQL

func (*Executor) Execute

func (e *Executor) Execute(ctx context.Context, sql, resultTableName string) (*ExecutionResult, error)

Execute выполняет SQL трансформацию и возвращает результат

func (*Executor) GetWorkspace

func (e *Executor) GetWorkspace() *Workspace

GetWorkspace возвращает workspace (для тестирования)

type ExportResult

type ExportResult struct {
	OutputType   string
	Destination  string
	RowsExported int
	Error        error
}

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

func (e *Exporter) SetFast(fast bool)

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

func (e *Exporter) ValidateConfig() error

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

type KafkaInputConfig struct {
	Brokers []string
	Topic   string
	GroupID string
}

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

func (l *Loader) GetSourceCount() int

GetSourceCount возвращает количество сконфигурированных источников

func (*Loader) GetSourceNames

func (l *Loader) GetSourceNames() []string

GetSourceNames возвращает имена всех источников

func (*Loader) LoadAll

func (l *Loader) LoadAll(ctx context.Context) ([]SourceData, error)

LoadAll загружает данные из всех источников параллельно

func (*Loader) LoadOne

func (l *Loader) LoadOne(ctx context.Context, sourceName string) (*SourceData, error)

LoadOne загружает данные из одного источника

func (*Loader) SetFast

func (l *Loader) SetFast(fast bool)

SetFast propagates the performance.fast flag so every DB source skips SpecialValues detection (DetectAndApply). Per-source source.Fast takes precedence; this is the global fallback from PipelineConfig.Performance.Fast.

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) Execute

func (p *Processor) Execute(ctx context.Context) error

Execute выполняет весь ETL процесс

func (*Processor) GetConfig

func (p *Processor) GetConfig() *PipelineConfig

GetConfig возвращает конфигурацию процессора

func (*Processor) GetPackageUUID

func (p *Processor) GetPackageUUID() string

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) Validate

func (p *Processor) Validate() error

Validate проверяет конфигурацию процессора перед выполнением

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

type RabbitMQInputConfig struct {
	Host     string
	Port     int
	User     string
	Password string
	Queue    string
}

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

func NewWorkspace(ctx context.Context) (*Workspace, error)

NewWorkspace создает новый :memory: workspace

func (*Workspace) Close

func (w *Workspace) Close(ctx context.Context) error

Close закрывает workspace

func (*Workspace) CreateTable

func (w *Workspace) CreateTable(ctx context.Context, tableName string, fields []packet.Field) error

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 без загрузки всего в память

func (*Workspace) LoadData

func (w *Workspace) LoadData(ctx context.Context, tableName string, dataPacket *packet.DataPacket) error

LoadData загружает данные из TDTP пакета в таблицу workspace

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 формат

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL