Golang AWS Firehose с использованием json имени поля вместо имени поля структуры - PullRequest
1 голос
/ 03 августа 2020

У меня есть следующая структура:

type ProcessedRecords struct {
    CustIndividualID                  string      `json:"individual id"`
    Household                         string      `json:"Household"`
}

И у меня есть часть многих структур, которые разделяют это значение. Я пытаюсь отправить их, используя операцию PutRecordBatch из AWS SDK:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/firehose"
)

type ProcessedRecords struct {
    CustIndividualID                  string      `json:"individual id"`
    Household                         string      `json:"Household"`
}

func main() {
    submitToFirehose(recordList)
}
func submitToFirehose(records []ProcessedRecords) {
    streamName := "processed-stream"

    sess := session.Must(session.NewSession())
    // Create a Firehose client with additional configuration
    firehoseService := firehose.New(sess, aws.NewConfig().WithRegion("us-east-1"))

    recordsBatchInput := &firehose.PutRecordBatchInput{}
    recordsBatchInput = recordsBatchInput.SetDeliveryStreamName(streamName)

    recordsInput := []*firehose.Record{}
    for i := 0; i < len(records); i++ {
        if len(recordsInput) == 500 {
            recordsBatchInput = recordsBatchInput.SetRecords(recordsInput)
            resp, err := firehoseService.PutRecordBatch(recordsBatchInput)
            if err != nil {
                fmt.Printf("PutRecordBatch err: %v\n", err)
            } else {
                fmt.Printf("FailedPuts: %v\n", *resp.FailedPutCount)
            }
            recordsInput = []*firehose.Record{}
        }

        b, err := json.Marshal(records[i])

        if err != nil {
            log.Printf("Error: %v", err)
        }

        record := &firehose.Record{Data: b}
        recordsInput = append(recordsInput, record)
    }
}

Кажется, это работает, и похоже, что мой бэкэнд Glue настроен правильно, однако CustIndividualID не написано в S3. Я подозреваю, что это потому, что он читает json:"individual id" как имя столбца, а не CustIndividualID. это проблема, потому что в связующих таблицах не может быть пробелов в имени столбца. Что я делаю не так?

...