Maison  >  Article  >  développement back-end  >  BQ insère le type d'enregistrement avec succès, mais aucune donnée n'est insérée

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

PHPz
PHPzavant
2024-02-09 15:40:181043parcourir

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
}

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"`
}

Voir la documentation (*inserter).put :

...

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer