# BigQuery

Kubemq gcp-bigquery target connector allows services using kubemq server to access google bigquery server.

## Prerequisites

The following are required to run the gcp-bigquery target connector:

* kubemq cluster
* gcp-bigquery set up
* kubemq-source deployment

## Configuration

bigquery target connector configuration properties:

| Properties Key | Required | Description              | Example                     |
| -------------- | -------- | ------------------------ | --------------------------- |
| project\_id    | yes      | gcp bigquery project\_id | "/myproject"                |
| credentials    | yes      | gcp credentials files    | "\<google json credentials" |

Example:

```yaml
bindings:
  - name: kubemq-query-gcp-bigquery
    source:
      kind: kubemq.query
      name: kubemq-query
      properties:
        address: "kubemq-cluster:50000"
        client_id: "kubemq-query-gcp-bigquery-connector"
        auth_token: ""
        channel: "query.gcp.bigquery"
        group:   ""
        auto_reconnect: "true"
        reconnect_interval_seconds: "1"
        max_reconnects: "0"
    target:
      kind: gcp.bigquery
      name: gcp-bigquery
      properties:
        project_id: "id"
        credentials: 'json'
```

## Usage

### Query Request

query request.

Query metadata setting:

| Metadata Key | Required | Description    | Possible values        |
| ------------ | -------- | -------------- | ---------------------- |
| method       | yes      | type of method | "query"                |
| query        | yes      | the query body | "select \* from table" |

Example:

```javascript
{
  "metadata": {
    "method": "query",
    "query": "select * from table"
  },
  "data": null
}
```

### Create Table Request

create a new table under data set

This method required a body of rows of string \[bigquery.TableMetadata]

Example how to create the struct:

```go
    mySchema := bigquery.Schema{
            {Name: "name", Type: bigquery.StringFieldType},
            {Name: "age", Type: bigquery.IntegerFieldType},
        }

        metaData := &bigquery.TableMetadata{
            Schema:         mySchema,
            ExpirationTime: time.Now().AddDate(2, 1, 0), // Table will deleted in 2 years and 1 month.
        }
        bSchema, err := json.Marshal(metaData)
```

Create table metadata setting:

| Metadata Key | Required | Description                    | Possible values    |
| ------------ | -------- | ------------------------------ | ------------------ |
| method       | yes      | type of method                 | "create\_table"    |
| dataset\_id  | yes      | dataset to assign the table to | "your data set ID" |
| table\_name  | yes      | table name                     | "unique name"      |

Example:

```javascript
{
  "metadata": {
    "method": "create_table",
    "dataset_id": "<mySet>",
    "table_name": "<myTable>"
  },
  "data": "eyJOYW1lIjoiIiwiTG9jYXRpb24iOiIiLCJEZXNjcmlwdGlvbiI6IiIsIlNjaGVtYSI6W3siTmFtZSI6Im5hbWUiLCJEZXNjcmlwdGlvbiI6IiIsIlJlcGVhdGVkIjpmYWxzZSwiUmVxdWlyZWQiOmZhbHNlLCJUeXBlIjoiU1RSSU5HIiwiUG9saWN5VGFncyI6bnVsbCwiU2NoZW1hIjpudWxsfSx7Ik5hbWUiOiJhZ2UiLCJEZXNjcmlwdGlvbiI6IiIsIlJlcGVhdGVkIjpmYWxzZSwiUmVxdWlyZWQiOmZhbHNlLCJUeXBlIjoiSU5URUdFUiIsIlBvbGljeVRhZ3MiOm51bGwsIlNjaGVtYSI6bnVsbH1dLCJNYXRlcmlhbGl6ZWRWaWV3IjpudWxsLCJWaWV3UXVlcnkiOiIiLCJVc2VMZWdhY3lTUUwiOmZhbHNlLCJVc2VTdGFuZGFyZFNRTCI6ZmFsc2UsIlRpbWVQYXJ0aXRpb25pbmciOm51bGwsIlJhbmdlUGFydGl0aW9uaW5nIjpudWxsLCJSZXF1aXJlUGFydGl0aW9uRmlsdGVyIjpmYWxzZSwiQ2x1c3RlcmluZyI6bnVsbCwiRXhwaXJhdGlvblRpbWUiOiIyMDIyLTExLTI1VDEwOjQxOjI1LjIyNjQ1NyswMjowMCIsIkxhYmVscyI6bnVsbCwiRXh0ZXJuYWxEYXRhQ29uZmlnIjpudWxsLCJFbmNyeXB0aW9uQ29uZmlnIjpudWxsLCJGdWxsSUQiOiIiLCJUeXBlIjoiIiwiQ3JlYXRpb25UaW1lIjoiMDAwMS0wMS0wMVQwMDowMDowMFoiLCJMYXN0TW9kaWZpZWRUaW1lIjoiMDAwMS0wMS0wMVQwMDowMDowMFoiLCJOdW1CeXRlcyI6MCwiTnVtTG9uZ1Rlcm1CeXRlcyI6MCwiTnVtUm93cyI6MCwiU3RyZWFtaW5nQnVmZmVyIjpudWxsLCJFVGFnIjoiIn0="
}
```

### Delete Table Request

delete a new table under data set

Delete table metadata setting:

| Metadata Key | Required | Description                    | Possible values    |
| ------------ | -------- | ------------------------------ | ------------------ |
| method       | yes      | type of method                 | "create\_table"    |
| dataset\_id  | yes      | dataset to assign the table to | "your data set ID" |
| table\_name  | yes      | table name                     | "unique name"      |

Example:

```javascript
{
  "metadata": {
    "method": "delete_table",
    "dataset_id": "<mySet>",
    "table_name": "<myTable>"
  },
  "data":null
}
```

### Create Data Set Request

Create a Data Set

Create Data Set metadata setting:

| Metadata Key | Required | Description                    | Possible values                                              |
| ------------ | -------- | ------------------------------ | ------------------------------------------------------------ |
| method       | yes      | type of method                 | "create\_data\_set"                                          |
| dataset\_id  | yes      | dataset to assign the table to | "your data set ID"                                           |
| location     | yes      | dataset location to set        | "US"  See <https://cloud.google.com/bigquery/docs/locations> |

Example:

```javascript
{
  "metadata": {
    "method": "create_data_set",
    "dataset_id": "<mySet>",
    "location": "US"
  },
  "data":null
}
```

### Delete Data Set Request

delete a Data Set

Delete Data Set metadata setting:

| Metadata Key | Required | Description                    | Possible values     |
| ------------ | -------- | ------------------------------ | ------------------- |
| method       | yes      | type of method                 | "delete\_data\_set" |
| dataset\_id  | yes      | dataset to assign the table to | "your data set ID"  |

Example:

```javascript
{
  "metadata": {
    "method": "delete_data_set",
    "dataset_id": "<mySet>"
  },
  "data":null
}
```

### Get DataSets Request

get data sets.

Get DataSets setting:

| Metadata Key | Required | Description    | Possible values   |
| ------------ | -------- | -------------- | ----------------- |
| method       | yes      | type of method | "get\_data\_sets" |

Example:

```javascript
{
  "metadata": {
    "method": "get_data_sets"
  },
  "data": null
}
```

### Get Table Info

get basic information on a table by name

Get table Info

| Metadata Key | Required | Description                    | Possible values     |
| ------------ | -------- | ------------------------------ | ------------------- |
| method       | yes      | type of method                 | "get\_table\_info"  |
| dataset\_id  | yes      | dataset to assign the table to | "your data set ID"  |
| table\_name  | yes      | table name                     | "unique table name" |

Example:

```javascript
{
  "metadata": {
    "method": "get_table_info",
    "dataset_id": "<mySet>",
    "table_name": "<myTable>"
  },
  "data": null
}
```

### Insert To Table

insert rows to table

Insert To Table this method required a body of rows as json array

```javascript
[
 {"id":"id-1","service":{"id":"service_id_1","value":0.1},"time":"1980-10-10T00:00:00Z"},
 {"id":"id-2","service":{"id":"service_id_2","value":0.1},"time":"1980-10-10T00:00:00Z"}
 ]
```

| Metadata Key | Required | Description                    | Possible values     |
| ------------ | -------- | ------------------------------ | ------------------- |
| method       | yes      | type of method                 | "insert"            |
| dataset\_id  | yes      | dataset to assign the table to | "your data set ID"  |
| table\_name  | yes      | table name                     | "unique table name" |

Example:

```javascript
{
  "metadata": {
    "method": "insert",
    "dataset_id": "<mySet>",
    "table_name": "<myTable>"
  },
  "data": "W3sgIm5hbWUiOiJteU5hbWU0IiwgImFnZSI6MjV9XQ=="
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.kubemq.io/configuration/connectors/kubemq-targets/gcp/bigquery.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
