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',)] и ваша строка будет храниться правильно.

Другие вопросы по тегам