<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Table API Connectors on GCP Connectors for Apache Flink</title><link>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/</link><description>Recent content in Table API Connectors on GCP Connectors for Apache Flink</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/index.xml" rel="self" type="application/rss+xml"/><item><title>BigQuery</title><link>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/bigquery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/bigquery/</guid><description>&lt;h1 id="bigquery-sql-connector"&gt;BigQuery SQL Connector&lt;a class="anchor" href="#bigquery-sql-connector"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;bigquery&lt;/code&gt; connector provides a bounded &lt;a href="#source"&gt;source&lt;/a&gt; for BigQuery tables and query results, and a &lt;a href="#sink"&gt;sink&lt;/a&gt; for all three write methods through the module &lt;code&gt;flink-connector-gcp-bigquery&lt;/code&gt;.
The sink also supports experimental &lt;a href="#change-data-capture"&gt;CDC ingestion&lt;/a&gt;: upserts and deletes with a declared primary key, using only the at-least-once default-stream write method.
It maps onto the DataStream source and sink documented in
&lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/datastream/bigquery/"&gt;BigQuery&lt;/a&gt; — that page carries the design,
the delivery guarantees and the error handling; this one carries the DDL surface. Per-feature
status is in the module README.&lt;/p&gt;</description></item><item><title>Cloud Pub/Sub</title><link>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/pubsub/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/pubsub/</guid><description>&lt;h1 id="cloud-pubsub-sql-connector"&gt;Cloud Pub/Sub SQL Connector&lt;a class="anchor" href="#cloud-pubsub-sql-connector"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;pubsub&lt;/code&gt; table connector, provided by the &lt;code&gt;flink-connector-gcp-pubsub&lt;/code&gt; module. It maps onto the
&lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/datastream/pubsub/"&gt;DataStream sink and source&lt;/a&gt;, which is where the
behavior behind every option is documented; this page covers the option surface and the decisions specific to SQL.&lt;/p&gt;
&lt;p&gt;Per-feature implementation status — including which directions are implemented — is tracked in the
&lt;a href="https://github.com/flink-gcp/flink-connector-gcp/blob/main/flink-connector-gcp-pubsub/README.md"&gt;module README&lt;/a&gt;. Most of
the option keys below are declared by &lt;code&gt;PubSubConnectorOptions&lt;/code&gt; — &lt;code&gt;format&lt;/code&gt;, &lt;code&gt;sink.parallelism&lt;/code&gt; and
&lt;code&gt;scan.parallelism&lt;/code&gt; come from Flink&amp;rsquo;s &lt;code&gt;FactoryUtil&lt;/code&gt; — and are applied by an internal table factory;
both it and the DataStream types the options map onto are in the
&lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/api/java/"&gt;Java API reference&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Cloud Tasks</title><link>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/cloudtasks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/cloudtasks/</guid><description>&lt;h1 id="cloud-tasks-sql-connector"&gt;Cloud Tasks SQL Connector&lt;a class="anchor" href="#cloud-tasks-sql-connector"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Start with the &lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/quickstart/cloudtasks/"&gt;Quickstart&lt;/a&gt; for the basic DataStream
job, or use the &lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/examples/cloudtasks/"&gt;Cloud Tasks examples&lt;/a&gt; for complete
Table sink requests and cross-connector pipelines.&lt;/p&gt;
&lt;h2 id="overview-and-setup"&gt;Overview and setup&lt;a class="anchor" href="#overview-and-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;cloud-tasks&lt;/code&gt; table connector is a sink provided by the
&lt;code&gt;flink-connector-gcp-cloudtasks&lt;/code&gt; module.
It maps onto the &lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/datastream/cloudtasks/"&gt;DataStream sink&lt;/a&gt;, which
documents checkpoint behavior, retries, task naming and queue pacing.
This page defines how SQL rows become external HTTP or App Engine requests.&lt;/p&gt;
&lt;p&gt;Cloud Tasks is a request dispatch queue rather than an API-specific client.
The target API therefore decides whether a request uses JSON, another body format, a query string,
or no body at all.
SQL represents that split with a Flink format for the body and writable metadata for the rest of
the request.&lt;/p&gt;</description></item><item><title>Bigtable</title><link>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/bigtable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/bigtable/</guid><description>&lt;h1 id="bigtable-sql-connector"&gt;Bigtable SQL Connector&lt;a class="anchor" href="#bigtable-sql-connector"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;bigtable&lt;/code&gt; connector reads and writes a table in Cloud Bigtable through the module
&lt;code&gt;flink-connector-gcp-bigtable&lt;/code&gt;. It is a mapping onto the DataStream sink and scan source documented
in &lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/datastream/bigtable/"&gt;Bigtable&lt;/a&gt; — that page carries the design,
the delivery guarantees and the error handling; this one carries the DDL surface. Per-feature
status is in the module README.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sink.parallelism&lt;/code&gt; and &lt;code&gt;scan.parallelism&lt;/code&gt; come from Flink&amp;rsquo;s own &lt;code&gt;FactoryUtil&lt;/code&gt; rather than from this
connector.
Bounded scans and sinks have no format option: a Bigtable row is a schema this DDL describes, cell
by cell, and the cell encoding is the HBase ecosystem&amp;rsquo;s rather than a choice.
The selected-cell Change Streams mode is the exception because one cell holds a serialized logical
row and &lt;code&gt;value.format&lt;/code&gt; decodes it.&lt;/p&gt;</description></item><item><title>Bigtable async SQL functions</title><link>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/bigtable-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/bigtable-functions/</guid><description>&lt;h1 id="bigtable-async-sql-functions"&gt;Bigtable async SQL functions&lt;a class="anchor" href="#bigtable-async-sql-functions"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;These functions return the result of one atomic Bigtable row operation to a SQL query.
&lt;code&gt;BigtableCheckAndMutateFunction&lt;/code&gt; returns whether its predicate matched.
&lt;code&gt;BigtableReadModifyWriteFunction&lt;/code&gt; returns the final cells changed by ordered append and increment rules.
Both are available in &lt;strong&gt;Flink 2.x streaming mode&lt;/strong&gt;, including bounded streaming queries.
The Flink 1.20 artifacts do not contain these classes; use the &lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/datastream/bigtable/"&gt;DataStream request APIs&lt;/a&gt; when that version needs results.&lt;/p&gt;
&lt;p&gt;Put the matching &lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/bigtable/#getting-the-connector-onto-the-classpath"&gt;&lt;code&gt;flink-sql-connector-gcp-bigtable&lt;/code&gt; jar&lt;/a&gt; on the SQL Client or SQL Gateway and cluster classpaths.
Register the function with &lt;code&gt;CREATE TEMPORARY SYSTEM FUNCTION&lt;/code&gt;, configure a named request through &lt;code&gt;SET&lt;/code&gt;, and call it in a query.
The SQL aliases below are chosen at registration.
Create the destination table, its families, and a single-cluster application profile with single-row transactions enabled before running the examples.
Authentication uses application-default credentials unless a key file is configured.&lt;/p&gt;</description></item><item><title>Spanner</title><link>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/spanner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/table/spanner/</guid><description>&lt;h1 id="spanner-sql-connector"&gt;Spanner SQL connector&lt;a class="anchor" href="#spanner-sql-connector"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;spanner&lt;/code&gt; connector reads bounded Table API and SQL scans, emits unbounded Change Streams changelogs, serves primary-key lookup joins, and writes rows through &lt;code&gt;flink-connector-gcp-spanner&lt;/code&gt;.
It maps onto the &lt;a href="https://flink-gcp.github.io/flink-connector-gcp/1.1/docs/connectors/datastream/spanner/"&gt;DataStream source and sink&lt;/a&gt;, so partitioning, snapshot, batching, retry, delivery, metrics, and failure behavior remain the same.&lt;/p&gt;

&lt;span hidden data-sql-snippet-file="flink/SpannerTableReference.sql" data-sql-snippet-tag="overview"&gt;&lt;/span&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;DECIMAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;updated_at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TIMESTAMP_LTZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENFORCED&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;connector&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;spanner&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;project&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;my-project&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;instance&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;my-instance&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;database&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;orders-db&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;table&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;orders&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;updated_at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;staged_orders&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Use &lt;code&gt;flink-sql-connector-gcp-spanner&lt;/code&gt;, the relocated SQL uber-jar, for SQL deployments.
Place &lt;code&gt;flink-sql-connector-gcp-spanner-&amp;lt;version&amp;gt;.jar&lt;/code&gt; in Flink&amp;rsquo;s &lt;code&gt;lib/&lt;/code&gt; before starting the cluster,
or load it for one SQL Client session:&lt;/p&gt;</description></item></channel></rss>