# gRPC

> Overview of using gRPC SDKs for efficient and high-performance data ingestion in GreptimeDB.

# gRPC

GreptimeDB offers [gRPC SDKs](/user-guide/ingest-data/for-iot/grpc-sdks/overview.md) for efficient and high-performance data ingestion.

If there is no SDK available for your programming language, you have the option to [create your own SDK](/contributor-guide/how-to/how-to-write-sdk.md) by following the guidelines provided in the contributor guide.

## Hints

Use the `x-greptime-hints` gRPC metadata to pass hints as a comma-separated list of `key=value` pairs.

### Disable WAL for a single write request

Set `insert_skip_wal=true` in the `x-greptime-hints` gRPC metadata to disable the Write-Ahead Log (WAL) for the current insert request.
For Bulk Write using Arrow Flight `DoPut`, this hint applies to the entire stream.

This setting applies only to the current request and does not change the [table-level `skip_wal` option](/reference/sql/create.md#create-a-table-with-wal-disabled).
Setting `insert_skip_wal` to `false` or omitting the hint does not enable WAL if the table-level `skip_wal` option is `true`.

:::warning
When WAL is disabled, unflushed data is lost if the process restarts.
Use this option only when the data can be ingested again from its source.
:::

## Bulk Write schema updates

Arrow Flight `DoPut` Bulk Write requires an existing target table. By default, the server checks the stream's Arrow schema before processing the first data batch and adds missing columns to the table.
The frontend/standalone top-level `auto_create_table` configuration and request metadata `x-greptime-hint-auto_create_table` both default to `true`. Setting either to `false` disables automatic schema updates for ordinary tables. A request value of `true` does not override a server value of `false`.
New columns are fields, not primary-key columns. Define primary-key columns with SQL before writing.

Automatic column addition does not support nested Arrow types or Dictionary types. Input must satisfy the target table's type, time-index, and nullability constraints.
