BigQuery仅在流式缓冲区中显示值的第一个字母

时间:2019-08-05 01:38:25

标签: google-bigquery python-bigquery

我正在使用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本机格式重写了该值,它应该向我显示整个值。但是,如果有人可以为我澄清这一点,那就太好了。

1 个答案:

答案 0 :(得分:1)

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

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

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

Stackoverflow answer中所述。

您现在拥有的方式,它将发送一个由单个字符组成的数组,因此每个字符将进入不同的列(以防您有更多的列)。

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

相关问题