[[google-bigquery-sql-component]]
= Google BigQuery Standard SQL Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
:docTitle: Google BigQuery Standard SQL
:artifactId: camel-google-bigquery
:description: Access Google Cloud BigQuery service using SQL queries.
:since: 2.23
:supportLevel: Stable
:component-header: Only producer is supported
//Manually maintained attributes
:group: Google

*Since Camel {since}*

*{component-header}*

The Google BigQuery SQL component provides access
to https://cloud.google.com/bigquery/[Cloud BigQuery Infrastructure] via
the https://developers.google.com/apis-explorer/#p/bigquery/v2/bigquery.jobs.query[Google Client Services API].

The current implementation supports only standard SQL
https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax[DML queries].

Maven users will need to add the following dependency to their pom.xml
for this component:

[source,xml]
------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-google-bigquery</artifactId>
    <!-- use the same version as your Camel core version -->
    <version>x.x.x</version>
</dependency>

------------------------------------------------------

[[GoogleBigQuery-AuthenticationConfiguration]]

== Authentication Configuration

Google BigQuery component authentication is targeted for use with the GCP Service Accounts.
For more information please refer to https://cloud.google.com/docs/authentication[Google Cloud Platform Auth Guide]

Google security credentials can be set explicitly via one of the two options:

* Service Account Email and Service Account Key (PEM format)
* GCP credentials file location

If both are set, the Service Account Email/Key will take precedence.

Or implicitly, where the connection factory falls back on
https://developers.google.com/identity/protocols/application-default-credentials#howtheywork[Application Default Credentials].

*OBS!* The location of the default credentials file is configurable - via GOOGLE_APPLICATION_CREDENTIALS environment variable.

Service Account Email and Service Account Key can be found in the GCP JSON credentials file as client_email and private_key respectively.

== URI Format

[source,text]
--------------------------------------------------------
        google-bigquery-sql://project-id:query?[options]
--------------------------------------------------------

Examples:
[source,text]
--------------------------------------------------------
        google-bigquery-sql://project-17248459:delete * from test.table where id=@myId
        google-bigquery-sql://project-17248459:delete * from ${datasetId}.${tableId} where id=@myId
--------------------------------------------------------
where

 * parameters in form $\{name\} are extracted from message headers and formed the translated query
 * parameters in form @name are extracted from body or message headers and sent to Google Bigquery

You can externalize your SQL queries to files in the classpath or file system as shown:
[source,text]
--------------------------------------------------------
        google-bigquery-sql://project-17248459::classpath:delete.sql
--------------------------------------------------------



== Options

// component options: START
The Google BigQuery Standard SQL component supports 4 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *connectionFactory* (producer) | ConnectionFactory to obtain connection to Bigquery Service. If non provided the default one will be used |  | GoogleBigQueryConnectionFactory
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *projectId* (producer) | Google Cloud Project Id |  | String
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END

// endpoint options: START
The Google BigQuery Standard SQL endpoint is configured using URI syntax:

----
google-bigquery-sql:projectId:query
----

with the following path and query parameters:

=== Path Parameters (2 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *query* | *Required* BigQuery standard SQL query |  | String
| *projectId* | *Required* Google Cloud Project Id |  | String
|===


=== Query Parameters (4 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *connectionFactory* (producer) | ConnectionFactory to obtain connection to Bigquery Service. If non provided the default one will be used |  | GoogleBigQueryConnectionFactory
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END


== Ouput Message Headers

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Name |Type |Description
|`CamelGoogleBigQueryTranslatedQuery` |`String` | Preprocessed query text
|=======================================================================


== Producer Endpoints

Google BigQuery SQL endpoint expects the payload to be either empty or a map of query parameters.

include::camel-spring-boot::page$google-bigquery-starter.adoc[]
