3.6 KiB
title | list_title | description | menu | weight | related | list_code_example | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Write to SQL databases | SQL databases | Use [`sql.to()`](/flux/v0/stdlib/sql/to/) to write data to SQL databases with Flux. |
|
102 |
|
```js import "sql" sql.to( driverName: "postgres", dataSourceName: "postgresql://user:password@localhost", table: "ExampleTable", batchSize: 10000, ) ``` |
Use sql.to()
to write data to SQL databases with Flux.
Databases
sql.to()
supports the following SQL databases:
{{< children type="list" >}}
Drivers
sql.to()
uses Go SQL drivers
in the Go sql package to connect to SQL databases.
The following drivers are available:
bigquery
hdb
mysql
postgres
snowflake
sqlite3
sqlserver
Data source names
Each SQL driver supports unique data source name (DSN) syntaxes (also known as connection strings). See the database guides for information about DSNs for each driver.
Store sensitive credentials as secrets
If using InfluxDB Cloud or InfluxDB OSS 2.x, we recommend storing DSN
credentials as InfluxDB secrets.
Use secrets.get()
to
retrieve a secret from the InfluxDB secrets API.
import "sql"
import "influxdata/influxdb/secrets"
username = secrets.get(key: "POSTGRES_USER")
password = secrets.get(key: "POSTGRES_PASS")
sql.to(
driverName: "postgres",
dataSourceName: "postgresql://${username}:${password}@localhost:5432",
table: "example_table",
)
Data Structure
sql.to()
ungroups all rows into a single table and writes all existing columns
as the specified destination table.
If the destination table doesn't exist, sql.to()
attempts to create it.
{{% note %}}
Column data types
Each sql.to()
driver converts Flux basic data types
to corresponding data types supported by the target database.
See the database guides for information about data type conversions.
{{% /note %}}
Example
Given the following following stream of tables:
data
_time | tag | _value |
---|---|---|
2021-01-01T00:00:00Z | t1 | -2 |
2021-01-01T00:00:10Z | t1 | 10 |
2021-01-01T00:00:20Z | t1 | 7 |
_time | tag | _value |
---|---|---|
2021-01-01T00:00:00Z | t2 | 19 |
2021-01-01T00:00:10Z | t2 | 4 |
2021-01-01T00:00:20Z | t2 | -3 |
Flux script
import "sql"
data
|> sql.to(
driverName: "mysql",
dataSourceName: "username:passwOrd@tcp(localhost:3306)/db",
table: "exampleTable"
)
SQL output
_time | tag | _value |
---|---|---|
2021-01-01 00:00:00 | t1 | -2 |
2021-01-01 00:00:10 | t1 | 10 |
2021-01-01 00:00:20 | t1 | 7 |
2021-01-01 00:00:00 | t2 | 19 |
2021-01-01 00:00:10 | t2 | 4 |
2021-01-01 00:00:20 | t2 | -3 |