【发布时间】:2021-05-08 06:24:26
【问题描述】:
试图找出我收到这些错误的原因。快速搜索仅导致提到损坏版本的答案,但这里似乎并非如此。创建模板工作正常,但是当我运行它(并且当我通过限制 arg 时)我得到下面的错误。这个想法是根据模板中提供的参数构建查询。如果有更好的替代方法,我愿意接受。
代码:
class Options(PipelineOptions):
@classmethod
def _add_argparse_args(cls, parser):
parser.add_value_provider_argument(
'--limit',
default=0,
type=int,
help='Limit the amount of rows retrieved'
)
...
def from_bq(options):
with beam.Pipeline(options=options) as p:
(p
| 'Read From BQ' >> beam.io.ReadFromBigQuery(query=NestedValueProvider(options.limit, create_query), use_standard_sql=True)
)
def create_query(limit):
query = """
SELECT * FROM ...
"""
if limit > 0:
query = query + " LIMIT {limit}".format(limit=limit)
return query
错误:
raise error.RuntimeValueProviderError('%s not accessible' % obj)
apache_beam.error.RuntimeValueProviderError: NestedValueProvider(value: RuntimeValueProvider(option: limit, type: int, default_value: 0), translator: create_query) not accessible [while running 'Read From BQ/Read/Split-ptransform-324']
运行 apache-beam 版本 2.27.0。
【问题讨论】:
-
澄清一下,我也尝试过使用 StaticValueProvider,只是为了进行实验。虽然它在 2.27.0 中不起作用,但在 2.26.0 中确实起作用,因此在以后的版本中 ValueProviders 似乎是半损坏的。不过,没有设法让常规的 ValueProvider 在任何版本中工作。
标签: python apache-beam dataflow apache-beam-io