apache/beam · warning

Native sinks no longer implemented; ignoring…

Error message

Native sinks no longer implemented; ignoring use_legacy_bq_sink.

What it means

The Dataflow runner warns when the `use_legacy_bq_sink` experiment is set, because native BigQuery sinks are no longer implemented and the flag is ignored; the standard Beam sink path is used regardless.

Solutions

  1. Remove `use_legacy_bq_sink` from the experiments list.
  2. Use `WriteToBigQuery` with an explicit method (e.g. FILE_LOADS) if that load behavior is desired.
  3. Audit Dataflow job configs and launch scripts to strip the flag.

Example fix

// before
options = PipelineOptions(['--experiments=use_legacy_bq_sink'])
// after
options = PipelineOptions([])  # or other experiments only
Defensive patterns

Strategy: validation

Validate before calling

from apache_beam.options.pipeline_options import DebugOptions
if options.view_as(DebugOptions).lookup_experiment('use_legacy_bq_sink'):
    raise ValueError('use_legacy_bq_sink is ignored; remove the experiment')

Prevention

When it happens

Trigger: Launching a pipeline to Dataflow with `--experiments=use_legacy_bq_sink` (via PipelineOptions or Dataflow console), reaching run_pipeline in dataflow_runner.py.

Common situations: Older deployment scripts/templates that enabled the legacy sink experiment; migration off Dataflow's former native sink support.

Understand the failure class

Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/dfb67e422d36224b. Report an issue: GitHub.

Appendix: source

Thrown at sdks/python/apache_beam/runners/dataflow/dataflow_runner.py:401

      pipeline.visit(
          self.side_input_visitor(
              deterministic_key_coders=not options.view_as(
                  TypeOptions).allow_non_deterministic_key_coders))

      # Performing configured PTransform overrides. Note that this is currently
      # done before Runner API serialization, since the new proto needs to
      # contain any added PTransforms.
      pipeline.replace_all(DataflowRunner._PTRANSFORM_OVERRIDES)

      # Apply DataflowRunner-specific overrides (e.g., streaming PubSub
      # optimizations)
      from apache_beam.runners.dataflow.ptransform_overrides import get_dataflow_transform_overrides
      dataflow_overrides = get_dataflow_transform_overrides(options)
      if dataflow_overrides:
        pipeline.replace_all(dataflow_overrides)

      if options.view_as(DebugOptions).lookup_experiment('use_legacy_bq_sink'):
        warnings.warn(
            "Native sinks no longer implemented; "
            "ignoring use_legacy_bq_sink.")

    if pipeline_proto:
      self.proto_pipeline = pipeline_proto

    else:
      if options.view_as(SetupOptions).prebuild_sdk_container_engine:
        # if prebuild_sdk_container_engine is specified we will build a new sdk
        # container image with dependencies pre-installed and use that image,
        # instead of using the inferred default container image.
        self._default_environment = (
            environments.DockerEnvironment.from_options(options))
        options.view_as(WorkerOptions).sdk_container_image = (
            self._default_environment.container_image)
      else:
        artifacts = environments.python_sdk_dependencies(options)
        if artifacts:

View on GitHub (pinned to 12126d8942)