У меня есть коллекция однородных диктов, как мне их записать в BigQuery, не зная схемы?
BigQuerySink требует, чтобы я указывал схему при ее создании. Но я не знаю схемы: она определяется ключами диктов, которые я пытаюсь написать.
Есть ли способ, чтобы мой конвейер вывел схему, а затем предоставил ее обратно (как дополнительный ввод?) в приемник?
Например:
# Create a PCollection of dicts, something like
# {'field1': 'myval', 'field2': 10}
data = (p | 'generate_data' >> beam.ParDo(CreateData())
# Infer the schema from the data
# Generates a string for each element (ok to assume all dict keys equal)
# "field1:STRING, field2:INTEGER"
schema = (data
| 'infer_schema' >> beam.ParDo(InferSchema())
| 'sample_one' >> beam.combiners.Sample.FixedSizeGlobally(1))
Но тогда как передать схему в качестве параметра BigQuerySink и использовать ее в beam.io.Write?
Я знаю, что это неправильно, но я хочу сделать следующее:
sink = BigQuerySink(tablename, dataset, project, schema=Materialize(schema))
p | 'write_bigquery' >> beam.io.Write(sink)
tl; dr Есть ли способ создать и написать таблицу больших запросов из луча apache программным путем, выводя схему из данных?