blob: c5c795951d42d57b3703a9674b7e88bb8ee07ff9 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>BigtableIO (Apache Beam 2.47.0)</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="BigtableIO (Apache Beam 2.47.0)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9,"i2":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableConfig.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.html" target="_top">Frames</a></li>
<li><a href="BigtableIO.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.beam.sdk.io.gcp.bigtable</div>
<h2 title="Class BigtableIO" class="title">Class BigtableIO</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.io.gcp.bigtable.BigtableIO</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">BigtableIO</span>
extends java.lang.Object</pre>
<div class="block"><a href="../../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>Transforms</code></a> for reading from and writing to Google Cloud Bigtable.
<p>Please note the Cloud BigTable HBase connector available <a
href="https://github.com/googleapis/java-bigtable-hbase/tree/master/bigtable-dataflow-parent/bigtable-hbase-beam">here</a>.
We recommend using that connector over this one if <a
href="https://cloud.google.com/bigtable/docs/hbase-bigtable">HBase API</a></> works for your
needs.
<p>For more information about Cloud Bigtable, see the online documentation at <a
href="https://cloud.google.com/bigtable/">Google Cloud Bigtable</a>.
<h3>Reading from Cloud Bigtable</h3>
<p>The Bigtable source returns a set of rows from a single table, returning a <code>PCollection&lt;Row&gt;</code>.
<p>To configure a Cloud Bigtable source, you must supply a table id, a project id, an instance id
and optionally a <code>BigtableOptions</code> to provide more specific connection configuration. By
default, <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableIO.Read</code></a> will read all rows in the table. The row ranges to be read can
optionally be restricted using <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html#withKeyRanges-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Read.withKeyRanges(org.apache.beam.sdk.options.ValueProvider&lt;java.util.List&lt;org.apache.beam.sdk.io.range.ByteKeyRange&gt;&gt;)</code></a>, and a <code>RowFilter</code> can
be specified using <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html#withRowFilter-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Read.withRowFilter(org.apache.beam.sdk.options.ValueProvider&lt;com.google.bigtable.v2.RowFilter&gt;)</code></a>. For example:
<pre><code>
Pipeline p = ...;
// Scan the entire table.
p.apply("read",
BigtableIO.read()
.withProjectId(projectId)
.withInstanceId(instanceId)
.withTableId("table"));
// Scan a prefix of the table.
ByteKeyRange keyRange = ...;
p.apply("read",
BigtableIO.read()
.withProjectId(projectId)
.withInstanceId(instanceId)
.withTableId("table")
.withKeyRange(keyRange));
// Scan a subset of rows that match the specified row filter.
p.apply("filtered read",
BigtableIO.read()
.withProjectId(projectId)
.withInstanceId(instanceId)
.withTableId("table")
.withRowFilter(filter));
// Configure timeouts for reads.
// Let each attempt run for 1 second, retry if the attempt failed.
// Give up after the request is retried for 60 seconds.
Duration attemptTimeout = Duration.millis(1000);
Duration operationTimeout = Duration.millis(60 * 1000);
p.apply("read",
BigtableIO.read()
.withProjectId(projectId)
.withInstanceId(instanceId)
.withTableId("table")
.withKeyRange(keyRange)
.withAttemptTimeout(attemptTimeout)
.withOperationTimeout(operationTimeout);
</code></pre>
<h3>Writing to Cloud Bigtable</h3>
<p>The Bigtable sink executes a set of row mutations on a single table. It takes as input a
<a href="../../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection&lt;KV&lt;ByteString, Iterable&lt;Mutation&gt;&gt;&gt;</code></a>, where the
<code>ByteString</code> is the key of the row being mutated, and each <code>Mutation</code> represents an
idempotent transformation to that row.
<p>To configure a Cloud Bigtable sink, you must supply a table id, a project id, an instance id
and optionally a configuration function for <code>BigtableOptions</code> to provide more specific
connection configuration, for example:
<pre><code>
PCollection&lt;KV&lt;ByteString, Iterable&lt;Mutation&gt;&gt;&gt; data = ...;
data.apply("write",
BigtableIO.write()
.withProjectId("project")
.withInstanceId("instance")
.withTableId("table"));
</code>
// Configure batch size for writes
data.apply("write",
BigtableIO.write()
.withProjectId("project")
.withInstanceId("instance")
.withTableId("table")
.withBatchElements(100)); // every batch will have 100 elements
}</pre>
<p>Optionally, BigtableIO.write() may be configured to emit <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableWriteResult.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableWriteResult</code></a> elements
after each group of inputs is written to Bigtable. These can be used to then trigger user code
after writes have completed. See <a href="../../../../../../../org/apache/beam/sdk/transforms/Wait.html" title="class in org.apache.beam.sdk.transforms"><code>Wait</code></a> for details on the
windowing requirements of the signal and input PCollections.
<pre><code>
// See Wait.on
PCollection&lt;KV&lt;ByteString, Iterable&lt;Mutation&gt;&gt;&gt; data = ...;
PCollection&lt;BigtableWriteResult&gt; writeResults =
data.apply("write",
BigtableIO.write()
.withProjectId("project")
.withInstanceId("instance")
.withTableId("table"))
.withWriteResults();
// The windowing of `moreData` must be compatible with `data`, see {@link org.apache.beam.sdk.transforms.Wait#on}
// for details.
PCollection&lt;...&gt; moreData = ...;
moreData
.apply("wait for writes", Wait.on(writeResults))
.apply("do something", ParDo.of(...))
</code></pre>
<h3>Streaming Changes from Cloud Bigtable</h3>
<p>Cloud Bigtable change streams enable users to capture and stream out mutations from their
Cloud Bigtable tables in real-time. Cloud Bigtable change streams enable many use cases including
integrating with a user's data analytics pipelines, support audit and archival requirements as
well as triggering downstream application logic on specific database changes.
<p>Change stream connector creates and manages a metadata table to manage the state of the
connector. By default, the table is created in the same instance as the table being streamed.
However, it can be overridden with <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableProjectId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableProjectId(java.lang.String)</code></a>, <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableInstanceId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableInstanceId(java.lang.String)</code></a>, <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableTableId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableTableId(java.lang.String)</code></a>, and <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableAppProfileId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableAppProfileId(java.lang.String)</code></a>. The app profile for the metadata
table must be a single cluster app profile with single row transaction enabled.
<p>Note - To prevent unforeseen stream stalls, the BigtableIO connector outputs all data with an
output timestamp of zero, making all data late, which will ensure that the stream will not stall.
However, it means that you may have to deal with all data as late data, and features that depend
on watermarks will not function. This means that Windowing functions and States and Timers are no
longer effectively usable. Example use cases that are not possible because of this include:
<ul>
<li>Completeness in a replicated cluster with writes to a row on multiple clusters.
<li>Ordering at the row level in a replicated cluster where the row is being written through
multiple-clusters.
</ul>
Users can use GlobalWindows with (non-event time) Triggers to group this late data into Panes.
You can see an example of this in the pipeline below.
<pre><code>
Pipeline pipeline = ...;
pipeline
.apply(
BigtableIO.readChangeStream()
.withProjectId(projectId)
.withInstanceId(instanceId)
.withTableId(tableId)
.withAppProfileId(appProfileId)
.withStartTime(startTime));
</code></pre>
<h3>Permissions</h3>
<p>Permission requirements depend on the <a href="../../../../../../../org/apache/beam/sdk/PipelineRunner.html" title="class in org.apache.beam.sdk"><code>PipelineRunner</code></a> that is used to execute the
pipeline. Please refer to the documentation of corresponding <a href="../../../../../../../org/apache/beam/sdk/PipelineRunner.html" title="class in org.apache.beam.sdk"><code>PipelineRunners</code></a> for more details.
<h3>Updates to the I/O connector code</h3>
For any significant updates to this I/O connector, please consider involving corresponding code
reviewers mentioned <a
href="https://github.com/apache/beam/blob/master/sdks/java/io/google-cloud-platform/OWNERS">
here</a>.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.Read</a></span></code>
<div class="block">A <a href="../../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that reads from Google Cloud Bigtable.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.ReadChangeStream</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.Write</a></span></code>
<div class="block">A <a href="../../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that writes to Google Cloud Bigtable.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.WriteWithResults.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.WriteWithResults</a></span></code>
<div class="block">A <a href="../../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that writes to Google Cloud Bigtable and emits a <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableWriteResult.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableWriteResult</code></a> for each batch written.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.Read</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.html#read--">read</a></span>()</code>
<div class="block">Creates an uninitialized <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableIO.Read</code></a>.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.ReadChangeStream</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.html#readChangeStream--">readChangeStream</a></span>()</code>
<div class="block">Creates an uninitialized <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableIO.ReadChangeStream</code></a>.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.Write</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.html#write--">write</a></span>()</code>
<div class="block">Creates an uninitialized <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableIO.Write</code></a>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="read--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>read</h4>
<pre>public static&nbsp;<a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.Read</a>&nbsp;read()</pre>
<div class="block">Creates an uninitialized <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableIO.Read</code></a>. Before use, the <code>Read</code> must be
initialized with a <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html#withInstanceId-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Read.withInstanceId(org.apache.beam.sdk.options.ValueProvider&lt;java.lang.String&gt;)</code></a> and <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html#withProjectId-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Read.withProjectId(org.apache.beam.sdk.options.ValueProvider&lt;java.lang.String&gt;)</code></a> that specifies the source Cloud Bigtable instance, and a <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html#withTableId-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Read.withTableId(org.apache.beam.sdk.options.ValueProvider&lt;java.lang.String&gt;)</code></a> that specifies which table to read. A <code>RowFilter</code> may also
optionally be specified using <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html#withRowFilter-com.google.bigtable.v2.RowFilter-"><code>BigtableIO.Read.withRowFilter(RowFilter)</code></a>.</div>
</li>
</ul>
<a name="write--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>write</h4>
<pre>public static&nbsp;<a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.Write</a>&nbsp;write()</pre>
<div class="block">Creates an uninitialized <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableIO.Write</code></a>. Before use, the <code>Write</code> must be
initialized with a <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html#withProjectId-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Write.withProjectId(org.apache.beam.sdk.options.ValueProvider&lt;java.lang.String&gt;)</code></a> and <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html#withInstanceId-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Write.withInstanceId(org.apache.beam.sdk.options.ValueProvider&lt;java.lang.String&gt;)</code></a> that specifies the destination Cloud Bigtable instance, and a
<a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Write.html#withTableId-org.apache.beam.sdk.options.ValueProvider-"><code>BigtableIO.Write.withTableId(org.apache.beam.sdk.options.ValueProvider&lt;java.lang.String&gt;)</code></a> that specifies which table to write.</div>
</li>
</ul>
<a name="readChangeStream--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>readChangeStream</h4>
<pre><a href="../../../../../../../org/apache/beam/sdk/annotations/Experimental.html" title="annotation in org.apache.beam.sdk.annotations">@Experimental</a>
public static&nbsp;<a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html" title="class in org.apache.beam.sdk.io.gcp.bigtable">BigtableIO.ReadChangeStream</a>&nbsp;readChangeStream()</pre>
<div class="block">Creates an uninitialized <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><code>BigtableIO.ReadChangeStream</code></a>. Before use, the <code>ReadChangeStream</code> must be initialized with
<ul>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withProjectId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withProjectId(java.lang.String)</code></a>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withInstanceId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withInstanceId(java.lang.String)</code></a>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withTableId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withTableId(java.lang.String)</code></a>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withAppProfileId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withAppProfileId(java.lang.String)</code></a>
</ul>
<p>And optionally with
<ul>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withStartTime-org.joda.time.Instant-"><code>BigtableIO.ReadChangeStream.withStartTime(org.joda.time.Instant)</code></a> which defaults to now.
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withHeartbeatDuration-org.joda.time.Duration-"><code>BigtableIO.ReadChangeStream.withHeartbeatDuration(org.joda.time.Duration)</code></a> with defaults to 1 seconds.
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableProjectId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableProjectId(java.lang.String)</code></a> which defaults to value
from <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withProjectId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withProjectId(java.lang.String)</code></a>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableInstanceId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableInstanceId(java.lang.String)</code></a> which defaults to value
from <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withInstanceId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withInstanceId(java.lang.String)</code></a>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableTableId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableTableId(java.lang.String)</code></a> which defaults to <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/changestreams/dao/MetadataTableAdminDao.html#DEFAULT_METADATA_TABLE_NAME"><code>MetadataTableAdminDao.DEFAULT_METADATA_TABLE_NAME</code></a>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withMetadataTableAppProfileId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withMetadataTableAppProfileId(java.lang.String)</code></a> which defaults to value
from <a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withAppProfileId-java.lang.String-"><code>BigtableIO.ReadChangeStream.withAppProfileId(java.lang.String)</code></a>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.ReadChangeStream.html#withChangeStreamName-java.lang.String-"><code>BigtableIO.ReadChangeStream.withChangeStreamName(java.lang.String)</code></a> which defaults to randomly
generated string.
</ul></div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableConfig.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.Read.html" title="class in org.apache.beam.sdk.io.gcp.bigtable"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.html" target="_top">Frames</a></li>
<li><a href="BigtableIO.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>