# #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. Все еще странно, что соединитель не принимает поставщик значений для имени исходной таблицы.