Загрузка данных во временную таблицу с последующими запросами, распределяющими данные по различным таблицам, выглядит как одна жизнеспособная опция, при условии, что ваша временная таблица разделена и кластеризована в полях, используемых в распределении предложения where Если тип вашего события - число, которое вы можете рассмотреть используя целочисленное разбиение диапазона, как предложено @Yun Zhang.
В качестве альтернативы, вы можете использовать BqTail Big Query data loader and преобразователь. В этом случае рабочий процесс приема данных будет выглядеть следующим образом:
myrule.yaml
When:
Prefix: "/logs/"
Suffix: ".avro"
Async: true
Batch:
Window:
DurationInSec: 90
Dest:
Prefix: /logs/
Pattern: '/logs/.+/(\d{4})/(\d{2})/(\d{2})/.+'
Parameters:
- Name: TableSuffix
Expression: $1$2$3
Table: myproject:mydataset.logs_${TableSuffix}
Transient:
Dataset: temp
Schema:
Template: 'myproject:mydataset.template'
Split:
ClusterColumns:
- eventType
- nested.otherColumn
Mapping:
- When: eventType in (1,2) AND nested.otherColumn > 0
Then: myproject:mydataset.logs_xxx_${TableSuffix}
- When: eventType in (3,4) AND nested.otherColumn > 0
Then: myproject:mydataset.logs_yy_${TableSuffix}
- When: nested.otherColumn == 0
Then: myproject:mydataset.logs_zz_${TableSuffix}
OnSuccess:
- Action: delete
Этот рабочий процесс можно использовать для запуска BqTail в автономном режиме
bqtail -r=myrule.yaml -s=someDataURL -X
или используйте правило в режиме без сервера BqTail, где каждый файл, загружаемый в Google Storage, запускает событие для процесса BqTail.
Наконец, вы можете найти ' Загрузка и преобразование данных в BigQuery в масштабе 'удобно.