BigQuery показывает только первую букву значения в потоковом буфере
Я передаю данные в BigQuery с помощью клиентской библиотеки Python. Строка данных попадает в потоковый буфер 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 ответ
При потоковой передаче данных в BigQuery каждая строка имеет тип кортежа Python. Чтобы правильно определить кортеж в python, вам нужно добавить еще один ,
, Например:
>>> type( ('a') )
<type 'str'>
>>> type( ('a',) )
<type 'tuple'>
Как указано в этом ответе Stackru.
Теперь, как у вас есть, он отправляет массив отдельных символов, поэтому каждый символ будет находиться в отдельном столбце (если у вас есть больше столбцов).
Просто замени rows_to_insert = [(u'testString')]
с участием rows_to_insert = [(u'testString',)]
и ваша строка будет храниться правильно.