0

我正在使用 Python 客户端库将数据流式传输到 BigQuery。这行数据落在 BQ 流缓冲区中就好了,但是当我运行查询来查看它时,我只能看到我插入的值的第一个字母。

具体来说,我运行一个 Python 片段,如下所示:

from google.cloud import bigquery
client = bigquery.Client()
dataset_id = 'mydataset'
table_id = 'mytable'
table_ref = client.dataset(dataset_id).table(table_id)
table = client.get_table(table_ref)
rows_to_insert = [(u'testString')]
client.insert_rows(table, rows_to_insert)

然后当我运行时SELECT * FROM mytable,我得到的结果值只有't'而不是'testString'

我猜这与流缓冲区有关,一旦它被重写为 BQ 本机格式,它应该向我显示整个值。但是,如果有人可以为我澄清一下,那就太好了。

4

1 回答 1

1

当您在 BigQuery 中流式传输数据时,每一行都是 P​​ython 元组类型。要在 python 中正确定义一个元组,您需要再添加一个,. 例如:

>>> type( ('a') )
<type 'str'>

>>> type( ('a',) )
<type 'tuple'>

正如此Stackoverflow 答案中所述。

你现在拥有它的方式,它发送一个单独的字符数组,所以每个字符都会进入不同的列(如果你有更多的列)。

只需替换rows_to_insert = [(u'testString')]rows_to_insert = [(u'testString',)],您的字符串将被正确存储。

于 2019-08-06T14:33:18.643 回答