Parallelism is controlled by the number of
nodes in the
Bigtable cluster. Each node manages one or more key ranges,
although key ranges can move between nodes as part of
load balancing. For more information,
see Understand performance in the
Bigtable documentation.
You are charged for the number of nodes in your instance's clusters. See
Bigtable pricing.
Performance
The following table shows performance metrics for Bigtable I/O
write operations. The workloads were run on one e2-standard2 worker, using
the Apache Beam SDK 2.48.0 for Java. They did not use Runner v2.
These metrics are based on simple batch pipelines. They are intended to compare performance
between I/O connectors, and are not necessarily representative of real-world pipelines.
Dataflow pipeline performance is complex, and is a function of VM type, the data
being processed, the performance of external sources and sinks, and user code. Metrics are based
on running the Java SDK, and aren't representative of the performance characteristics of other
language SDKs. For more information, see Beam IO
Performance.
Best practices
In general, avoid using transactions. Transactions aren't guaranteed to be
idempotent, and Dataflow might invoke them multiple times due
to retries, causing unexpected values.
A single Dataflow worker might process data for many key
ranges, leading to inefficient writes to Bigtable. Using
GroupByKey to group data by Bigtable key can significantly
improve write performance.
If you write large datasets to Bigtable, consider calling
withFlowControl. This setting automatically rate-limits
traffic to Bigtable, to ensure the Bigtable
servers have enough resources available to serve data.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[[["\u003cp\u003eThe Apache Beam Bigtable I/O connector facilitates writing data from Dataflow to Bigtable, and pre-built Google Dataflow templates can also be used depending on the use case.\u003c/p\u003e\n"],["\u003cp\u003eBigtable cluster nodes dictate parallelism, with each node managing key ranges that can shift during load balancing, and node count directly affects Bigtable costs.\u003c/p\u003e\n"],["\u003cp\u003ePerformance metrics for Bigtable I/O write operations were measured at 65 MBps or 60,000 elements per second using a specific setup, though real-world pipeline performance can vary greatly.\u003c/p\u003e\n"],["\u003cp\u003eAvoid using transactions when writing to Bigtable with Dataflow due to potential issues with idempotency and retries, and use \u003ccode\u003eGroupByKey\u003c/code\u003e for improved write efficiency.\u003c/p\u003e\n"],["\u003cp\u003eUtilizing \u003ccode\u003ewithFlowControl\u003c/code\u003e is advised when writing substantial datasets to Bigtable to automatically manage traffic and prevent Bigtable server overload.\u003c/p\u003e\n"]]],[],null,["# Write from Dataflow to Bigtable\n\nTo write data from Dataflow to Bigtable, use the\nApache Beam [Bigtable I/O connector](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/bigtable/package-summary.html).\n| **Note:** Depending on your scenario, consider using one of the [Google-provided Dataflow templates](/dataflow/docs/guides/templates/provided-templates). Several of these write to Bigtable.\n\nParallelism\n-----------\n\nParallelism is controlled by the number of\n[nodes](/bigtable/docs/instances-clusters-nodes#nodes) in the\nBigtable cluster. Each node manages one or more key ranges,\nalthough key ranges can move between nodes as part of\n[load balancing](/bigtable/docs/overview#load-balancing). For more information,\nsee [Understand performance](/bigtable/docs/performance) in the\nBigtable documentation.\n\nYou are charged for the number of nodes in your instance's clusters. See\n[Bigtable pricing](/bigtable/pricing).\n\nPerformance\n-----------\n\nThe following table shows performance metrics for Bigtable I/O\nwrite operations. The workloads were run on one `e2-standard2` worker, using\nthe Apache Beam SDK 2.48.0 for Java. They did not use Runner v2.\n\n\nThese metrics are based on simple batch pipelines. They are intended to compare performance\nbetween I/O connectors, and are not necessarily representative of real-world pipelines.\nDataflow pipeline performance is complex, and is a function of VM type, the data\nbeing processed, the performance of external sources and sinks, and user code. Metrics are based\non running the Java SDK, and aren't representative of the performance characteristics of other\nlanguage SDKs. For more information, see [Beam IO\nPerformance](https://beam.apache.org/performance/).\n\n\u003cbr /\u003e\n\nBest practices\n--------------\n\n- In general, avoid using transactions. Transactions aren't guaranteed to be\n idempotent, and Dataflow might invoke them multiple times due\n to retries, causing unexpected values.\n\n- A single Dataflow worker might process data for many key\n ranges, leading to inefficient writes to Bigtable. Using\n `GroupByKey` to group data by Bigtable key can significantly\n improve write performance.\n\n- If you write large datasets to Bigtable, consider calling\n [`withFlowControl`](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html#withFlowControl-boolean-). This setting automatically rate-limits\n traffic to Bigtable, to ensure the Bigtable\n servers have enough resources available to serve data.\n\nWhat's next\n-----------\n\n- Read the [Bigtable I/O connector](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/bigtable/package-summary.html) documentation.\n- See the list of [Google-provided templates](/dataflow/docs/guides/templates/provided-templates)."]]