Запрещена потоковая передача в секционированную таблицу Bigquery на основе столбцов?

Поддерживается ли потоковая передача данных в разделенную по столбцам таблицу BigQuery? У меня проблема, появляется эта ошибка:

BadRequest: 400 POST https://www.googleapis.com/bigquery/v2/projects/...$20180410/insertAll: потоковая передача в раздел метаданных таблицы разделения на основе столбцов ... $ 20180410 запрещен.

При чтении документации по потоковой передаче BigQuery говорится, что потоковая передача в разделенные таблицы разрешено, но все примеры относятся к разделам времени загрузки. Я не вижу упоминания о более новом разделении на основе столбцов.

Поддерживается ли я просто неправильно делаю? Например, ошибка возникает, когда я явно добавляю суффикс раздела ($ YYYYMMDD). Когда я не использую суффикс, запись проходит успешно, но не похоже, что она на самом деле разделена.

Вот мой пример кода:

У нас есть таблица с несколькими столбцами, скажем так:

date: DATE (partitioned field)
name: STRING
count: INTEGER

Я пытаюсь сделать потоковую вставку через:

from google.cloud import bigquery

data = [
    {'date': date('2018-04-10'), 'name': 'x', 'count': 10},
    {'date': date('2018-04-10'), 'name': 'y', 'count': 5},    
]
client = bigquery.Client(...)
table_ref = client.dataset(dataset).table(tableid + '$20180410')
schema = client.get_table(table_ref).schema

# Raises the 400 Bad Request above.
result = client.insert_rows(table_ref, data, selected_fields=schema)

person Greg    schedule 13.04.2018    source источник
comment
пожалуйста попробуйте удалить $ 20180410   -  person Lei Chen    schedule 13.04.2018
comment
Когда я удаляю раздел $ 20180410, запись завершается успешно, но, насколько я могу судить, данные фактически не разделены. Если я затем попытаюсь удалить данные только из раздела через bq rm ...$20180410, строки не будут удалены.   -  person Greg    schedule 13.04.2018
comment
потоковая передача в определенный раздел таблицы с разделами по столбцам запрещена. Вы можете выполнять потоковую передачу в таблицу без суффикса, и данные будут распределены по разделам в соответствии со значением поля разделения.   -  person Lei Chen    schedule 13.04.2018
comment
он может все еще находиться в буфере потоковой передачи, пока вы удаляете раздел. Не могли бы вы попробовать удалить через несколько минут?   -  person Lei Chen    schedule 13.04.2018
comment
не могли бы вы поделиться своим полным именем таблицы с projectid и datasetid?   -  person Lei Chen    schedule 13.04.2018
comment
Ага, спасибо, Лей. Я думаю, что это все. Я отправил строки в таблицу примерно в 10:40 по тихоокеанскому времени, и они появились в течение нескольких минут, но на их разбиение потребовалось как минимум несколько часов. Я попробовал в 13:10 и смог их забить. Это довольно медленно! Я думаю, что буду придерживаться загрузки из файла, так как кажется, что в этот момент происходит разбиение.   -  person Greg    schedule 13.04.2018
comment
@Greg Можете ли вы добавить раздел Обновлено / Решено в качестве ответа и принять его?   -  person VictorGGl    schedule 23.04.2018
comment
@VictorGGl ага, готово.   -  person Greg    schedule 24.04.2018


Ответы (1)


Обновлено / решено (Hat-tip и спасибо Lei Chen. См. комментарии для обсуждения)

Для потоковой передачи в секционированную таблицу не добавляйте $ YYYMMDD к tableid. BigQuery выполнит разметку за вас, но ... похоже, это отдельный этап. Мои записи появились в таблице из буфера потока в течение нескольких минут, но для правильного разбиения потребовалось несколько часов.

Это легче определить, если вы используете временной раздел приема и можете запросить псевдостолбец _PARTITION. Для разделов столбцов я не нашел хорошего способа узнать, были ли они разделены, кроме как bq rm-ing раздел и посмотреть, исчезли ли записи.

person Greg    schedule 24.04.2018
comment
Все, что все еще находится в буфере потоковой передачи для многораздельных таблиц, будет отображаться в разделе UNPARTITIONED до тех пор, пока оно не будет извлечено, после чего оно будет отображаться в правильном разделе. - person Victor Mota; 19.10.2018
comment
На данный момент данные буфера потоковой передачи автоматически включаются в результаты запроса, когда вы используете в запросе фильтр секций. То же самое и с пакетной загрузкой файлов. - person Haris Nadeem; 21.12.2018