Golang BigQuery: вставить массив в таблицу

Я пытаюсь вставить массив в таблицу, используя библиотеку bigquery golang.

У меня есть схема таблицы, которая выглядит так. Массив представляет собой столбец quality, имеет Repeated.

    tableSchema := bigquery.Schema{
        {Name: "issue_id", Type: bigquery.StringFieldType},
        {Name: "quality", Type: bigquery.StringFieldType, Repeated: true},
        {Name: "creation_date_ts", Type: bigquery.TimestampFieldType},
    }

Вот как я определил запись:

type escalationsRecord struct {
    IssueID      bigquery.NullString    `bigquery:"issue_id"`
    Quality      []string               `bigquery:"quality"`
    CreationTime bigquery.NullTimestamp `bigquery:"creation_date_ts"`
}

Вот как я создаю запись:

    record := escalationsRecord{
            IssueID:      bigquery.NullString{StringVal: fmt.Sprint(int(issue.Number)), Valid: true},
            Quality:      qualityArray,
            CreationTime: bigquery.NullTimestamp{Timestamp: issue.CreatedAt.Time, Valid: true},
        }
records = append(records, &record) 

Вот как я помещаю записи в BigQuery

inserter := table.Inserter()
err2 := inserter.Put(b.ctx, records)

Столбец quality имеет значение NULL, когда я смотрю на него в bigqyery. Ошибок нет. Массив содержит элементы. Любая идея, как правильно вставлять массивы? Я ничего не могу найти в документах.

Можете ли вы показать, как строится качественный массив? Я тестирую что-то похожее на то, что у вас есть, и у меня нет проблем с хранением нескольких значений. Интересно, проблема заключается в определении значения схемы как bigquery.StringFieldType, и это не соответствует тому, что имеет структура (при условии, что это [] строка). Вы можете попробовать использовать метод bigquery.InferSchema() для определения схемы из структуры, чтобы убедиться, что она совпадает.

Brian Wagner 06.12.2022 01:03

@BrianWagner, использующий InferSchema, сделал свое дело! Не могли бы вы добавить это как ответ?

Dan Dinu 22.12.2022 16:00
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
2
150
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что @BrianWagner предложил в своем комментарии, работает. Единственное изменение, которое я сделал, это использовать InferSchema() вместо того, чтобы определять его самостоятельно.

Итак, вместо

  tableSchema := bigquery.Schema{
        {Name: "issue_id", Type: bigquery.StringFieldType},
        {Name: "quality", Type: bigquery.StringFieldType, Repeated: true},
        {Name: "creation_date_ts", Type: bigquery.TimestampFieldType},
    }

теперь у меня есть

    tableSchema, err := bigquery.InferSchema(escalationsRecord{})
    if err != nil {
        log.Fatal(err)
    }

Другие вопросы по теме