首页 > 解决方案 > Bigquery 实体标签

问题描述

当我将数据从 Cloud Storage 加载到 Bigquery 时,该click_url字段在创建时变成了Record类型,即使它是一个字符串(可能是因为noindex不确定)。当我尝试使用Inserter. 我收到此错误消息:

无法将 std::string 转换为记录字段:可选 .Msg_0_CLOUD_QUERY_TABLE.Msg_1_CLOUD_QUERY_TABLE_click_url click_url = 1

大查询中的表:

在此处输入图像描述

架构:

在此处输入图像描述

这是代码:

type Product struct {
        Name     string `datastore:"name" bigquery:"name"`
        ClickUrl string `datastore:"click_url,noindex" bigquery:"click_url"`
        DateAdded time.Time `datastore:"date_added" bigquery:"date_added"`
}

func insertRows(data interface{}) error {
        projectID := "my-project-id"
        datasetID := "mydataset"
        tableID := "mytable"
        ctx := context.Background()
        client, err := bigquery.NewClient(ctx, projectID)
        if err != nil {
                return fmt.Errorf("bigquery.NewClient: %v", err)
        }
        defer client.Close()

        inserter := client.Dataset(datasetID).Table(tableID).Inserter()
        if err := inserter.Put(ctx, data); err != nil {
                return err
        }
        return nil
}

func main() {
        product := Product{"product_name", "click_url", "date_added_value"} // Example data from datastore
        if err := insertRows(product); err != nil {
              fmt.Println(err)
        }
}

我应该在实体标签上放什么"bigquery:click_url"才能使这项工作?

标签: gogoogle-bigquery

解决方案


因为 BigQuery 中的 ClickUrl 是 STRUCT 类型,具有键值对。

也许试试这个?

type Product struct {
        Name     string `datastore:"name" bigquery:"name"`
        ClickUrl struct {
          String  string
          Text  string
          Provided  string
        } `datastore:"click_url,noindex" bigquery:"click_url"`
        DateAdded time.Time `datastore:"date_added" bigquery:"date_added"`
}

推荐阅读