使用 beam python 使用 Avro 模式读取 Big Query table

Read Big Query table with Avro schema using beam, python

我将 apache-beam SDK 从 2.5.0 更改为 2.12.0,并在使用 python.

从 beam 中的 Big Query 读取 table 时出现 Avro 架构错误

BQ table 有一个 TIMESTAMP 字段,其他字段为 STRING。

data = pipe \
        | 'read bigquery' >> beam.io.Read(
            beam.io.BigQuerySource(
                dataset=args.dataset_name,
                table=args.table_name,
                use_standard_sql=True))

错误:

SchemaParseException: Type property "[u'null', {u'logicalType': u'timestamp-micros', u'type': u'long'}]" not a valid Avro schema: Union item must be a valid Avro schema: Currently does not support timestamp-micros logical type

已安装的软件包:

python=2.7.0,apache-beam=2.12.0,avro=1.9.0

这是 avro 1.9.0 中的回归。问题跟踪器在这里:https://issues.apache.org/jira/browse/AVRO-2429

如果您使用的是 python 2,您应该可以通过 pip install "avro==1.8.2" 降级到 1.8.2。如果你在 python 3 我相信 beam 应该默认尝试使用 fastavro(它不应该有你 运行 的错误)。