Maison > développement back-end > Golang > le corps du texte

BQ insère le type d'enregistrement avec succès, mais aucune donnée n'est insérée

PHPz
Libérer: 2024-02-09 15:40:18
avant
1111 Les gens l'ont consulté

BQ 插入记录类型成功,未插入数据

l'éditeur php Banana vous présentera un problème courant de fonctionnement de la base de données, c'est-à-dire que le type d'enregistrement est inséré avec succès dans la base de données BQ mais les données réelles ne sont pas insérées. Cette situation peut entraîner une incohérence des données, nous devons donc en découvrir la cause et résoudre le problème. Dans ce qui suit, nous détaillerons les causes possibles et les solutions pour aider les lecteurs à mieux gérer ce problème.

Contenu de la question

J'essaie d'insérer des données dans bigquery selon l'exemple suivant Texte avec tableau pré-créé par rapport à l'exemple donné. Mon code est le suivant

type tagInfo struct {
    proj_name string `bigquery:"proj_name"`
    Tags      Tags   `bigquery:"tags"`
}
type Tags struct {
    key    string `bigquery:"key"`
    values string `bigquery:"values"`
}
func insertData() error {
    prjName := "prjName"
    datasetID := "DSName"
    tableID := "TName"

    ctx := context.Background()
    client, err := bigquery.NewClient(ctx, prjName)
    if err != nil {
        return fmt.Errorf("Bigquery.NewClient: %w", err)
    }
    defer client.Close()

    item := &tagInfo{
        proj_name: "Devil",
        Tags: Tags{
            key:    "engcontact",
            values: "Meryl Streep",
        },
    }
    fmt.Printf("Item is: %s", item)
    items := []*tagInfo{item}

    table := client.Dataset(datasetID).Table(tableID)
    inserter := table.Inserter()
    err = inserter.Put(ctx, items)

    if err != nil {
        if multiErr, ok := err.(bigquery.PutMultiError); ok {
            for _, putErr := range multiErr {
                fmt.Printf("failed to insert row %d with err: %v \n", putErr.RowIndex, putErr.Error())
                fmt.Println(putErr.Errors)
            }
        }
        return err
    }
    return nil
}
Copier après la connexion

Le code s'exécute avec succès mais je ne vois aucun enregistrement inséré. La structure du tableau est la suivante

Étiquette de politique de valeur par défaut de règle de tri de clé de mod de type de nom de champ

chaîne de nom_proj nullable

Étiquette. Le dossier peut être vide

clé. La chaîne peut être vide valeurs. La chaîne peut être vide

Je ne sais pas ce qui ne va pas, si quelqu'un peut me donner des conseils, merci beaucoup.

tia Srikanth

Attendez-vous à ce que l'enregistrement soit inséré avec succès dans le tableau.

Solution de contournement

Les champs doivent être exportés. Ce problème a été signalé trop de fois :

type taginfo struct {
    projname string `bigquery:"proj_name"`
    tags     tags   `bigquery:"tags"`
}
type tags struct {
    key    string `bigquery:"key"`
    values string `bigquery:"values"`
}
Copier après la connexion

Voir la documentation (*inserter).put< /a> :

...

Si src est Valuesaver, sa méthode save est appelée pour générer une ligne à télécharger.

Si src est une structure ou un pointeur vers une structure, le schéma en est déduit et utilisé pour créer le structsaver. L'insertid de structsaver sera vide.

...

Ceci est un commentaire sur

// inferFields extracts all exported field types from struct type.
func inferFields(rt reflect.Type) (Schema, error) {

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal