Большой запрос потока данных, считанный из ValueProvider: объект «StaticValueProvider» не имеет атрибута «ProjectID»

# #google-bigquery #google-cloud-dataflow #apache-beam

Вопрос:

Я использую Python SDK для apache beam. Я пытаюсь прочитать данные из BigQuery с помощью поставщика значений (поскольку в документации указано, что это разрешено).

 def run(bq_source_table: ValueProvider,
        pipeline_options=None):

    pipeline_options.view_as(SetupOptions).setup_file = "./setup.py"

    with beam.Pipeline(options=pipeline_options) as pipeline:
        (
            pipeline
            | "Read from BigQuery" >> ReadFromBigQuery(table=bq_source_table)
        )
 

Параметры объявляются следующим образом:

 class CPipelineOptions(PipelineOptions):

    @classmethod
    def _add_argparse_args(cls, parser):
        parser.add_value_provider_argument(
            "--bq_source_table",
            help="The BigQuery source table name..n"
                 '"<project>:<dataset>.<table>".'
        )
 

Выполнение конвейера приводит к следующей ошибке:

Ошибка атрибута: объект «StaticValueProvider» не имеет атрибута «ProjectID» [во время выполнения «Чтение из BigQuery/Чтение/sdfboundsourcereader/ParDo(sdfboundsourcedofn)/SplitAndSizeRestriction»]

Есть какие-нибудь предложения о том, как это решить? Я не хочу использовать гибкие шаблоны.


ПРАВКА: Хорошо отметить, что query параметр поддерживает ValueProvider . Может ли это быть ошибкой?

Ответ №1:

Моим единственным предложением было бы использовать гибкие шаблоны.

Комментарии:

1. В настоящее время я решил эту проблему, предоставив поставщику значений исходного запроса соединитель BigQuery. Все еще странно, что соединитель не принимает поставщик значений для имени исходной таблицы.