我有一组同质字典,如何在不知道架构的情况下将它们写入 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 Beam 以编程方式从数据中推断架构来创建和编写 bigquery 表?