mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-13 08:01:02 +00:00
62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package cli
|
|
|
|
import (
|
|
"github.com/featurebasedb/featurebase/v3/cli/batch"
|
|
"github.com/featurebasedb/featurebase/v3/cli/kafka"
|
|
"github.com/featurebasedb/featurebase/v3/errors"
|
|
)
|
|
|
|
func (cmd *Command) newKafkaRunner(cfgFile string) (*kafka.Runner, error) {
|
|
|
|
cfg, err := kafka.ConfigFromFile(cfgFile)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "getting config from file")
|
|
}
|
|
|
|
if err := kafka.ValidateConfig(cfg); err != nil {
|
|
return nil, errors.Wrap(err, "validating config")
|
|
}
|
|
|
|
// Look up fields based on table provided in the config.
|
|
wqr, err := cmd.executeQuery(newRawQuery("SHOW COLUMNS FROM " + cfg.Table))
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "executing query")
|
|
}
|
|
|
|
scr, err := wqr.ShowColumnsResponse()
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "getting show columns from wire query response")
|
|
}
|
|
|
|
// If no fields were provided in the config, use the fields defined on the
|
|
// table and assume a 1-to-1 mapping of source to destination.
|
|
if len(cfg.Fields) == 0 {
|
|
cfg.Fields = kafka.FieldsToConfig(scr.Fields)
|
|
} else {
|
|
cfg.Fields, err = kafka.CheckFieldCompatibility(cfg.Fields, scr)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "validating config fields")
|
|
}
|
|
}
|
|
|
|
idkCfg, err := kafka.ConvertConfig(cfg)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "cleaning config")
|
|
}
|
|
|
|
flds, err := kafka.ConfigToFields(cfg, idkCfg.PrimaryKeys)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "getting fields from config")
|
|
}
|
|
|
|
kr := kafka.NewRunner(
|
|
idkCfg,
|
|
batch.NewSQLBatcher(cmd, flds),
|
|
cmd.stderr,
|
|
)
|
|
|
|
// set pilosa host which is the only IDK config to come through
|
|
// configuration flags rather than the kafka config file
|
|
kr.Main.PilosaHosts = []string{cmd.host + ":" + cmd.port}
|
|
return kr, nil
|
|
}
|