Documentation

查询 SQL 数据源

这个 Flux sql 包提供了用于处理 SQL 数据源的函数。 sql.from() 让你可以查询 SQL 数据源,如 PostgreSQLMySQLSnowflakeSQLiteMicrosoft SQL ServerAmazon AthenaGoogle BigQuery,并将结果用于 InfluxDB 仪表板、任务和其他操作。

如果您刚刚开始使用Flux查询,请查看以下内容:

查询一个 SQL 数据源

要查询SQL数据源:

  1. 在您的Flux查询中导入sql
  2. 使用 sql.from() 函数来指定驱动程序、数据源名称 (DSN) 和用于从您的 SQL 数据源查询数据的查询:
import "sql"

sql.from(
    driverName: "postgres",
    dataSourceName: "postgresql://user:password@localhost",
    query: "SELECT * FROM example_table",
)
import "sql"

sql.from(
    driverName: "mysql",
    dataSourceName: "user:password@tcp(localhost:3306)/db",
    query: "SELECT * FROM example_table",
)
import "sql"

sql.from(
    driverName: "snowflake",
    dataSourceName: "user:password@account/db/exampleschema?warehouse=wh",
    query: "SELECT * FROM example_table",
)
// NOTE: InfluxDB OSS and InfluxDB Cloud do not have access to
// the local filesystem and cannot query SQLite data sources.
// Use the Flux REPL to query an SQLite data source.

import "sql"

sql.from(
    driverName: "sqlite3",
    dataSourceName: "file:/path/to/test.db?cache=shared&mode=ro",
    query: "SELECT * FROM example_table",
)
import "sql"

sql.from(
    driverName: "sqlserver",
    dataSourceName: "sqlserver://user:password@localhost:1234?database=examplebdb",
    query: "GO SELECT * FROM Example.Table",
)

有关使用ADO样式参数对SQL Server进行身份验证的信息,请参见 SQL Server ADO authentication

import "sql"
sql.from(
    driverName: "awsathena",
    dataSourceName: "s3://myorgqueryresults/?accessID=12ab34cd56ef&region=region-name&secretAccessKey=y0urSup3rs3crEtT0k3n",
    query: "GO SELECT * FROM Example.Table",
)

有关在 Athena DSN 中包含的参数的信息,请参见 Athena connection string

import "sql"
sql.from(
    driverName: "bigquery",
    dataSourceName: "bigquery://projectid/?apiKey=mySuP3r5ecR3tAP1K3y",
    query: "SELECT * FROM exampleTable",
)

有关使用BigQuery进行身份验证的信息,请参见 BigQuery身份验证参数

请查看sql.from() 文档以获取有关必需函数参数的信息。

将SQL数据与InfluxDB中的数据进行连接

从InfluxDB查询SQL数据源的主要好处之一是能够用存储在InfluxDB之外的数据来丰富查询结果。

使用下面的 空气传感器样本数据,以下查询将存储在 InfluxDB 中的空气传感器指标与存储在 PostgreSQL 中的传感器信息进行连接。连接的数据使您能够根据未存储在 InfluxDB 中的传感器信息查询和过滤结果。

// Import the "sql" package
import "sql"

// Query data from PostgreSQL
sensorInfo = sql.from(
    driverName: "postgres",
    dataSourceName: "postgresql://localhost?sslmode=disable",
    query: "SELECT * FROM sensors",
)

// Query data from InfluxDB
sensorMetrics = from(bucket: "example-bucket")
    |> range(start: -1h)
    |> filter(fn: (r) => r._measurement == "airSensors")

// Join InfluxDB query results with PostgreSQL query results
join(tables: {metric: sensorMetrics, info: sensorInfo}, on: ["sensor_id"])

使用SQL结果填充仪表板变量

使用 sql.from() 从 SQL 查询结果中 创建仪表板变量。 以下示例使用下面的 空气传感器示例数据 创建一个变量,让您选择传感器的位置。

import "sql"

sql.from(
    driverName: "postgres",
    dataSourceName: "postgresql://localhost?sslmode=disable",
    query: "SELECT * FROM sensors",
)
    |> rename(columns: {location: "_value"})
    |> keep(columns: ["_value"])

使用变量在您的仪表板中操作查询。

Dashboard variable from SQL query results

使用秘密存储SQL数据库凭据

如果您的 SQL 数据库需要身份验证,请使用 InfluxDB 秘密 存储和填充连接凭据。默认情况下,InfluxDB 以 base64 编码并将秘密存储在其内部键值存储中,BoltDB。为了提高安全性,将秘密存储在 Vault

将您的数据库凭据存储为机密

使用InfluxDB APIinflux CLI将您的数据库凭据存储为秘密。

curl --request PATCH http://localhost:8086/api/v2/orgs/<org-id>/secrets \
  --header 'Authorization: Token YOURAUTHTOKEN' \
  --header 'Content-type: application/json' \
  --data '{
  "POSTGRES_HOST": "http://example.com",
  "POSTGRES_USER": "example-username",
  "POSTGRES_PASS": "example-password"
}'

要存储秘密,您需要:

# Syntax
influx secret update -k <secret-key>

# Example
influx secret update -k POSTGRES_PASS

在提示时,输入您的秘密值。

您可以通过 -v--value 标志提供秘密值,但明文秘密可能会出现在您的 shell 历史记录中

influx secret update -k <secret-key> -v <secret-value>

在查询中使用秘密

导入 influxdata/influxdb/secrets 包,并使用 字符串插值 在您的 Flux 查询中填充存储的秘密作为连接凭据。

import "sql"
import "influxdata/influxdb/secrets"

POSTGRES_HOST = secrets.get(key: "POSTGRES_HOST")
POSTGRES_USER = secrets.get(key: "POSTGRES_USER")
POSTGRES_PASS = secrets.get(key: "POSTGRES_PASS")

sql.from(
    driverName: "postgres",
    dataSourceName: "postgresql://${POSTGRES_USER}:${POSTGRES_PASS}@${POSTGRES_HOST}",
    query: "SELECT * FROM sensors",
)

示例传感器数据

空气传感器样本数据样本传感器信息模拟了一组在建筑物各个房间内测量温度、湿度和一氧化碳的传感器。每一个收集到的数据点都存储在InfluxDB中,并带有一个sensor_id标签,标识数据来自于哪个特定的传感器。样本传感器信息存储在PostgreSQL中。

示例数据包括:

  • 从每个传感器收集的模拟数据存储在InfluxDB中的airSensors测量中:

    • temperature
    • humidity
    • co
  • 关于存储在PostgreSQL中的sensors表的每个传感器的信息:

    • sensor_id
    • location
    • model_number
    • last_inspected

下载样本空气传感器数据

  1. 创建一个存储数据的桶

  2. 创建一个 InfluxDB 任务 并使用sample.data() 函数 每 15 分钟下载一次示例空气传感器数据。 将下载的示例数据写入您的新桶:

    import "influxdata/influxdb/sample"
    
    option task = {name: "Collect sample air sensor data", every: 15m}
    
    sample.data(set: "airSensor")
        |> to(org: "example-org", bucket: "example-bucket")
    
  3. 查询您的目标桶 在第一次任务运行后,以确保示例数据成功写入。

    from(bucket: "example-bucket")
        |> range(start: -1m)
        |> filter(fn: (r) => r._measurement == "airSensors")
    

导入示例传感器信息

  1. 下载并安装 PostgreSQL

  2. 下载示例传感器信息CSV。

    下载示例传感器信息

  3. 使用 PostgreSQL 客户端 (psql 或 GUI) 创建 sensors 表:

    CREATE TABLE sensors (
      sensor_id character varying(50),
      location character varying(50),
      model_number character varying(50),
      last_inspected date
    );
    
  4. 导入下载的 CSV 示例数据。FROM 文件路径更新为下载的 CSV 示例数据的路径。

    COPY sensors(sensor_id,location,model_number,last_inspected)
    FROM '/path/to/sample-sensor-info.csv' DELIMITER ',' CSV HEADER;
    
  5. 查询表以确保数据正确导入:

    SELECT * FROM sensors;
    

导入示例数据仪表板

下载并导入空气传感器仪表板以可视化生成的数据:

查看空气传感器仪表盘 JSON

有关导入仪表板的信息,请参见 Create a dashboard



Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看:

由TSM驱动的InfluxDB Cloud