第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 Golang 中使用 BigQuery Write API

在 Golang 中使用 BigQuery Write API

Go
FFIVE 2022-10-17 17:11:51
我正在嘗試使用新的Bigquery Storage API從 Golang 進(jìn)行流式插入。根據(jù)此頁(yè)面,我了解到此 API 取代了舊的流式插入 bigquery API。但是,文檔中的示例都沒(méi)有顯示如何實(shí)際插入行。為了創(chuàng)建 AppendRowsRequest,我得到了以下結(jié)果:&storagepb.AppendRowsRequest{    WriteStream: resp.Name,    Rows: &storagepb.AppendRowsRequest_ProtoRows{        ProtoRows: &storagepb.AppendRowsRequest_ProtoData{            WriterSchema: nil, // protobuf schema??            Rows: &storagepb.ProtoRows{                SerializedRows: [][]byte{}, // serialized protocol buffer data??            },        },    },}我應(yīng)該在上面的 SerializedRows 字段中輸入什么數(shù)據(jù)?上面的storagepb.ProtoRows結(jié)構(gòu)記錄在這里。不幸的是,給出的只是協(xié)議緩沖區(qū)主概述頁(yè)面的鏈接。誰(shuí)能給我一個(gè)使用新的 Bigquery Storage API 將行從 Golang 流式傳輸?shù)?bigquery 的示例?
查看完整描述

2 回答

?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

在上述答案的幫助下,我找到了一個(gè)工作示例,該示例可在 github 上找到: https ://github.com/alexflint/bigquery-storage-api-example

主要代碼是:

const (

    project = "myproject"

    dataset = "mydataset"

    table   = "mytable"

    trace   = "bigquery-writeclient-example" // identifies this client for bigquery debugging

)


// the data we will stream to bigquery

var rows = []*Row{

    {Name: "John Doe", Age: 104},

    {Name: "Jane Doe", Age: 69},

    {Name: "Adam Smith", Age: 33},

}


func main() {

    ctx := context.Background()


    // create the bigquery client

    client, err := storage.NewBigQueryWriteClient(ctx)

    if err != nil {

        log.Fatal(err)

    }

    defer client.Close()


    // create the write stream

    // a COMMITTED write stream inserts data immediately into bigquery

    resp, err := client.CreateWriteStream(ctx, &storagepb.CreateWriteStreamRequest{

        Parent: fmt.Sprintf("projects/%s/datasets/%s/tables/%s", project, dataset, table),

        WriteStream: &storagepb.WriteStream{

            Type: storagepb.WriteStream_COMMITTED,

        },

    })

    if err != nil {

        log.Fatal("CreateWriteStream: ", err)

    }


    // get the stream by calling AppendRows

    stream, err := client.AppendRows(ctx)

    if err != nil {

        log.Fatal("AppendRows: ", err)

    }


    // get the protobuf descriptor for our row type

    var row Row

    descriptor, err := adapt.NormalizeDescriptor(row.ProtoReflect().Descriptor())

    if err != nil {

        log.Fatal("NormalizeDescriptor: ", err)

    }


    // serialize the rows

    var opts proto.MarshalOptions

    var data [][]byte

    for _, row := range rows {

        buf, err := opts.Marshal(row)

        if err != nil {

            log.Fatal("protobuf.Marshal: ", err)

        }

        data = append(data, buf)

    }


    // send the rows to bigquery

    err = stream.Send(&storagepb.AppendRowsRequest{

        WriteStream: resp.Name,

        TraceId:     trace, // identifies this client

        Rows: &storagepb.AppendRowsRequest_ProtoRows{

            ProtoRows: &storagepb.AppendRowsRequest_ProtoData{

                // protocol buffer schema

                WriterSchema: &storagepb.ProtoSchema{

                    ProtoDescriptor: descriptor,

                },

                // protocol buffer data

                Rows: &storagepb.ProtoRows{

                    SerializedRows: data, // serialized protocol buffer data

                },

            },

        },

    })

    if err != nil {

        log.Fatal("AppendRows.Send: ", err)

    }


    // get the response, which will tell us whether it worked

    _, err = stream.Recv()

    if err != nil {

        log.Fatal("AppendRows.Recv: ", err)

    }


    log.Println("done")

}

上面“Row”結(jié)構(gòu)的協(xié)議緩沖區(qū)定義是:


syntax = "proto3";


package tutorial;


option go_package = ".;main";


message Row {

    string Name = 1;

    int32 Age = 2;

}

您需要首先使用與協(xié)議緩沖區(qū)對(duì)應(yīng)的模式創(chuàng)建一個(gè) bigquery 數(shù)據(jù)集和表。請(qǐng)參閱上面鏈接的存儲(chǔ)庫(kù)中的自述文件以了解如何執(zhí)行此操作。


運(yùn)行上面的代碼后,數(shù)據(jù)在 bigquery 中顯示如下:


$ bq query 'select * from mydataset.mytable'

Waiting on bqjob_r1b39442e5474a885_0000017df21f629e_1 ... (0s) Current status: DONE   

+------------+-----+

|    name    | age |

+------------+-----+

| John Doe   | 104 |

| Jane Doe   |  69 |

| Adam Smith |  33 |

+------------+-----+

感謝大家的幫助!


查看完整回答
反對(duì) 回復(fù) 2022-10-17
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

我找到了一些關(guān)于將流寫(xiě)入表的文檔[1] [2],但我不確定這是否是您要查找的內(nèi)容。請(qǐng)記住, storage/apiv1beta2 當(dāng)前處于 beta 狀態(tài),因此可能尚未實(shí)現(xiàn)或缺少有關(guān)它的文檔。如果我附加的文檔對(duì)您沒(méi)有幫助,我們可以打開(kāi)一個(gè)公共問(wèn)題跟蹤器來(lái)正確記錄或?qū)嵤┬辛鳌?/p>



查看完整回答
反對(duì) 回復(fù) 2022-10-17
  • 2 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)